XLNet是一个通过排列语言模型实现双向上下文信息的自回归模型。它通过随机排列输入序列而预测某个位置可能出现的词,进而训练出具有上下文的语境化词向量。
XLNet是一个类似BERT的模型,但是它采用了通用的自回归预训练方法(AR模型),而基于DAE的Bert模型采用的则是降噪自动编码方法(AE模型),bert和AR模型的区别主要是在以下三方面:
解决预测时想看见自己和不想看见自己的矛盾 两个stream共享一套参数
AR是自回归的模型(AutoRegressive LM),是一种使用上下文词来预测下一个词的模型。但是在这里,上下文单词被限制在两个方向,前向或后向。
AR的代表有:
AR的优点和缺点:
AE是自编码语言模型(AutoEncoder LM),它能比较自然地融入双向语言模型,同时看到被预测单词的上文和下文。
AE的优点和缺点:
XLNet(AR模型)总体思路
XLNet提出了一种让AR语言模型(单向的输入和预测模式)能够从双向上下文中学习的新方法。这也是XLNet的主要贡献。
XLNet仍然采用两阶段模型训练过程,第一阶段是语言模型预训练阶段,第二阶段是任务数据fine-tuning阶段。它主要改动了第一阶段,即不使用bert那种带mask符号的Denoising-autoencoder的模式,而是采用自回归语言模型。就是说,一个输入序列X依然是从左向右输入,在预测单词T时,既知道它的上文信息context_before,也知道它的下文信息contenx_after,但是,这里不采用bert使用mask符号的方式。于是在预训练阶段,这是一个标准的从左向右过程,在微调阶段也是如此,因此两个过程就统一起来,不会造成两阶段的数据不一致问题[3]。而这里具体的实现方法,就是论文提出的排列语言模型。
4.1训练目标:排列语言模型(Permutation Language Modeling)
PLM的中心思想就是重新排列组合输入序列X。具体的说,假设输入序列X = [x1,x2,x3,x4],我们想要预测x3,
1、使用AR模型的常规操作:按照AR模型自左向右的输入X,我们只能看到x3的上文context_before(即x1,x2),而不能看到x3的下文context_after(即x4)。
2、使用PLM的方法:我们需将待预测单词x3固定在它本来的位置上(即Position 3),然后将输入序列X中的元素进行随机排列组合(此例中共会产生24种组合方式),在这24种组合中,抽取一部分(如:x4,x2,x3,x1)作为模型的输入X,则待预测单词x3既能看到上文x1,x2,也能看到下文x4,达到了获取上下文信息的目的,但是在形式上依然是从左向右在预测后一个单词。具体如下图所示:
这里解释一下右上图,即Factorization order:2 -> 4 -> 3 -> 1这张图,可以看出在计算h3(1)时,它只获取了x2,x4和mem(0)的信息,即获取了x3的下文信息x4。
注1:由图中可以看出,它并没有更改输入顺序,输入顺序仍然为x1,x2,x3,x4,但是Transformer在获取输入信息时,它只获取了x4和x2,这是因为attention将x1 mask掉了,这一过程是在Transformer中实现的,具体描述在下一节中讲述。
PLM的优势如下:
1、保证预训练-微调两个阶段的一致性,规避了bert模型的劣势(预训练-微调数据不一致以及多个mask之间的独立假设)
2、获取双向信息(AR模型只能获取单向信息)
4.2双流自注意力(Architecture: Two-Stream Self-Attention for Target-Aware Representations )
双流主要是指内容流和查询流,具体介绍如下:
内容流(content stream):指标准的Transformer过程
查询流(query stream)[3]:只保留位置信息,忽略内容信息。具体的说,对于待预测单词x3来说,已知其上文信息x1,x2,因为x3是需要被预测的单词,因此在Transformer的输入端不能输入x3的单词内容,需要将其遮挡掉,bert采用的方法是将x3 mask掉,即使用[MASK]标记符号作为x3的输入内容,但是这引起了预训练-微调数据不一致问题,xlnet既想看不到x3单词的内容,又不想像bert一样引入新的问题,它采取的方式就是使用query流,直接忽略掉x3的单词内容,而只使用x3的位置信息,使用参数w来代表位置的embedding编码。具体的实现过程如下所述:
输入序列依然是x1,x2,x3,x4,但是在Transformer内部,则是针对内容流和查询流分别有遮掩矩阵。就本文例子来说,需要遮掩的是x3,则在下图c中,由于使用的新的排列组合是x3,x2,x4,x1,因此,Query steam对应的遮掩矩阵中第三行中是空,因为没有其他的单词需要被输入。
同理,对于Content stream来说,由于Transformer的输入顺序是x3,x2,x4,x1,因此对于第一行x1来说,它可以将所有的单词都读入,因此矩阵第一行中所有圆点都被标为红色(表示x1,x2,x3,x4的信息都获取);对于第二行x2来说,它只能获取x3的信息以及自己的信息,因此第二个和第三个圆点标为红色(表示x2,x3的信息都获取);对于第三行x3来说,因为它只能读取自己的信息,因此只有第三个圆点标为红色(表示x3的信息被获取);对于第四行x4来说,由于它能获取x2、x3以及自己的的信息,因此其第二、三、四个圆点被标为红色(表示x2,x3,x4的信息都获取)。
由于Content Stream 和 Query Stream的区别仅在于自己的信息是否能获取,而Query Stream不能获取自己的信息,因此Query Stream的遮掩矩阵中对角线的圆点都为白色,表示不能获取自己的内容信息。
如上图所示,图a表示内容流(content stream),图b表示查询流(query stream),图c是使用了双流自注意力机制的排列语言模型。
Transformer-XL是 XLNet 的特征抽取结构,其相比于传统的Transformer能捕获更长距离的单词依赖关系。
原始的Transformer的主要缺点在于,其在语言建模中会受到固定长度上下文的限制,从而无法捕捉到更长远的信息。
Transformer-XL采用片段级递归机制(segment-level recurrence mechanism)和相对位置编码机制(relative positional encoding scheme)来对Transformer进行改进。
片段级递归机制:指的是当前时刻的隐藏信息在计算过程中,将通过循环递归的方式利用上一时刻较浅层的隐藏状态,这使得每次的计算将利用更大长度的上下文信息,大大增加了捕获长距离信息的能力。
相对位置编码:Transformer本身引入了三角函数向量作为位置编码向量。而Transformer-XL复用了上文的信息,这就导致位置编码出现重叠,因此采用了训练的方式得到相对位置编码向量。