文章参考了比较多博客,直接想了解bert的,可以直接看 2.Bert细则
文章目录
1. word2vec,ELMo,BERT亮点与区别
1.1 发展史
word2vec——>ELMo
结果:上下文无关的static向量变成上下文相关的dynamic向量,比如苹果在不同语境vector不同。
操作:encoder操作转移到预训练产生词向量过程实现。
ELMo——>BERT
结果:训练出的word-level向量变成sentence-level的向量,下游具体NLP任务调用更方便,修正了ELMo模型的潜在问题(ELMo模型在与下游具体NLP任务拼接时需要每层加上权重做全局池化,BERT可以直接获得一整个句子的唯一向量表示)。
操作:使用句子级负采样获得句子表示/句对关系,Transformer模型代替LSTM提升表达和时间上的效率,masked LM解决“自己看到自己”的问题。
- 负采样
由于训练词向量模型的目标不是为了得到一个多么精准的语言模型,而是为了获得它的副产物——词向量。所以要做到的不是在几万几十万个token中艰难计算softmax获得最优的那个词(就是预测的对于给定词的下一词),而只需能做到在几个词中找到对的那个词就行,这几个词包括一个正例(即直接给定的下一词),和随机产生的噪声词(采样抽取的几个负例),就是说训练一个sigmoid二分类器,只要模型能够从中找出正确的词就认为完成任务。
这种负采样思想也应用到之后的BERT里,只不过从word-level变成sentence-level,这样能获取句子间关联关系。
1.2. Elmo
- 2018年8月发布
- 上下文无关模型
- encoder模型是Bi-LSTM
优点
- 双向
不足
- 不完全双向
是指模型的前向和后向LSTM两个模型是分别训练的,前向遍历一遍获得左边的LSTM,后向遍历一遍获得右边的LSTM,最后得到的隐层向量直接拼接得到结果向量,在最后的Loss function中也是前向和后向的loss function直接相加,并非完全同时的双向计算。 - 自己看见自己
双向模型会导致预测的下一词已经在给定序列中出现了的问题,这就是“自己看见自己”。
1.3. Bert
BERT模型进一步增加词向量模型泛化能力,充分描述字符级、词级、句子级甚至句间关系特征。
特点
-
真正的双向encoding
Masked LM,类似完形填空,尽管仍旧看到所有位置信息,但需要预测的词已被特殊符号代替,可以放心双向encoding。 -
Transformer做encoder实现上下文相关(context)
使用transformer而不是bi-LSTM做encoder,可以有更深的层数、具有更好并行性。并且线性的Transformer比lstm更易免受mask标记影响,只需要通过self-attention减小mask标记权重即可,而lstm类似黑盒模型,很难确定其内部对于mask标记的处理方式。 -
提升至句子级别
学习句子/句对关系表示,句子级负采样。首先给定的一个句子,下一句子正例(正确词),随机采样一句负例(随机采样词),句子级上来做二分类(即判断句子是当前句子的下一句还是噪声),类似word2vec的单词级负采样。
1.4. 三者对比
模型 | 预训练encoding(上下文相关) | 模型 | 预测目标 | 下游具体任务 | 负采样 | 级别 |
---|---|---|---|---|---|---|
word2vec |