Bert全称Bidrectional Encoder Representation fromTransformers,即双向Transformer的Encoder,因为decoder是不能获要预测的信息的。模型的主要创新点都在pre-train方法上,即用Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。
由于模型的构成元素是Transformer,就不多说了,Bert模型的结构如下图最左:
对比OpenAI GPT(Generative pre-train transformer),Bert是双向的Transformer block连接;就像单项的RNN和双向的RNN的区别,直觉上来讲效果会好一些。
对比ELMo,虽然都是“双向”,但目标函数其实是不同的,EMLo是分别以 P ( w i ∣ w 1 , … w i − 1 ) P\left(w_{i} \mid w_{1}, \ldots w_{i-1}\right) P(wi∣w1,…wi−1) 和 P ( w i ∣ w i + 1 , … w n ) P\left(w_{i} \mid w_{i+1}, \ldots w_{n}\right) P(wi∣wi+1,…wn)作为目标函数,独立训练出两个representation然后拼接,而Bert则是以 P ( w i ∣ w 1 , … , w i − 1 , w i + 1 , … , w n ) P\left(w_{i} \mid w_{1}, \ldots, w_{i-1}, w_{i+1}, \ldots, w_{n}\right) P(wi∣w1,…,wi−1,wi+1,…,wn)作为目标函数训练LM。
这里的Embedding由三种embedding求和而成:
其中:
第一步预训练的目标就是做语言模型,从上文模型结构中肯到了这个模型的不同,即bidirectional。关于为什么要如此的bidirectional,就是如果使用预训练模型处理其他任务,那人们想要的肯定不止某个词左边的信息,而是左右两边的信息。而考虑到这点的模型ELMo只是将left-ti-right和right-to-left分别训练拼接起来。直觉上来讲我们其实想要一个deeply bidirectional的模型,但是普通的LM又无法做到,因为在训练时可能会“穿越”。所以作者用了一个加mask的trick。
在训练过程中作者随机mask 15%的token,而不是把像cbow一样把每个词都预测一遍。最终的损失函数只计算被mask掉那个token。
Mask如何做也是有技巧的,如果一直用标记[MASK]代替(在实际预测时是碰不到这个标记的)会影响模型,所以随机mask的时候10%的单词会被替代成其他单词,10%的单词不替换,剩下80%才被替换为[MASK]。具体为什么这么分配,作者没有说。。。要注意的是Masked LM预训练阶段模型是不知道真正被mask的是哪个词,所以模型每个词都要关注。
因为序列长度太大(512)会影响训练速度,所以90%的steps都用seq_len=128训练,余下的10%步数训练512长度的输入。
因为涉及到QA和NLI之类的任务,增加了第二个预训练任务,目的是让模型理解两个句子之间的联系。训练的输入是句子A和B,B有一半的几率是A的下一句,输入这两个句子,模型预测B是不是A的下一句。预训练的时候可以达到97-98%的准确度。
注意:作者特意说了语料的选取很关键,要选用document-level的而不是sentence-level的,这样可以具备抽象连续长序列特征的能力。
分类:对于sequence-level的分类任务,BERT直接取第一个[CLS]token的final hidden state C ∈ ℜ H C \in \Re^{H} \quad C∈ℜH, 加一层权重 W ∈ ℜ K × H W \in \Re^{K \times H} W∈ℜK×H后softmax预测label proba:
P = softmax ( C W T ) P=\operatorname{softmax}\left(C W^{T}\right) P=softmax(CWT)
其他预测任务需要进行一些调整,如图:
可以调整的参数和取值范围有:
因为大部分参数都和预训练时一样,精调会快一些,所以作者推荐多试一些参数。
BERT是截至2018年10月的最新state of the art模型,通过预训练和精调横扫了11项NLP任务,这首先就是最大的优点了。而且它还用的是Transformer,也就是相对rnn更加高效、能捕捉更长距离的依赖。对比起之前的预训练模型,它捕捉到的是真正意义上的bidirectional context信息。
作者在文中主要提到的就是MLM预训练时的mask问题:
一遍读下来,感觉用到的都是现有的东西,可没想到效果会这么好,而别人又没想到。不过文章中没有具体解释的很多点可以看出这样出色的结果也是通过不断地实验得出的,而且训练的数据也比差不多结构的OpenAI GPT多,所以数据、模型结构,都是不可或缺的东西。
更多请见:https://zhuanlan.zhihu.com/p/46652512