本文主要讲解Bert模型的基本原理与Fine-tuning。
基本原理
BERT是一种 预训练语言模型 ,即首先使用大量无监督语料进行语言模型预训练(Pre-training),再使用少量标注语料进行微调(Fine-tuning)来完成具体NLP任务(分类、序列标注、句间关系判断和机器阅读理解等)。
BERT的全称是Bidirectional Encoder Representation from Transformers,即:基于transformer的双向Encoder,所以在学习BERT之前先对Self-Attention与transformer进行学习,具体可以参考深入理解 Bert核心:Self-Attention与transformer。
该模型的主要创新点在:(1)使用了MAsk机制捕捉句子中词语之间的的representation。(2)使用了Next Sentence Prediction捕捉句子级别的representation。
回顾一下transformer模型:
图中的(1)就是bert模型的核心组成部分,将这样的结构进行堆叠,就是BERT 模型。如下图:
在transformer中,每一个输入分别对应一个Embedding输出,将其称之为隐向量。在做具体NLP任务的时候,只需要从中取对应的隐向量作为输出即可。
Bert模型的两个基本预任务:
(1)Masked Language Model(MLM)
通过随机掩盖一些词(替换为统一标记符[MASK]),然后预测这些被遮盖的词来训练双向语言模型,并且使每个词的表征参考上下文信息。此处产生loss_1。
(2)Next Sentence Prediction(NSP)
为了训练一个理解句子间关系的模型,引入一个下一句预测任务。每次的训练样本是一个上下句,其中一半的样本是正样本(上下句之间的对应关系是真实的);另外一半样本是负样本(上下句之间是无关的)。此处产生loss_2。
模型的loss为:loss_1+ loss_2。
此处插入一个预训练模型(GPT,BERT,ELMO)小对比。三个模型如下图所示:
注:图中的Trm与LSTM一样只是代表一个单元。那些复杂的连线表示的是词与词之间的依赖关系,BERT中的依赖关系既有前文又有后文,而GPT的依赖关系只有前文。
GPT是单向模型,预测时只能预测下一个词;BERT和ELMO是双向模型,其中,而BERT是预测文中扣掉的词,可以充分利用到上下文的信息,这使得模型有更强的表达能力,这也是BERT中Bidirectional的含义。BERT和ELMO都是双向,但二者的目标函数不同。
ELMO的目标函数为:
P ( w i ∣ w 1 , ⋯ w i − 1 ) 和 P ( w i ∣ w i + 1 , ⋯ w n ) P(w_i|w_1,\cdots w_{i-1})和 P(w_i|w_{i+1},\cdots w_n) P(wi∣w1,⋯w