XLNet原理探究
1. 前言
XLNet原文链接是CMU与谷歌大脑提出的全新NLP模型,在20个任务上超过了BERT的表现,并在18个任务上取得了当前最佳效果,包括机器问答、自然语言推断、情感分析和文档排序。
这篇新论文中,作者从自回归(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的优点和缺点:
- 缺点是只能利用上文或者下文的信息,不能同时利用上文和下文的信息。当然,貌似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的优点和缺点:
- 优点是能比较自然地融入双向语言模型,同时看到被预测单词的上文和下文。
- 缺点是在训练的输入端引入[Mask]标记,导致预训练阶段和Fine-tuning阶段不一致的问题。
3. XLNet初见
XLNet的作者通过把之前的优秀的模型分为AR和AE两类,并且清楚了各自的优势和缺点。在XLNet中,想要结合两边的优势,来提升XLNet的整体的模型的效果。那我们通过上文知道了,AR的优势是预训练和Fine-tuning的数据形式一致,而AE的优势是在预测词的时候,能够很好的融入上下文。
乍一看很难强行把这两点一起在一个模型里面实现。
- 我们换个思路能不能在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。
差别就是能否看到预测词本身,但是他们的作用是不太一样的。
3.4 Transformer-XL
由于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的路线。