BERT学习笔记
BERT的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder。不同于最近的语言表示模型,BERT旨在通过对所有层的左右上下文进行联合调节,从未标记文本中预先训练深层双向表示。因此,预先训练好的BERT模型只需一个额外的输出层就可以进行微调,从而为广泛的任务创建最先进的模型,而无需对特定任务的体系结构进行实质性修改。
BERT自提出以来在许多自然语言理解任务上刷新了最好指标,可以说是近年来 NLP 领域取得的最重大的进展之一。BERT 论文也斩获 NLP 领域顶会 NAACL 2019 的最佳论文奖,BERT 的成功也启发了大量的后续工作,不断刷新了 NLP 领域各个任务的最佳水平。
BERT介绍
背景
语言模型预训练可以显著提高许多自然语言处理任务的效果,这些任务包括句子级任务,如自然语言推理和释义,目的是通过对句子的整体分析来预测句子之间的关系,以及标记级任务。
目前将预训练语言表征应用于下游任务存在两种方法:feature-based方法和fine-tuning方法。
- feature-based:使用将预训练表征作为额外特征的任务专用架构,例如ELMo。
- fine-tuning:引入了任务特定最小参数,通过简单地微调预训练参数在下游任务中进行训练,例如生成预训练 Transformer (OpenAI GPT)。
但是现有的技术严重制约了预训练表征的能力,其主要局限在于标准语言模型是单向的,这限制了可以在预训练期间使用的架构类型。例如,OpenAI GPT使用的是从左到右的架构,其中每个token只能关注Transformer自注意力层中的先前token。这些限制对于句子层面的任务而言不是最佳选择,对于token级任务则可能是毁灭性的,因为在这种任务中,结合两个方向去分析上下文至关重要。
BERT提出一种新的预训练目标——遮蔽语言模型(masked language model,MLM),来克服上文提到的单向局限。MLM随机遮蔽输入中的一些token,目标在于仅基于遮蔽词的语境来预测其原始词汇id。与从左到右的语言模型预训练不同,MLM目标允许表征融合左右上下文,从而预训练一个深层双向Transformer。除了 MLM,还引入了“下一句预测”(next sentence prediction,NSP)任务,该任务联合预训练文本对表征。
模型
BERT的模型架构是一个多层双向Transformer编码器,BERT主要包含两个过程:pre-training 和 fine-tunning。在预训练期间,在不同的预预训练任务上使用未标记的数据对该模型进行的训练。在微调期间,首先用预训练的参数初始化BERT模型,并且使用来自下游任务的标记数据对所有参数进行微调。每个下游任务都有单独的微调模型,即使它们是用相同的预训练参数初始化的。下图是pre-training和fine-tunning的示意图。
在模型中,将层数(即Transformer块)表示为L,隐层的size表示为H、自注意力头数表示为A,参数量表示为Total Parameters。BERT有2种大小的模型,分别是 B E R T b a s e BERT_{base} BERTbase(L=12, H=768, A=12, Total Parameters=110M)和 B E R T l a r g e BERT_{large} BERTlar