XLNet详解
前言:
- 自回归模型AR(autoregressivee):依据上文预测下一个词,如ELMo、GPT等,
- 优点:由于其特性,天然符合文本生成的过程,对生成模型友好。如大名鼎鼎的gpt就是生成模型;
- 缺点:它只能利用单向语义,不能利用上下文信息,一般没有利用双向语义的效果好。
- 自编码模型AE(autoencode):破坏原始序列,依据上下文进行还原,如BERT及其衍生模型就是通过随机将一些 token 替换成 “MASK” 来实现这一过程。
- 优点:能够利用上下文信息,获取语义信息相对丰富,在自然语言下游任务中表现很突出。
- 缺点:
- 因为是利用上下文信息,对生成式任务捉襟见肘;
- AE模型在训练时候使用【MASK】标记,导致预训练和微调阶段数据不一致;
- BERT独立性假设问题,即被mask掉的词之间是相互独立的,就没有对被遮掩(Mask)的 token 之间关系进行学习。
概念
XLNet :是一个语言模型。和ELMO,GPT,BERT一脉相承,同时借鉴了Transformer-XL,故称XLNet(XL含义源于衣服尺码,意思是模型横向更宽),在预训练阶段采用了基于AR的双向编码机制,这样就解决了bert的几个痛点。
模型结构
XLNet 是基于AR的双向编码机制,它在AR的基础上加入了一个步骤就结合了上下文信息,这就是Premutation Language Model (PLM)
具体的实现方式:
通过对一句话随机打乱顺序,取其中一种排序方式,对末尾的词进行“遮盖”,然后按照AR的方式预测“遮盖”的词。


比如说序号依次为 1234 的句子,先随机取一种排列3241。于是根据这个排列我们就做出类似上图的 Attention Mask。先看第1行,因为在新的排列方式中 1 在最后一个,根据从左到右 AR 方式,1 就能看到 234 全部,于是第一行的 234 位置是红色的(没有遮盖掉,会用到),以此类推。第2行,因为 2 在新排列是第二个,只能看到 3,于是 3 位置是红色。第 3 行,因为 3 在第一个,看不到其他位置,所以全部遮盖掉…
模型结构的实现方式
XLNet是由Transformer衍生的模型,Transformer的Attention只带有token编码,位置信息包含在token编码里,而AR目标是不允许模型看到当前token编码的,因此要把position embedding拆出来。
- 在对目标词预测的时候,要考虑到当前目标词的位置信息;
- 要包含目标词的上下文信息。
Two-Stream Self-Attention机制:
- Query stream:只能看到当前的位置信息,不能看到当前token的编码:

- Content stream:传统self-attention,像GPT一样对当前token进行编码:

这样再利用上下文信息的同时又没有暴露当前位置信息的内容。
具体操作就是用两组隐状态(hidden states) g 和 h。其中g 只有位置信息,作为self-attention里的Q,h包含内容信息,作为 K和V。具体表示如下图所示:

注意以下两点:
- 最下面一层蓝色的 Content Stream 的输入是 e x p ( x i ) exp(x_i) exp(xi) ,这个很好懂就是 x 对应的词向量 (Embedding),不同词对应不同向量,但看旁边绿色的 Query Stream,就会觉得很奇怪,为什么都是一样的 w?这个和Relative Positional Encoding 有关。
- Query stream attention图中为了便于说明,只将当前位置之外的 h 作为 K 和 V,但实际上实现中应该是所有时序上的 h 都作为 K 和 V,最后再交给上图中的 Query stream 的 Attention Mask 来完成位置的遮盖。
Partial Prediction
因为LM是从第一个Token预测到最后一个Token,在预测的起始阶段,上文信息很少而不足以支持Token的预测,这样可能会对分布产生误导,从而使得模型收敛变慢。为此,XLNet只预测后面一部分的Token,而把前面的所有Token都当作上下文。具体来说,对长度为 T 的句子,我们选取一个超参数 K,使得后面 1/K的Token用来预测,前面的 1 - 1/K 的Token用作上下文。注意K 越大,上下文越多,模型预测得就越精确。
Transformer-XL
由于该模型是基于transformer结构的,transformer的缺点也同时存在。就选择了transformer-xl。旨在提取更长距离信息
- 提出片段级循环机制(segment-level recurrence mechanism),引入一个记忆(memory)模块(类似于cache或cell),循环用来建模片段之间的联系。这使得长距离依赖的建模成为可能;也使得片段之间产生交互,解决上下文碎片化问题。
- 提出相对位置编码机制(relative position embedding scheme),代替绝对位置编码。在memory的循环计算过程中,避免时序混淆,位置编码可重用。
Transformer-XL总结:片段级循环机制为了解决编码长距离依赖和上下文碎片化,相对位置编码机制为了实现片段级循环机制而提出,解决可能出现的时序混淆问题。也可以简单的理解Transformer-XL=Transformer + RNN,即segment-wise的RNN模型,但是RNN模型的组件是Transformer的Encoder模块。
总结对比
- XLNet提出了与Bert采取Denoising Autoencoder方式不同的新的预训练目标:Permutation Language Model。在自回归LM模式下,采取特殊机制,融入双向语言模型。这个是XLNet在模型角度比较大的创新,打开了NLP中两阶段模式的一个新思路。
- 引入了Transformer-XL:相对位置编码以及分段循环机制。实践证明这两点对于长文档任务是很有帮助的。
- 增加预训练阶段使用的数据规模;Bert使用的预训练数据是BooksCorpus和英文Wiki数据,大小13G。XLNet在这些数据的基础上,引入了Giga5、ClueWeb、Common Crawl数据。
XLNet虽然使用的是AR模型,但也是通过mask的方式实现,mask机制真的强大~
此外,说一句题外话,XLNet 从后续评价上是比不上Bert的,目前基本上没有延续XLnet的研究,许多研究都是在Bert或者RoBerta基础上进行的修改~
常见的面试问题
1、