一、前言
本阅读笔记是在阅读BERT模型过程中觉得需要记录的笔记,也是自己的理解记录。如有错误,欢迎指出纠正讨论,谢谢!
目前该篇仅记录BERT文章的前三章,也就是模型相关介绍,后面的实验以及讨论暂未看完,后期继续更新!
博客中引用的图片全部来自于BERT原文:https://arxiv.org/pdf/1810.04805.pdf
摘要部分
摘要部分主要概括性的介绍BERT的主体:
BERT旨在联合调节模型中的所有层次中的上下文来对未标记文本进行深层双向表征的预训练。
同时说明了BERT模型非常灵活,只需要在输出层作出调整,即可在众多的下游任务中刷新记录!非常厉害的工具!
同时也介绍了Google这篇论文的工作刷爆了11项自然语言处理的任务。
引言部分
将预训练语言表征应用于下游任务的策略有两种:
(1)基于特征(featrue-based)
如ELMo,使用包含预训练表征作为附加特征的任务特定型结构;
(2)微调整(fine-tuning)
如GPT,在模型中引入了最少的任务特定参数,并且这些参数可以在下游任务中进行简单的微调(fine-tuning),使得其表征更佳适应当前场景。
对比当时的工作,Google AI Language团队认为现有的技术限制了预训练表征的能力,特别是当我们将预训练好的表征通过微调整(fine-tuning)应用在我们的下游任务时。
最主要的限制是:标准语言模型的构建都是单向的,这对于预训练的表征应用于下游任务时,下游任务所能选择的结构产生了限制.
比如在OpenAIGPT的工作中,作者仅使用了一个从左到右的结构,其中每一个序列(token)在Transformer的自注意力层中仅可以关注到之前的序列(tokens).这对于句子级别的任务来说是次优的,并且对于一些序列级别的任务,例如QA任务来说,这些任务是非常需要从左右两个方向的相关上下文的信息来交互的,但是在本工作之前的工作并没有考虑到目前语言模型的构建都是单向的限制。
BERT的工作受Cloze task的启发,通过使用"masked language model(掩盖语言模型)"预训练目标来缓解了前面提到的单向限制。
掩盖语言模型随机掩盖输入序列中的部分序列(token),并且这个掩盖语言模型的目标是基于被掩盖词的上下文,预测出被掩盖词的原始词典id.这个思路是与单向的由左至右的语言模型预训练是不一样的,掩盖语言模型的目标是使得训练得到的表征能够融合前后的上下文信息,这个目标就使得我们采用了预训练一个深层的双向transformer。
除此之外,BERT还通过文本匹配的表征的下一句子预测任务来获得文本句子级别的表征;
最后介绍了这篇paper的主要贡献:
(1)本文强调申明了双向预训练对于语言表征模型的重要性。而不是像近期的学者一样,使用单向语言模型进行预训练。