BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding

转自
1.BERT模型
BERT的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder,因为decoder是不能获要预测的信息的。模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。

1.1 模型结构
由于模型的构成元素Transformer已经解析过,就不多说了,BERT模型的结构如下图最左:
BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding_第1张图片

对比OpenAI GPT(Generative pre-trained transformer),BERT是双向的Transformer block连接;就像单向rnn和双向rnn的区别,直觉上来讲效果会好一些。

对比ELMo,虽然都是“双向”,但目标函数其实是不同的。ELMo是分别以P(w_i| w_1, …w_{i-1}) 和 P(w_i|w_{i+1}, …w_n) 作为目标函数,独立训练处两个representation然后拼接,而BERT则是以 P(w_i|w_1, …,w_{i-1}, w_{i+1},…,w_n) 作为目标函数训练LM。

1.2 Embedding
这里的Embedding由三种Embedding求和而成:
BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding_第2张图片

其中:

Token Embeddings是词向量,第一个单词是CLS标志,可以用于之后的分类任务
Segment Embeddings用来区别两种句子,因为预训练不光做LM还要做以两个句子为输入的分类任务
Position Embeddings和之前文章中的Transformer不一样,不是三角函数而是学习出来的
1.3 Pre-training Task 1#: Masked LM
第一步预训练的目标就是做语言模型,从上文模型结构中看到了这个模型的不同,即bidirectional。关于为什么要如此的bidirectional,作者在reddit上做了解释,意思就是如果使用预训练模型处理其他任务,那人们想要的肯定不止某个词左边的信息,而是左右两边的信息。而考虑到这点的模型ELMo只是将left-to-right和right-to-left分别训练拼接起来。直觉上来讲我们其实想要一个deeply bidirectional的模型,但是普通的LM又无法做到,因为在训练时可能会“穿越”(关于这点我不是很认同,之后会发文章讲一下如何做bidirectional LM)。所以作者用了一个加mask的trick。

在训练过程中作者随机mask 15%的token,而不是把像cbow一样把每个词都预测一遍。关于为什么这样做,我觉得可能是模型结构本身的原因,从结构上看输入输出是长度一样的sequence,这样模型实际上在做sequence-level的LM。

Mask如何做也是有技巧的,如果一直用标记[MASK]代替(在实际预测时是碰不到这个标记的)会影响模型,所以随机mask的时候10%的单词会被替代成其他单词,10%的单词不替换,剩下80%才被替换为[MASK]。具体为什么这么分配,作者没有说。。。要注意的是Masked LM预训练阶段模型是不知道真正被mask的是哪个词,所以模型每个词都要关注。

1.4 Pre-training Task 2#: Next Sentence Prediction
因为涉及到QA和NLI之类的任务,增加了第二个预训练任务,目的是让模型理解两个句子之间的联系。训练的输入是句子A和B,B有一半的几率是A的下一句,输入这两个句子,模型预测B是不是A的下一句。预训练的时候可以达到97-98%的准确度。

1.5 Fine-tunning
在这里插入图片描述

其他预测任务需要进行一些调整,如图:
BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding_第3张图片
BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding_第4张图片

因为大部分参数都和预训练时一样,精调会快一些,所以作者推荐多试一些参数。

  1. 优缺点
    2.1 优点
    BERT是截至2018年10月的最新state of the art模型,通过预训练和精调横扫了11项NLP任务,这首先就是最大的优点了。而且它还用的是Transformer,也就是相对rnn更加高效、能捕捉更长距离的依赖。对比起之前的预训练模型,它捕捉到的是真正意义上的bidirectional context信息。

2.2 缺点
作者在文中主要提到的就是MLM预训练时的mask问题:

[MASK]标记在实际预测中不会出现,训练时用过多[MASK]影响模型表现
每个batch只有15%的token被预测,所以BERT收敛得比left-to-right模型要慢(它们会预测每个token)

你可能感兴趣的:(NLP)