三,BERT
1.概述
BERT:预训练transformer中的encoder网络,可以大幅增加模型的准确率。
基本思想,增加两个任务:
- 随机遮挡1个或多个单词,让encoder网络根据上下文,预测被遮挡的单词。
- 把两个句子放在一起,让encoder判断这两句话是否为相邻的对话。
用这两个任务训练transformer中的encoder网络。
2. 预测被遮挡的单词
Transformer encoder网络,输入一句话,被分成很多个单词,embedding将单词映射为词向量,然后是encoder网络,其由多个block组成,每个block有两层。输出也是6个向量。
将第二个单词遮挡住,让神经网络预测第二个单词。
将输入的第2个单词,替换为mask,会被embedding编码为向量xm,将mask的encoder的输出为um,
注意,transformer的encoder网络并非1对1,而是多对1。
Um不仅依赖于xm,而是依赖于所有的向量x,
Um在mask位置上,但是um知道整句话的信息,其包含上下文信息,因此可以用um预测被遮挡的信息。
将um作为特征向量,输入softmax classifier,输出概率向量p,字典里每个单词都有概率值,通过概率值来判断遮挡单词。
遮挡cat,训练的时候,希望输出p的向量,接近于单词cat的one-hot向量e。
注意:bert不需要标注数据,因此数据量很庞大。
3. 预测下一个句子
已知一句话,判断其下个句子是否对?
神经网络可以从海量的数据中学出这种相关性。因为微积分和牛顿有很大的关系。
第一句话讲微积分,第二句话讲熊猫。基本没有关联。
准备训练集:把两句话拼接起来,之间用sep分开,最前面放cls占位。
生成数据中,50%是真实的两句话;其余50%是随机从训练集中获取的。
Cls输出为向量c,c依赖于两句话的全部信息,因此,c可以用来判断两句话是否真的相连。C作为特征向量,输入分类器,输出0-1之间的f,1为true,0为false。
相邻2句话有关联,这样做(此任务)可以强化这种关联,让embedding和词向量之间包含此关联,例如:微积分和牛顿的词向量应该有关联。Encoder中有self-attention就是找这种关联性的。
分类任务,可以找到正确的关联性。
4. 结合两个任务
把两句话拼接起来,随机遮挡15%的单词。
一共有三个任务
5. 优势