语言模型之XLNET

ACL 2019论文 XLNet: Generalized Autoregressive Pretraining for Language Understanding阅读笔记。

语言模型之XLNET

论文概述

语言模型有两种:自回归语言模型(autoregressive)、自编码语言模型(autoencoding)。自回归语言模型的缺陷是只能是单向的(elmo实现了双向的编码,但只是在token之间建立了浅层的关联)。自编码语言模型(Bert)的缺陷是忽略了Mask的token之间的关联。本文提出的XLNET模型很好的结合了自回归和自编码语言模型,将文本的token按照随机出来的全排列顺序进行生成,在生成过程中使用了两种attention,很好的加入了预测单词的位置信息,弥补了Bert的缺陷。在XLNET模型中借鉴了Transformer-XL的相对位置编码和Memory机制,减少了计算量,提高了速度。

前人工作介绍

自回归语言模型

对于序列$x=(x_1…x_T)$,根据$(x_1…x_{i-1})$预测$x_i$,称为AR语言模型,比如GPT,ELMO等。AR的缺点在于序列要么从前往后,要么从后往前,无法将上文和下文信息完全结合起来。

自编码语言模型

对于序列$x=(x_1…x_T)$,编码为$x=(y_1…y_T)$,成为AE语言模型,比如Bert。AE模型的缺点在于Pre-train阶段可能需要引入 [Mask] 标记(Bert模型),而 [Mask] 会带来一系列问题。

以序列[New, York, is, a, city]为例,Bert如果随机选择了[New]和[York]进行mask并预测,则mask后序列变为: [[Mask], [Mask], is, a, city]。比较好的优化函数应该优化的目标是:J=logp(New York | is a city),但Bert实际优化的目标是J=logp(New | is a city) + logp(York | is a city),此时p(New York | is a city)=p(New | is a city) * p(York | is a city),即New和York相互独立。而实际上如果前面出现了“New”,那么后面出现“York”的概率理应大很多。

而且对于Bert而言,在在pretrain阶段时需要对语料进行Mask标记,但在finetune阶段没有Mask标记,数据分布不一致会影响finetune的效果 。

XLNET模型

基于排序构造的语言模型

fig1

在训练过程中,XLNET对输入序列进行了排列组合,比如2->4->3->1的排序中,对位置3的预测,能够既考虑前文1,也考虑后文4。在计算时,XLNET使用了矩阵的Mask操作来实现排列组合。因此,XLNET能弥补Bert忽略Mask的词内部关联的问题。

XLNET在训练时,为了减少开销,对于序列1->2->3->4, 取位置c,只对$\boldsymbol{z}_{>\boldsymbol{c}}$进行训练。c的取值通过一个超参数K设置,满足$|\boldsymbol{z}| /(|\boldsymbol{z}|-c) \approx K$。

双流注意力

fig2

(a)表示内容attention(和普通attention一样),(b)表示Query attention,把目标token的内容信息Mask掉了,(c)表示整个流程。

h和g的计算公式如下:

  • $g_{z_{t}}^{(m)} \leftarrow \text { Attention }\left(\mathbf{Q}=g_{z_{t}}^{(m-1)}, \mathbf{K V}=\mathbf{h}_{\bar{z}_{<t}}^{(m-1)} ; \theta\right)$
  • $h_{z_{t}}^{(m)} \leftarrow \text { Attention }\left(\mathrm{Q}=h_{z_{t}}^{(m-1)}, \mathrm{KV}={\mathbf{h}}_{z_{\leq}}^{(m-1)} ; \theta\right)$

其中$h_{\theta}\left(\boldsymbol{X}_{\boldsymbol{Z}_{\langle t}}\right)$表示$\boldsymbol{X}_{\boldsymbol{Z}_{<t}}$的hidden表示,$g_{\theta}$是为了修改softmax的计算方法:

$p_{\theta}\left(X_{z_{t}}=x \mid x_{z_{<} t}\right)=\frac{\exp \left(e(x)^{\top} g_{\theta}\left(X_{Z_{<t}}, z_{t}\right)\right)}{\sum_{x^{\prime}} \exp \left(e\left(x^{\prime}\right)^{\top} g_{\theta}\left(\mathbf{X}_{z_{<t}}, z_{t}\right)\right)}$

可以看到相比于普通softmax,增加了zt,目的是为了区分不同位置的预测。例如有一个序列,[今天,北京,客流量,很大],产生排列组合 [今天,北京,客流量] 和 [今天,北京,很大],如果不增加zt,在预测未知3和4时,产生的概率分布是一致的,不符合逻辑。也正因为如此,XLNET使用了双流注意力,来避免这个问题。

Memory缓存

对于超长序列,XLNET借鉴了Transformer-XL的缓存机制,并采用相对位置编码。设长序列为[1…T…2T],会拆分为$\tilde{\boldsymbol{z}}=[1 \ldots T]$和$\boldsymbol{z}=[T \ldots 2 T]$,h的计算公式为:

$h_{z_{t}}^{(m)} \leftarrow \text { Attention }\left(\mathrm{Q}=h_{z_{t}}^{(m-1)}, \mathrm{KV}=\left[\tilde{\mathrm{h}}^{(m-1)}, \mathrm{h}_{\mathrm{z} \leq t}^{(m-1)}\right] ; \theta\right)$

实验结论

XLNET在GLUE数据集上与其他模型的对比,可以看到有很大提升。

fig16

总结

XLNet使用了排列组合、双流注意力机制很好地解决了BERT的一些天然缺陷。当然还有很多其他语言模型如ERNIE还有待学习。