1. 前言
XLNet原文连接是CMU与谷歌大脑提出的全新NLP模型,在20个任务上超过了BERT的表现,并在18个任务上取得了当前最佳效果,包括机器问答、天然语言推断、情感分析和文档排序。html
这篇新论文中,做者从自回归(autoregressive)和自编码(autoencoding)两大范式分析了当前的预训练语言模型,并发现它们虽然各自都有优点,但也都有难以解决的困难。为此,研究者提出XLNet,并但愿结合大阵营的优秀属性。网络
XLNet主要在如下三个方面进行了优化并发
- 采用AR模型替代AE模型,解决mask带来的负面影响。
- 双流注意力机制。
- 引入transformer-xl。
2. AR与AE的原理
2.1 AR原理
AR是自回归的模型(AutoRegressive LM),是一种使用上下文词来预测下一个词的模型。可是在这里,上下文单词被限制在两个方向,前向或后向。优化
AR的表明有:编码
- 传统的语言模型,根据上文预测下一个词。
- ELMo扩展了语言模型,增长了双向词的预测,上文预测下一个词和下文预测上一个词,可是本质上仍是AR的原理。
- 再到GPT是把AR发挥到极致的作法,在AR的基础上,提高预料的质量,加大训练的资源,最终训练出至关不错的效果。
AR的优势和缺点:spa
- 缺点是只能利用上文或者下文的信息,不能同时利用上文和下文的信息。固然,貌似ELMO这种双向都作,而后拼接看上去可以解决这个问题,由于融合模式过于简单,因此效果其实并非太好。
- 优势是符合下游NLP任务语言环境,好比生成类NLP任务,好比文本摘要,机器翻译等,在实际生成内容的时候,就是从左向右的,自回归语言模型自然匹配这个过程。而Bert这种DAE模式,在生成类NLP任务中,就面临训练过程和应用过程不一致的问题,致使生成类的NLP任务到目前为止都作不太好。
2.2 AE原理
AE是自编码语言模型(AutoEncoder LM),它能比较天然地融入双向语言模型,同时看到被预测单词的上文和下文。翻译
- Bert经过在输入X中随机Mask掉一部分单词,而后预训练过程的主要任务之一是根据上下文单词来预测这些被Mask掉的单词,若是你对Denoising Autoencoder比较熟悉的话,会看出,这确实是典型的DAE的思路。那些被Mask掉的单词就是在输入侧加入的所谓噪音。相似Bert这种预训练模式,被称为DAE LM。
AE的优势和缺点:code
- 优势是能比较天然地融入双向语言模型,同时看到被预测单词的上文和下文。
- 缺点是在训练的输入端引入[Mask]标记,致使预训练阶段和Fine-tuning阶段不一致的问题。
3. XLNet初见
XLNet的做者经过把以前的优秀的模型分为AR和AE两类,而且清楚了各自的优点和缺点。在XLNet中,想要结合两边的优点,来提高XLNet的总体的模型的效果。那咱们经过上文知道了,AR的优点是预训练和Fine-tuning的数据形式一致,而AE的优点是在预测词的时候,可以很好的融入上下文。orm
乍一看很难强行把这两点一块儿在一个模型里面实现。htm
- 咱们换个思路能不能在AR里面加入上下文的信息。这不就是ELMo的思路吗,经过双向的LSTM的思路来看上下文内容,这个简单的叠加效果还不是太好。
- 在AE里面克服[Mask]的不一致性,既保留了上下文信息,也保持预训练和下游任务的输入一致性。
其实XLNet就是沿着第二个思路的角度出发,更改了Bert中的[Mask]的方式,而且保留了上下文信息。
3.1 排列语言建模(Permutation Language Modeling)
XLNet仍然遵循两阶段的过程,第一个阶段是语言模型预训练阶段;第二阶段是任务数据Fine-tuning阶段。它主要但愿改动第一个阶段,就是说不像Bert那种带Mask符号的Denoising-autoencoder的模式,而是采用自回归LM的模式。就是说,看上去输入句子X仍然是自左向右的输入,看到\(T_i\)单词的上文Context_before,来预测\(T_i\)这个单词。可是又但愿在Context_before里,不只仅看到上文单词,也能看到\(T_i\)单词后面的下文Context_after里的下文单词,这样的话,Bert里面预训练阶段引入的Mask符号就不须要了,因而在预训练阶段,看上去是个标准的从左向右过程,Fine-tuning固然也是这个过程,因而两个环节就统一块儿来。固然,这是目标。剩下是怎么作到这一点的问题。

3.2 Attention Mask
XLNet把Bert的[Mask]的过程搬到Attention Mask来完成。这样从输入端看去预训练和Fine-tuning是一致的。Attention Mask的原理是,假设输入的词是\(x_1->x_2->x_3->x_4\),咱们在Attention Mask中改为随机排列组合的另一个顺序\(x_3->x_2->x_4->x_1\)了,而后预测\(x_3\)的时候上文为空,预测\(x_2\)的时候上文是\(x_3\),预测\(x_4\)的时候上文是\(x_3,x_2\),预测\(x_1\)的时候上文是\(x_3,x_2,x_4\),这样就达到了预测一个词使用到了上下文的内容。
在Attention Mask中实现的原理路下图:其实真是的词的顺序没有变,只是经过mask的操做达到了相似随机排序的效果。

3.3 双流自注意力机制

- 内容流自注意力,其实就是标准的Transformer的计算过程。是上图中的上面的那个Attention,能够看到预测词自己的一个self Attention。
- Query流自注意力,代替Bert的那个[Mask]标记的,是模拟Mask的效果。是上图中的下面的那个Attention,不能够看到预测词自己的一个self Attention。
差异就是可否看到预测词自己,可是他们的做用是不太同样的。
因为Transformer-XL的内容比较丰富,在这里就不展开了,
Transformer-XL的介绍请看我另外一篇博文。
3.5 XLNet与Bert比较
- Bert是直接在输入端显示地经过引入Mask标记,在输入侧隐藏掉一部分单词,让这些单词在预测的时候不发挥做用,要求利用上下文中其它单词去预测某个被Mask掉的单词。
- XLNet则抛弃掉输入侧的Mask标记,经过Attention Mask机制,在Transformer内部随机Mask掉一部分单词(这个被Mask掉的单词比例跟当前单词在句子中的位置有关系,位置越靠前,被Mask掉的比例越高,位置越靠后,被Mask掉的比例越低),让这些被Mask掉的单词在预测某个单词的时候不发生做用。
- Bert隐藏了15%的词,用85%去预测15%的词。缺乏了15%的词中的关联性。
- XLNet是经过整个上下文去预测某个词,这样的词的利用率更高,理论上效果更好。
4. 总结
文章最后的分析很好地证实了乱序语言模型和Transformer-XL主干网络带来的提高。这部分实验采用和BERT一致的训练数据。以BERT为基础,将BERT的主干网络从Transformer换成Transformer-XL后,在须要建模较长上下文的阅读理解任务RACE和SQuAD2.0均有比较明显地提高(对比1&2行)。而在此基础上加上乱序语言模型后,在全部任务上都有不一样程度的提高 (对比 2&3 行)。

自词向量到现在以XLNet为表明的预训练语言模型,他们的主要区别在于对语境的不一样粒度的建模:

XLNet成功的因素:
- 与Bert采起De-noising Autoencoder方式不一样的新的预训练目标:Permutation Language Model(简称PLM);这个能够理解为在自回归LM模式下,如何采起具体手段,来融入双向语言模型。这个是XLNet在模型角度比较大的贡献,确实也打开了NLP中两阶段模式潮流的一个新思路。
- 引入了Transformer-XL的主要思路:相对位置编码以及分段RNN机制。实践已经证实这两点对于长文档任务是颇有帮助的。
- 加大增长了预训练阶段使用的数据规模;Bert使用的预训练数据是BooksCorpus和英文Wiki数据,大小13G。XLNet除了使用这些数据外,另外引入了Giga5,ClueWeb以及Common Crawl数据,并排掉了其中的一些低质量数据,大小分别是16G,19G和78G。能够看出,在预训练阶段极大扩充了数据规模,并对质量进行了筛选过滤。这个明显走的是GPT2.0的路线。