排列语言模型XLNET
排列语言模型XLNET
引言
本文首先会介绍什么是自回归语言模型&自编码语言模型以及相应的经典模型、优缺点,然后将介绍XLNET的模型结构,说明其如何结合两类语言模型的优点。
自回归语言模型(Autoregressive LM)
自回归语言模型是指根据上文内容预测下一个可能的单词(从左向右),或者根据下文预测前面的单词(从右向左)的语言模型任务,典型的自回归语言模型。
经典模型
ELMO、GPT系列、XLNET; 特别注意ELMO虽然同时利用了双向的信息,但是其本质仍是自回归语言模型。因为ELMO实际上是两个方向(从左到右以及从右到左)的自回归语言模型,将两个方向的LSTM的隐节点状态拼接到一起体现双向语言模型,所以其实是两个自回归语言模型的拼接,本质上仍属于自回归语言模型。
优点
自回归语言模型天然匹配生成类下游NLP任务,比如文本摘要,机器翻译等,这些任务在实际生成内容的时候,就是从左向右的。而Bert这种DAE模式,在生成类NLP任务中,面临训练过程和应用过程存在不一致,导致自编码语言模型在生成类的NLP任务做得不太好。
缺点
只能利用上文或者下文的信息,不能同时利用上文和下文的信息,信息不全。虽然像ELMO模型这类模型,双向都做,然后拼接,看上去能够解决单向的问题,但因为融合模式过于简单,ELMO效果并不是太好。
自编码语言模型(Autoencoder LM)
自编码语言模型的名称来自于降噪自编码器Denoising Autoencoder(DAE)。降噪自编码器属于非监督学习,不需要对训练样本进行标记。模型框架的逻辑是在网络训练期间,对每个训练样本,经过网络会在输出层产生一个新的信号,网络学习的目的就是使输出信号与输入信号尽量相似。 相比自回归模型而言,Bert的预训练任务之一Masked LM就是借鉴DAE的思路——通过在输入X中随机Mask掉一部分单词,然后根据上下文单词来预测这些被Mask掉的单词,这些被Mask掉的单词就是在输入侧加入的“噪音”。类似Bert这种预训练模式,被称为DAE LM。
经典模型
BERT、ERNIE、Roberta等;
优点
DAE LM能比较自然地融入双向语言模型,同时看到被预测单词的上文和下文,信息更加全面。
缺点
在预训练阶段,输入中引入[Mask]这一特殊标记对原始token进行替换,而Fine-tuning阶段是没有[Mask]标记的,导致预训练阶段和Fine-tuning阶段不一致。
XLNET-Generalized autoregressive pretraining for language understanding
自回归语言AR模型和自编码语言AE模型各自存在一些优缺点。AR模型的自回归性可以学习预测 token 之间的依赖,且预训练阶段和微调阶段输入一致,但AE模型做不到;而AE模型对深层次双向信息的学习,又是AR模型做不到的。
XLNet的出发点就是融合AR LM和DAE LM两者的优点。站在自回归LM的角度,如何引入和双向语言模型等价的效果;站在DAE LM的角度看,它本身是融入双向语言模型的,如何抛掉表面的那个[Mask]标记,让预训练和Fine-tuning保持一致。当然,XLNet还讲到了一个Bert被Mask单词之间相互独立的问题。
我们直接将XLNET和BERT/GPT进行对比,有以下几个地方不同:
Permutation LM排序语言模型,用AR获取双向信息
原理
Permutation Language Model(PLM)在AR的基础上增加了一个步骤,就可以将AR与AE结合起来。通过随机取一句话的一种排列,用 AR 的方式来按照这种排列依次预测后面几个被遮掩掉的词,如下图:
暂时无法在飞书文档外展示此内容
Attention mask实现permutation
论文中 Permutation 具体的实现方式是通过直接对 Transformer 的 Attention Mask 进行操作。
序列1−>2−>3−>4,假设我们要对第3个位置进行掩码和预测,那么我们首先先确定输出在位置3,然后对所有词进行重排序,其重排序列有很多种,比如3−>2−>4−>1;2−>1−>4−>3;2−>4−>3−>1等等,XLNet的思想就是从这些重排序的序列中选一部分出来做训练,这样看上去模型还是从左到右的顺序,但位置3却可以学习到上下文的信息(包括1、2和4)。
但XLNet中不是直接通过固定位置重排序实现的,而是通过attention mask机制,以3−>2−>4−>1这一重排序列为例的attention mask如下图所示,白色为0,黄色为1,那么2能看到3,4能看到3、2,1能看到3、2、4。
双流机制实现Permutation后的AR预测过程
原始的句子经过permutation后,位置变得尤为重要。此外,在预测当前位置的词时,输入就不能包含内容信息,不然模型学不到东西,只需要直接从输入复制到输出就好了。
于是作者提出了双流机制来实现permutation后的AR预测过程,具体来说,包括:
- 位置信息加内容信息输入 Self-Attention (自注意力) 的流 \(h\)(Stream)称为Content Stream;
- 以及一个只有位置信息作为 Self-Attention中Query输入的流\(g\),称为Query Stream。
利用 Query Stream 在对需要预测位置进行预测,且不会泄露当前位置的内容信息。\(g\)只有位置信息,作为 Self-Attention 里的\(Q\)。包含内容信息的 \(h\),则作为\(K\) 和\(V\)。具体表示如下图所示:
假如,模型只有一层的话,其实这样只有 Query Stream 就已经够了。但如果将层数加上去的话,为了取得更高层的 h,于是就需要 Content Stream 了。h 同时作为 Q K V。如下图所示:
整体结构
Partial Prediction部分预测
XLNet的LM是从第一个Token预测到最后一个Token,在预测的起始阶段,上文信息很少而不足以支持Token的预测,这样可能会对分布产生误导,从而使得模型收敛变慢。XLNET中对长度为N的句子,只预测后面1/K的Token。K通常取6~7,转为1/K差不多也是15%,和BERT中mask的token比例差不多。
引入Transformer-XL解决长文本建模
Transformer无法建模超过固定长度的依赖关系,对长文本编码效果差。此外,Transformer把要处理的文本分割成等长的片段,通常不考虑句子(语义)边界,导致上下文碎片化(context fragmentation)。
Transformer-XL(XL表示extra long):提出片段级循环机制(segment-level recurrence mechanism),引入一个记忆(memory)模块(类似于cache或cell),存储上一个segment的序列hidden states,在当前segment进行反向传播的时候,结合上一个segment的hidden state进行预测(但上一个segment的hidden state的梯度是截断的,不进行反向传播)。
Relative Position Encoding相对位置编码
Transformer使用的是绝对位置编码,如果继续使用Absolute Positional Encoding,对于所有的sequence序列,只要这个字在序列中的位置一样,它的position encoding也会一样,对于concat之后的输出,无法区别每个字的位置。
如下图:The
和that
的position encoding完全一样,模型无法区分两者位置区别。
Transformer-XL 首先分析了position encoding在计算中的作用,然后根据这个结果将交互项转化为relative position encoding。
The notation (i, •) refers to the entire row i and (•, j) to the entire column j 。
这个式子可以分为4项:
- 这一项与位置信息无关,表示在第\(i\)行的字应该对第\(j\)列的字提供多大的注意力;
- 这一项是模型的global attention,指的是一个字在position \(i\)应该要对 position \(j\)付出多大的注意力。例如两个字的位置越远,期望它们之间的注意力越小。
- 这一项捕获的是在第\(i\)行的字对其他位置的关注信息,例如在position \(i\)是一个字"狗", 应该要对\(j=i-1\)这个位置特别注意,否则可能出现是“热”, 出现是“热狗”的情况。
- 这个是c) 的逆向表示,指的是\(j\)的字要关注位置\(i\)的字。
将 b), c) 和d) 替换为如下式子:
- 将使用的是相对的position encoding i.e. 取消\(P_{·,j}\)而采用相对位置\(P_{·,i-j}\)。
- 每次使用\(P_{·,i-j}\),我们都将\(W^K\)替换为 \(W^R\) (两者的形状相同)。这是为了区别\(W^K\)(仍使用) 和\(W^R\),使得两者可以各自捕获有意义的位置信息而不会互相干扰 。
- \(P_{i,·}W^Q\)这一项被替代为\(u\)和\(v\),这两个向量的维度为\((1,d_k)\)。因为使用的是相对位置编码,所以并不需要提供绝对位置\(i\)。
所以\((QK^T)_{i,j}\)的公式被替换为:
Relative Segment Encodings
XLNET的输入和BERT一样,为\([[CLS],A,[SEP],B,[SEP]]\),但是A,B表示的是segment而不是sentence,在计算 attention 的时候加入一项:
当i和j位置在同一个segment里就用s+,反之用s-,在 attention 计算权重的时候加入额外项。
参考资料
XLNet: Generalized Autoregressive Pretraining for Language Understanding_哔哩哔哩_bilibili
XLNet: 通用自回归预训练语言理解(Generalized Autoregressive Pretraining for Language Understanding)