1. 简介
XLNet是一种类似BERT的模型,XLNet是一种通用的自回归预训练方法,由CMU和Google Brain团队在2019年6月发布,在18个任务取得了当前最佳效果,包括机器回答,自然语言推断,情感分析,文档排序。
出发点:
BERT是基于去噪自编码器的预训练模型,可以很好对双向语境信息建模,性能优于自回归语言模型的预训练方法。但是,优于需要mask一部分的输入,BERT模型忽略了mask位置之间的依赖关系,出现预训练和微调效果的差异。
提出的XLNet是一种泛化的自回归预训练模型,可以:
- 通过最大化所有可能的因式分解顺序的对数似然,学习双向语境信息;
- 用自回归本身的特点克服BERT的缺点;
- XLNet还融合了当前最优自回归模型Transformer-XL的思路。
2. 自回归语言模型
自回归语言模式,Autoregressive LM, 根据上文内容预测下一个可能的单词,或者根据下文预测前面的单词。
GPT是典型的自回归语言模型,ELMO尽管看上去利用了上文,也利用了下文,但本质仍然是自回归LM,可以看做是从左到右和从右到左两个方向的自回归语言模型,然后把LSTM的两个方向的隐节点状态拼接到一起。所以,ELMO可以看做两个自回归模型的拼接。
自回归语言模型的缺点:
(1)只能利用上文或者下文的信息,不能同时利用上文和下文的信息,ELMO的双向也并不能解决这个问题,因为拼接融合方式过于简单,效果并不好。
优点:
(1)和下游的NLP任务有关,比如生成类NLP任务,文本摘要,机器翻译等,在实际生成内容时,从左到右,自回归模型天然匹配这个过程。
BERT这种DAE模式,在生成类NLP任务中,面临训练过程和应用过程不一致的问题,导致生成类的NLP任务效果不佳。
3. 自编码语言模型(Autoencoder LM)
自回归语言模型只能根据上文预测下一个单词,或者根据下文预测前一个单词。相对而言,BERT通过在输入X中随机Mask掉一部分的单词,然后,预训练过程的主要任务是根据上下文单词来预测被Mask掉的单词。 这是典型的DAE的思路。Mask掉的单词是在输入侧添加的噪声,类似BERT这种预训练模型模式,称为DAE LM。
缺点:
(1)预训练和微调阶段不一致。因为微调是看不到Mask标记的。
(2)像BERT模型在预训练阶段,多个单词被Mask掉,但是Mask掉的单词之间没有任何关系,是条件独立的。但是,有时,这些单词是有关系的。
4. XLNet模型
4.1 排列语言建模
排列语言建模,Permutation Language Modeling。
预训练阶段:
输入的句子X仍然是自左到右的输入,看到 Ti 单词的上文来预测Ti 单词。同时,除了上文的单词,希望也能看到 Ti 单词后面的下文。
这里是,把句子X的单词排列组合后,再随机抽取例子作为输入。实际上,因为微调阶段不可能去排列组合原始输入。所以,必须让预训练阶段的输入部分,仍然是x1,x2,x3,x4这种顺序。
XLNet采取了Attention掩码的机制,在Transformer内部,通过Attention掩码,从X的输入单词 x1,x2,x3,x4…里边,也就是 Ti 的上下文单词中,随机选择 i-1 个,放到 Ti 的上文位置,其他单词输入通过Attention掩码隐藏掉。
同时,XLNet引入了“双流自注意力机制”, 让Ti 看到下文单词的目标。具体如下:
(1)内容流自注意力
这是标准的Transformer的计算过程,主要引入Query流的自注意力。 和BERT的mask思想类似,Query流会忽略一些单词的输入,只保留位置信息,用参数 w 来代替位置的Embedding编码。
4.2 Transformer XL
目前,处理语言建模两种先进的架构:RNN和Transformer。
RNN按照序列顺序逐个学习输入的单词和字符之间的关系,Transformer则接受一整段的序列,然后使用self-attention 机制来学习他们之间的依赖关系。但是,他们都局限在捕捉长期依赖性上。
为了解决这个问题, CMU和Google Brain 在2019年1月推出 Transformer XL,同时结合RNN序列建模和Transformer 自注意力机制的优点。在输入数据的每个段上使用Transformer的注意力模块,并使用循环机制来学习段之间的依赖关系。
4.2.1 vanilla Transformer
Transformer-XL是基于vanilla Transformer进行改进的。
思想:根据之前的字符预测片段中的下一个字符。
比如, x1,x2,…,xn-1 预测字符 xn. 在xn 之后的序列则被mask掉。论文使用64层模型,并局限于处理512个字符这种相对较短的输入,因此,它将输入分成段。并分别从每个段中进行学习。
缺点:
(1)上下文长度受限
字符之间的最大依赖距离受输入的长度限制,模型看不到出现在几个句子之前的单词。
(2)上下文碎片
对于长度超过512个字符的文本,都是从头开始单独训练的。段与段之前没有上下文依赖,会让训练效率低下,影响模型的性能。
(3)推理速度慢
测试阶段,每个预测下一个单词,都需要重新构建一遍上下文,从头开始计算,计算速度非常慢。
4.2.2 Transformer XL
在vanilla Transformer的基础上引入了两个创新:循环机制和相对位置编码。优势是可以被用于单词级和字符级的语言建模。
(1)循环机制
和vanilla Transformer一样, Transformer-XL仍然使用分段的方式进行建模, 引入了段与段之间的循环机制,使得当前段在建模的时候能够利用段之前的信息来实现长期的依赖性。
在训练阶段,处理后面的段,每个隐藏层会接受两个输入:
- 该段的前面隐藏层的输出(上图灰色线);
- 前面段的隐藏层的输出(上图绿色线),可以使模型创建长期的依赖关系。
这两个输出会被拼接,用于计算当前段的key和value矩阵。
在测试阶段,与vanilla Transformer相比,每次可以前进一整个段,并且利用之前段的数据来预测当前段的输出。在vanilla Transformer中,一次只能前进一个step,并且需要重新构建段,并全部从头开始计算。
(2)相对位置编码
Transformer考虑了序列的位置信息。在分段的情况下,如果仅仅对于每个段仍直接使用Transformer的位置编码,即每个不同段在同一位置上的表示使用相同的位置编码,会缺乏区分度。
具体的做法是,把绝对位置转变为相对位置:
Transformer-XL:
Transformer:
这里, E是Embedding, U 是位置向量。
区别:
- (b),(d)项中 绝对位置向量 Uj -> 相对位置向量 Ri-j, 这是一个固定的编码向量,不需要学习。
- ©项,将查询的 U, W向量转换成一个需要学习的参数向量 u。
- 将键的权重变换矩阵 W_k 转成 Wk,e 和
5. 总结
XLNet 是BERT,GPT2.0 和Transformer-XL的综合体。
(1)通过 PLM预训练目标,吸收了BERT的双向语言模型;
(2)GPT2.0 核心其实是更多更高质量的预训练数据,XLNet也吸收了;
(3)引入了Attention Mask机制, 在Transformer内部随机Mask掉一部分的单词,被Mask掉的单词比例和当前单词在句子中的位置有关系,位置越靠前,被Mask掉的比例越高。
参考: