论文笔记 —— XLNet

论文笔记 —— XLNet

From Google Brain and CMU.

Authors: Zhilin Yang∗, Zihang Dai∗, Yiming Yang, Jaime Carbonell, Ruslan Salakhutdinov, Quoc V. Le

Title: XLNet: Generalized Autoregressive Pretraining for Language Understanding.

Preprint at 2019.6.20.

Introduction

这篇论文建立在Transformer-XL【作者们ACL2019的工作】的基础之上。看过Transformer-XL的同学应该知道其编码方式其实已经有了挺大的改进,对长文本的编码优于Vanilla Transformer。本文引入了PLM(Permutation Language Model,排列语言模型【Permutation: a way, especially one of several possible variations, in which a set or number of things can be ordered or arranged.】)而抛弃BERT的Mask LM,然后引入Masked Two-Stream Self-Attention解决PLM出现的目标预测问题【见Motivation】,最后用三倍于BERT的语料进行预训练,刷榜SQuAD、GLUE、RACE等。

Motivation

文章从AR(autoregressive,自回归)和AE(autoencoding,自编码)的角度出发,解释论文动机。

AR LM,即自回归语言模型。具体而言,给定一个序列,当前token/时刻只知道前面的信息,而不知道后面的信息,即使分成正向和反向计算当前token时刻的概率分布,也是同样的原则,ELMo、GPT是属于这个范畴。对于一些自然语言理解任务而言,是给定上下文的,即使ELMo把两个的方向计算的信息concat,但也是独立计算,对上下文的编码是有缺陷的。

AE LM,即自编码语言模型。BERT通过预测原始数据里MASK掉的token来预训练语言模型,预测[MASK]使用了上下文信息,弥补了AR LM的缺陷。但是[MASK]只在预训练的时候用到,finetune的时候是不用的,这使得pretrain/train不一致【这点顶一下BERT,我觉得这样更能体现泛化能力】。并且,BERT假定每个[MASK]与其他[MASK]是相互独立的,不能计算序列、长期依赖的联合概率。即使BERT的NSP预训练任务一定程度上给了模型建模句间关系的能力,但是还是对长文本不敏感。

本文结合AR LM和AE LM,在Transformer-XL的基础上提出generalized autoregressive method,XLNet。

  • 所有的分解序列作为一个集合,对所有采样序列,XLNet按照AR LM的计算方式求对数似然期望的极大值。通常,当前token的上文包含left和right的tokens:比如原始序列为1-2-3-4,分解序列中采样一个为2-4-1-3,那么如果当前token为3,XLNet的方式就可以看到所有的信息【当然这也是理想情况】,而AR LM只能看到1和2。
  • 引入Transformer-XL的segment recurrence mechanism和relative encoding scheme。
  • 引入Masked Two-Stream Self-Attention解决PLM出现的目标预测歧义【the ambiguity in target prediction】问题。举个例子,比如分解序列中采样一个为2-4-6-1-3-5的序列,假设要预测位置[1]的token,按照经典的Transformer来计算next-token的概率分布,位置[1]的token的概率就是通过[2,4,6]位置上的tokens来计算。但是如果以这种方式去预测next-token,这对[3,5]的预测就会产生影响,因为如果[1]的预测出现错误会把错误传给后面。对后面每一个token的预测,需要建立在之前token都已知的条件下。因此本文计算了两个self-attention计算方式,一个mask当前词,attention值记为g;一个已知当前词,attention值记为h。最后假设self-attention一共有M层,用第M层、t时刻的g_t,去预测词x_t。

Model

Permutation Language Modeling

首先会根据输入序列的长度采样排列集合,然后用Transformer中attention mask的方式实现每个排列情况,如果原始序列长度为T,那么理论上一共有T的阶乘种情况。PLM的目标函数就是所有排列情况(论文里设定:统共T种,如何采样的并没有说,只是说大概率上下文会出现在被预测词的前面)的期望最大:

\max _{\theta} \quad \mathbb{E}_{\mathbf{z} \sim \mathcal{Z}_{T}}\left[\sum_{t=1}^{T} \log p_{\theta}\left(x_{z_{t}} | \mathbf{x}_{\mathbf{z}_{<t}}\right)\right]


这样pretrain和finetune阶段就一样了,输入都是原始序列,通过attention mask实现随机产生的排列。例如排列是2-4-3-1,那么在预测X3的时候就只有2、4作为先验,并且2、4的位置信息是通过Zt来体现的,这样也保留了排列的时序信息。下图是排列语言模型的表现形式:



注:假设要预测t=3的词,按照不同的排列顺序,h_3的上文都不一样,用attention-mask的方式得到t=3的上文。


Two-Stream Self-Attention for Target-Aware Representations


上面是构造输入,这里就是自回归地得到每一时刻的概率分布,示意图如下:


动机部分已经介绍过为什么要计算两个self-attention。

(a)代表context stream self-attention,以[1,t]时刻的词作为K、V,t时刻的词作为Q计算当前词的信息,把排列之后的原始序列信息用h记忆起来。

(b)代表query stream self-attention,mask掉当前词,以[1,t-1]时刻的词作为K、V,t时刻的词作为Q预测当前词,得到概率分布。

(c)代表通过多层的masked two-stream attention,最后用t时刻的 g_t 来预测 x_t

t时刻的概率分布如下:

p_{\theta}\left(X_{z_{t}}=x | \mathbf{x}_{z_{<t}}\right)=\frac{\exp \left(e(x)^{\top} g_{\theta}\left(\mathbf{x}_{\mathbf{z}_{<t}}, z_{t}\right)\right)}{\sum_{x^{\prime}} \exp \left(e\left(x^{\prime}\right)^{\top} g_{\theta}\left(\mathbf{x}_{\mathbf{z}<t}, z_{t}\right)\right)}

其中, z_t 表示的是位置向量,用以保留采样排列的位置信息,在mask self-attention的时候就知道当前需要预测词的位置。

如果没有z_t,当词的位置不同,但是上文一样时,两个词算出来的概率是一样的。例如2-3-1-4-5和2-3-1-5-4,两个排列中,4和5的上文一样,算概率的时候就会一样【如下公式】,很显然这是错误的,不同位置的概率分布在ground-truth里是不一样的:

\underbrace{p_{\theta}\left(X_{i}=x | \mathbf{x}_{\mathbf{z}_{<}}\right)}_{z_{t}^{(1)}=i, \mathbf{z}_{<t}^{(1)}=\mathbf{z}_{<t}}=\underbrace{p_{\theta}\left(X_{j}=x | \mathbf{x}_{\mathbf{z}_{<t}}\right)}_{z_{t}^{(1)}=j, \mathbf{z}_{<t}^{(2)}=\mathbf{z}_{<t}}=\frac{\exp \left(e(x)^{\top} h\left(\mathbf{x}_{\mathbf{z}<t}\right)\right)}{\sum_{x^{\prime}} \exp \left(e\left(x^{\prime}\right)^{\top} h\left(\mathbf{x}_{\mathbf{z}<t}\right)\right)}

g_{\theta} 的计算公式如下:
g_{z_{t}}^{(m)} \leftarrow \text { Attention }\left(\mathbf{Q}=g_{z_{t}}^{(m-1)}, \mathbf{K V}=\mathbf{h}_{\mathbf{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}_{\mathrm{z}_{ \leq t}}^{(m-1)} ; \theta\right)
其中, g_{i}^{(0)}=w ​, h_{i}^{(0)}=e\left(x_{i}\right) ​,分别是随即初始化的向量和词向量。

引入位置向量之后,最终在预训练的时候也没有每一个token都预测,作者设置了一个超参数K,设定只预测序列最后1/K=的词[c+1, |z|]:
\max _{\theta} \quad \mathbb{E}_{\mathbf{z} \sim \mathcal{Z}_{T}}\left[\log p_{\theta}\left(\mathbf{x}_{\mathbf{z}_{\mathbf{Z}}>c} | \mathbf{x}_{\mathbf{z}_{ \leq c}}\right)\right]=\mathbb{E}_{\mathbf{z} \sim \mathcal{Z}_{T}}\left[\sum_{t=c+1}^{|\mathbf{z}|} \log p_{\theta}\left(x_{z_{t}} | \mathbf{x}_{\mathbf{z}_{<t}}\right)\right]

Transformer-XL


确定好目标函数之后,框架确定为Transformer=XL自回归语言模型。特点是relative positional encoding scheme和segment recurrence mechanism,更好地处理长文本,提升计算效率。具体不介绍了,详见参考文献[2]。链接是Transformer-XL的论文笔记。

IndexFziQ:论文笔记 —— Transformer-XLzhuanlan.zhihu.com图标

XLNet的独特之处还有关于每个词的位置信息都会算一个权重,用 a_{i j}=\left(\mathbf{q}_{i}+\mathbf{b}\right)^{\top} \mathbf{s}_{i j} 表示。其中 \mathbf{q}_{i} 是计算标准attention时的query,ij表示一个序列里的两个位置,\mathbf{s}_{i j}=\mathbf{s}_{+} 表示ij在同一个大片段里,\mathbf{s}_{i j}=\mathbf{s}_{-} 表示ij在不同大片段里,对比BERT的NSP,这个位置编码方式更加灵活。

Overview

按照3-2-4-1的编码顺序content stream mask self-attention,看到当前词。

按照3-2-4-1的编码顺序query stream mask self-attention,看不到当前词。


Pretraining and Implementation


XLNet-Large和BERT-Large的参数量是差不多的,24层的Transformer-XL。经过处理,最终得到Wikipedia-2.78B,BooksCorpus-1.09B,Giga5-4.75B,ClueWeb-4.30B和Common Crawl respectively-19.97B,一共32.89B,近3倍于BERT的语料作为模型输入。序列长度512,memory维度384,batch-size为2048,用512块TPU v3跑了500K step用了2.5天。一般我种子才会设置成2048。


XLNet-Base和BERT-Base用的语料一样。但是貌似没说参数量一样。更详细的参数设置见论文补充材料[1]A.3。


Experiment


第一个实验是在RACE多选型阅读理解数据集上,单模型比第二名准确率提高了7.6%。

第二个实验是在SQuAD抽取式阅读理解数据集上,单模型效果相对于BERT,v1的F1值提高3.6,v2的F1值提高7.0。

第三个实验是在文本分类数据集上,评价指标是错误率。单模型已经达到SOTA。


第四个实验是在GLUE,包括9个自然语言理解任务,评价指标是准确率。单模型比BERT在每个任务上都有提升,并且在NLI类任务、MRPC、RTE、STS-B提升显著,只有QQP、CoLA上没有ALICE好。


第五个实验是文档排序任务,根据query重排序出Top-100的文档,效果比BERT好一些。


​第六个实验是去除实验:2.只用Transformer-XL+DAE效果比BERT(Transformer+DAE)好,说明了Transformer-XL的有效性。3和4说明了PLM的有效性,但是K这个超参数是经验值,也没有与K=1的情况相比。5-8应该是在4的基础上,重要性逐渐减小:5说明了Transformer-XL里memory机制的有效性,6说明了片段预测的有效性,7说明正反向输入数据对结果影响不大,8说明了BERT的NSP任务对XLNet并不是很奏效,影响也不大。


Conclusion


首先文章动机很明确,指出了当前AR LM和AE LM的优缺点,在Transformer-XL的基础上结合AE捕获上下文的优点。

1. 提出了PLM预训练,用mask attention的方法实现factorization order的输入,大概率得到上下文信息。

2. 用two-stream self-attention,弥补自回归语言模型中目标预测歧义的缺陷。

本文实现factorization order的方式就很巧妙,保证了pretrain/finetune的一致性。但是这样以来,其实弱化了自然语言本身的时序信息,实验结果表明:更好地编码上下文更重要。不过XLNet刷榜各大自然语言理解数据集,特别是RACE和SQuAD提升很大,但是用的计算资源真是令人叹为观止。

最后抛出几个问题:

  • 去除实验中,NSP为什么在XLNet-BASE模型中不起作用?NSP在BERT中每个任务上均有提升。难道是相对位置编码的原因?
  • RTE任务上,XLNet单模型(多了2倍语料+PLM+相对位置编码+Transformer-XL)提升了13.4的准确率,原因为何?是数据还是模型?RTE就是标准的文本蕴含任务。
  • XLNet的large model提升更大,base model一般般,原因为何?

都是个人的理解,如有错误,评论区或者E-mail展开讨论。


Reference


[1]. Zhilin Yang, Zihang Dai, Yiming Yang, Jaime Carbonell, Ruslan Salakhutdinov and Quoc V. Le. XLNet: Generalized Autoregressive Pretraining for Language Understanding. arXiv preprint arXiv:1906.08237, 2019.
[2]. Zihang Dai, Zhilin Yang, Yiming Yang, William W Cohen, Jaime Carbonell, Quoc V Le, and Ruslan Salakhutdinov. Transformer-xl: Attentive language models beyond a fixed-length context. arXiv preprint arXiv:1901.02860, 2019.

编辑于 2019-07-01

文章被以下专栏收录