XLNet:使用排列语言建模训练语言模型.

预训练语言模型可以根据不同的预训练任务进行分类。两种重要的预训练任务分别是:

\[\mathop{\max}_{\theta} \quad \log p_{\theta}(x) =\sum_{t=1}^{T}\log p_{\theta}(x_t|x_{<t})=\sum_{t=1}^{T}\log \frac{\exp(h_{\theta}(x_{1:t-1})^Te(x_t))}{\sum_{x'}^{} \exp(h_{\theta}(x_{1:t-1})^Te(x'))}\] \[\mathop{\max}_{\theta} \quad \log p_{\theta}(\overline{x}|\hat{x}) ≈\sum_{t=1}^{T}m_t\log p_{\theta}(x_t|\hat{x})=\sum_{t=1}^{T}m_t\log \frac{\exp(h_{\theta}(\hat{x})_t^Te(x_t))}{\sum_{x'}^{} \exp(h_{\theta}(\hat{x})_t^Te(x'))}\]

这两种方法的对比如下:

为了结合上述两种方式的优点,本文提出了排列语言模型(Permutation Language Modeling,PLM),即给定序列$x=[x_1,x_2,…,x_T]$,首先对其进行随机地排列,共有$T!$种排列方式。然后在该排列序列$z$下进行自回归语言模型的训练:

\[\mathop{\max}_{\theta} \Bbb{E}_{z \text{~} \mathcal{Z}_T} [\sum_{t=1}^{T}\log p_{\theta}(x_{z_t}|x_{z_{<t}})]\]

每次采样序列顺序$z$不同,则输入序列也不同,理论上模型可以学习到任意顺序。下图展示了在几种不同的序列顺序下,第$3$个token所获取的单向信息来自不同的token(相当于获取双向的上下文信息):

可以从注意力矩阵的角度理解语言模型。自编码式模型的自注意力矩阵的每一个位置都有值,位置$(i,j)$表示第$i$个token与第$j$个token的注意力得分。而自回归式模型的自注意力矩阵是一个下三角阵,即每一个输出token(列)只能与其前面位置的输入token(行)进行交互,通过对注意力矩阵进行mask也可以达到这种效果:

如上图所示,注意力矩阵的每一行代表每一个输出,而每一列代表每一个输入,注意力矩阵的数值表示输出和输入的关联。对于自回归式模型,第一个输出$x_1$只能跟起始标记<s>相关,而第二个输出$x_2$只能跟起始标记<s>和第一个输出$x_1$相关,依此类推。

对于乱序的语言模型,相当于把上述下三角形式的注意力矩阵打乱,如对于序列<s> → 迎 → 京 → 你 → 欢 → 北 → <e>,其不同语言模型对应的注意力矩阵分别为:

对于乱序的语言模型,直接构造上述mask的注意力矩阵比较繁琐,有一种更简单的等效训练方法。由于注意力机制本身是一个无序的模型,序列顺序是通过位置编码引入的,因此输入不仅包括token,还包括token所在的位置id,如上述序列的实际输入为{(迎, 4), (京, 2), (你, 5), (欢, 3), (北, 1)}。若按该顺序将token在输入层打乱,则可以等效地构造自回归式训练:

作者在实现时引入了two-stream的自注意力结构,即把每一个输入token的特征分解成两部分:

训练中$h_{z_t}^0$初始化为词嵌入向量$e(x_{z_t})$,$g_{z_t}^0$初始化为位置编码$w$,更新如下:

\[h_{z_t}^m ← Attention(Q=h_{z_t}^{m-1},K,V=h_{z≤t}^{m-1})\] \[g_{z_t}^m ← Attention(Q=g_{z_t}^{m-1},K,V=h_{z<t}^{m-1})\]

由于全部的排列数量太多,因此作者设置只预测序列的最后一些token;即以长度$c$把序列分成两部分,只自回归地生成后面的token,则目标函数变为:

\[\mathop{\max}_{\theta} \Bbb{E}_{z \text{~} \mathcal{Z}_T} [\sum_{t=c+1}^{T}\log p_{\theta}(x_{z_t}|x_{z_{<t}})]\]

此外,作者在模型中使用了一种特殊的相对位置编码。对于使用绝对位置编码的自注意力机制运算如下:

\[\begin{aligned} q_i &= (x_i+p_i) W^Q , k_j = (x_j+p_j) W^K ,v_j = (x_j+p_j) W^V \\ \alpha_{ij} &= \text{softmax}\{(x_i+p_i)W^Q ( (x_j+p_j)W^K)^T \} \\ &= \text{softmax}\{ x_iW^Q (W^K)^T x_j^T+x_iW^Q (W^K)^T p_j^T+p_iW^Q (W^K)^T x_j^T+p_iW^Q (W^K)^T p_j^T \} \\ z_i &= \sum_{j=1}^{n} \alpha_{ij}(x_jW^V+p_jW^V) \end{aligned}\]

而在XLNet中,作者将$x_j$的位置编码$p_j$替换为由三角函数编码表示的相对位置编码$R_{i-j}$,把$x_i$的位置编码$p_i$替换为可学习的向量$u,v$,并移除了值向量的位置编码:

\[\begin{aligned} \alpha_{ij} &= \text{softmax}\{ x_iW^Q (W^K)^T x_j^T+x_iW^Q (W^K)^T R_{i-j}^T+uW^Q (W^K)^T x_j^T+vW^Q (W^K)^T R_{i-j}^T \} \\ z_i &= \sum_{j=1}^{n} \alpha_{ij}x_jW^V \end{aligned}\]