文章目录
【一】 Bert(简单介绍)
Bidirectional Encoder Representation from Transformers,即双向 Transformer 的 Encoder,感谢:https://zhuanlan.zhihu.com/p/46652512 作者
![]()
So Handsome !!! 在 pre-train 方法上,用了 Masked LM 和 Next Sentence Prediction 两种方法分别捕捉 词语 和 句子 级别的 representation
【二】 模型结构(与 GPT 和 ELMo 对比)
![](https://img-blog.csdnimg.cn/20200321123013636.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MzMwNDU2,size_16,color_FFFFFF,t_70)
- OpenAI GPT(Generative Pre-trained Transformer),BERT 是双向的 Transformer Block 连接,直觉上来讲效果会好一些
- ELMo,虽然都是 “双向”,但目标函数其实是不同的
ELMo 是分别以 P ( w i ∣ w 1 , … , w i − 1 ) \bm {P ( w _ { i } | w _ { 1 } , \ldots , w _ { i - 1 } )} P(wi∣w1,…,wi−1) 和 P ( w i ∣ w i + 1 , … , w n ) \bm {P ( w _ { i } | w _ { i+1 } , \ldots , w _ { n } )} P(wi∣wi+1,…,wn) 作为目标函数,独立训练处两个 Representation 然后拼接
BERT 则是以 P ( w i ∣ w 1 , … , w i − 1 , w i + 1 , … , w n ) \bm {P ( w _ { i } | w _ { 1 } , \ldots , w _ { i - 1 }, w _ { i+1 } , \ldots , w _ { n } )} P(wi∣w1,…,wi−1,wi+1,…,wn) 作为目标函数训练 LM
【三】 Embedding(三个部分)
![](https://img-blog.csdnimg.cn/20200321124254853.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MzMwNDU2,size_16,color_FFFFFF,t_70)
- Token Embeddings 是词向量,第一个单词是 CLS 标志,可以用于之后的分类任务
- Segment Embeddings 用来区别两种 Sentences,因为预训练不光做 LM 还要做以两个句子为输入的分类任务
- Position Embeddings 用来区别位置,以符合句子的顺序
【四】 Masked LM(遮掩语言模型)
这个方法从某种意义上来说属于 Denoising AutoEncoder(DAE,降噪自编码),即在原始数据上添加噪声,模拟真实环境
- Denoising AutoEncoder(DAE,降噪自编码)
![](https://img-blog.csdnimg.cn/20200321120920548.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MzMwNDU2,size_16,color_FFFFFF,t_70)
- 在训练过程中作者随机 Mask 15% 的 token,最终的损失函数只计算被 mask 掉那个 token
![](https://img-blog.csdnimg.cn/20200321131022901.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MzMwNDU2,size_16,color_FFFFFF,t_70)
- Mask 如何做也是有技巧的,如果一直用标记 [MASK] 代替(在实际预测时是碰不到这个标记的)会影响模型
- 10% 的单词会被替代成其他单词,10% 的单词不替换,80% 被替换为 [MASK]
- 要注意的是 Masked LM 预训练阶段模型是不知道真正被 Mask 的是哪个词,所以模型每个词都要关注
- 因为序列长度太大(512)会影响训练速度,所以 90% 的 steps 都用 seq_len=128 训练,余下的 10% 步数训练 512 长度的输入
【五】 Next Sentence Prediction(预测下一个句子)
- 因为涉及到 QA(Question Answer)和 NLI(Natural Language Inference)之类的任务,增加了第二个预训练任务,目的是让模型理解两个句子之间的联系
- 训练的输入是句子 A 和 B,B 有一半的几率是 A 的下一句,输入这两个句子,模型预测 B 是不是 A 的下一句
- 预训练的时候可以达到 97% ~ 98% 的准确度
- 注意:作者特意说了语料选取很关键,要选用 Document-Level 而不是 Sentence-Level ,这样可以具备抽象连续长序列特征的能力
【六】 Fine-Tunning(根据任务微调)
- Sentence-Level 的 分类任务:BERT 直接取第一个 [CLS] token 的 Final Hidden State C ∈ R H \bm { C \in R ^ { H } } C∈RH,加一层权重 W ∈ R K × H \bm { W \in R ^ { K \times H } } W∈RK×H 后 softmax 预测 label probability: P = s o f t m a x ( C W T ) \bm { P =softmax ( C W ^ { T } ) } P=softmax(CWT)
- 其他任务:
![](https://img-blog.csdnimg.cn/20200321210756663.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MzMwNDU2,size_16,color_FFFFFF,t_70)
【七】 Advantages / Disadvantage(优缺点)
- 优点:BERT是截至2018年10月的最新 state of the art 模型,通过预训练和精调横扫了 11 项 NLP 任务,这首先就是最大的优点了,而且它还用的是 Transformer,也就是相对 rnn 更加高效、能捕捉更长距离的依赖,对比起之前的预训练模型,它捕捉到的是真正意义上的 bidirectional context 信息
- 缺点:[MASK] 标记在实际预测中不会出现,训练时用过多 [MASK] 影响模型表现,每个 batch 只有 15% 的 token 被预测,所以 BERT 收敛得比 left-to-right 模型要慢(它们会预测每个 token)