香侬读 | XLnet:比Bert更强大的预训练模型

香侬读 | XLnet:比Bert更强大的预训练模型

近日,继BERT[1]后,谷歌又放出了一个用于NLP预训练的大招:XLnet[2]。从论文的结果来看,XLnet在问答、文本分类、自然语言理解等任务上大幅超越BERT。

除了相比Bert增加了训练集之外,XLnet也在模型设计上有较大的改进,比如引入了新的优化目标Permutation Language Modeling(PLM),使用了双流自注意力机制(Two-Stream Self Attention, TSSA)和与之匹配的神奇Mask技巧。

这些改进为BERT类预训练模型难以进行生成任务的问题提供了一个解决思路。可以期待,在不久的将来,NLP预训练模型能够突破一系列生成任务,实现NLP模型结构化的统一。

那么,BERT的问题何在,XLnet又是如何解决的,实验结果是否证明了其有效性。下面我们将一起来探索XLnet的神秘之处。本文分为五个部分,我们首先简要回顾一下BERT与语言模型,接下来说明XLnet提出的背景,然后针对这些当下的问题阐释XLnet的框架与方法,下一步再介绍XLnet的实验,最后进行小结。

简要回顾:BERT与语言模型

BERT是一种用于各类NLP任务的预训练模型,比BERT更早的预训练模型有ELMo[3],GPT[4]等模型,且它们都是基于大规模语料上的无监督训练进行特征抽取。相比ELMo使用LSTM,BERT使用了最新的Transformers[5]结构作为backbone,而且能够对下游任务进行fine-tune;而相比GPT的单向Transformer,BERT使用了双向Transformer结构,更有利于提取上下文信息。

在训练方法上,不同于传统的单向语言模型(Language Model, LM)训练,BERT使用了两种方法:Masked LM(MLM)和Next Sentence Prediction(NSP)。对于MLM,BERT的做法是:对输入的句子,随机选取15%的Token,其中的80% 被替换为[MASK]标记,其中的10% 被随机替换为其他Token,另外的10% 保持不变。MLM训练的目标就是要去预测标记为[MASK]的原来的Token。对NSP,BERT把两个句子拼接后送入模型,作为一个二分类任务进行优化。

注意到,BERT的MLM方法和语言模型(LM)不同。LM是对一个句子,单方向地一个接一个地进行预测,这相当于最大化概率 p(x)=\prod_{i=1}^np(x_i|x_{<i}) ,而BERT和DAE(denoising auto-encoder)更为接近。DAE就是在输入端加入噪声,通过模型后输出得到加噪声前的输入,即优化 p(x│\tilde{x} )

从这个角度讲,BERT中的MLM就是对原输入 x 加入的一种噪声,BERT做的就是“去噪”。基于这种方法,BERT一方面可以更好地结合上下文信息,训练出更好的上下文相关性;另一方面,也使得模型更加robust。相反,LM只能从一个方向去考虑上文信息,而不能充分利用上下文的关系,这是LM的一个不足之处。

但是,从生成类任务(如MT)的角度来讲,LM相比之下更加自然和简单。生成类任务要求我们逐个生成Token,这和LM的训练机制不谋而合,而BERT由于训练过程和生成过程的不一致,导致其在生成类任务上的效果不佳。

提出背景:BERT与LM的缺点

XLnet的提出是基于BERT和LM的固有缺点而言的。在上节我们已经提到了BERT的一个缺点:预训练与微调的模式不匹配问题。因为BERT是DAE模式的,而生成类任务是LM(或Autoregressive, AR)模式的,这就在训练和微调两个阶段产生了不一致。实际上,BERT的MLM方法就有缓解这个问题的目的,但不能从根本上解决。这是一点。

另一方面,BERT句子中所有的[MASK]是相互独立的。注意比较上节中的BERT和LM各自的优化目标。可以看到,LM的优化是基于概率的链式法则,也就是考虑了上文的相关性;而BERT的优化是基于上下文的“复原”,忽略了各个[MASK]之间的相关性。比如,对“我爱北京”这个简单的句子而言,LM要优化的是: p(我爱北京)=p(我)p(爱│我)p(北│我爱)p(京│我爱北),而BERT要优化的是(假定现在的输入是“我爱[MASK][MASK]”): p(我爱北京│我爱[MASK][MASK] )=p(北│我爱)p(京│我爱) 。可以看到,“北”和“京”之间是没有关联的,这就在一定程度上忽视了语言中的相关性。

第三,对LM而言,它只能考虑单方向的文本信息。LM只能从一个方向,要么从左到右,要么从右到左进行优化,而BERT考虑的是上下文的信息。

从上面的三点来看,BERT和LM都有其不足之处,那么有没有一个办法结合两者的优点且避免其缺点呢?这就是下面XLnet要做的事情。

XLnet:巧妙的置换与神奇的Mask

上面我们说到,LM可以捕捉文本的相关性,是一种自然的生成模式,但是却不能关联下文;BERT可以关联下文但是存在训练-微调失配问题。这样,我们就需要既可以关联上下文,又能单方向生成的一种训练方法。XLnet给出的答案是:使用Permutation Language Modeling(PLM),即对输入顺序本身进行置换。

给定长度为 T 的序列 x ,它的原下标为 [1,2,…,T] ,其所有置换的集合为一个全排列 Z_T,这样我们就可以转为优化下面的目标:

\max_\theta E_{\mathrm{z}\sim\mathcal{Z}_\mathcal{T}}\left[\sum_{t=1}^{T}{\log{p_\theta}\left(x_{z_t}\middle|\mathrm{x}_{\mathrm{z<t}}\right)}\right]

注意到这里 z∼Z_T 始终是 [1,2,…,T] 的一个排列,输入到模型的Token顺序并没有改变,所以模型的参数在不同的排列下也是保持不变的,这样一来,如果我们在当前排列 z 上进行类似于LM的操作,理论上,对 ∀t∈[1,2,…,T] ,始终可以看到所有的 x_i≠x_t 。换句话说,这就相当于在考虑 x_t 的时候考虑了它的上下文。并且,这样的置换操作可以很自然地归入AR框架,这就结合了BERT和LM的优点。

还是举“我爱北京”的例子。现在其下标为(我,1),(爱,2),(北,3),(京,4)。如果我们置换得到的是2->4->3->1,那么训练的顺序就为“爱->京->北->我”,也就是按照这个顺序去执行类似LM的操作。可以看到,原本LM训练时“北”看不到“京”,现在可以看到了;原来BERT中“北”和“京”相互独立,现在预测“京”可以基于“北”的信息,而且整个训练过程也完全符合LM的模式。这样一来,就完美解决了上面的三个问题。

那么,我们该怎么把LM和预训练模型相结合呢?XLnet提出的双流自注意力机制(Two-Stream Self-Attention,TSSA)就是上述方法的具体操作。这个机制的核心就是BERT所谓的掩码Mask。

首先要再次强调,输入到模型的文本顺序保持不变,比如,在上述的置换下,输入到模型的仍然是“我爱北京”而不是“爱京北我”,实现置换的方法就是TSSA。具体来说,不同于之前类似BERT的模型,XLnet使用了两组不同的表征单元,XLnet分别称为内容表征单元(content representation)和询问表征单元(query representation)。内容单元和之前一样,是对上文信息的表示,需要涉及当前Token。而询问单元只能访问当前Token的位置信息而不能访问当前Token的内容信息。这两个信息流通过自注意力机制向上传递,在最后一层使用询问单元去输出。

输出的是什么呢?输出的就是输入的内容。比如,输入的是“我爱北京”,输出的还是“我爱北京”。但是问题来了,不是说我们已经对输入顺序置换了吗,怎么输出还能是原来的输入且保持顺序不变呢?而且LM的处理模式好像也没有体现。这就是XLnet神奇的地方,它巧妙地使用了Mask达到上面两个目的。

我们以下图为例进行阐释,其中,1234对应的就是“我爱北京”,并且置换为3241,也即“北爱京我”。因为句子的长度为4,所以我们有两个 4×4 的Mask矩阵,分别对应了内容流和询问流。如图(c),两个矩阵都是从上到下行标为1234,从左到右列标为1234,再次提醒,这里的1234分别和“我爱北京”是对应的。

我们来看上面的内容流矩阵。第一行对应的是“我”,“我”在这个置换顺序中是最后一个(3241),所以它可以看到自己及自己之前的所有Token,体现在矩阵上,把所有四列都设为1(图中标为红色)。再看第二行,对应的是“爱”,在置换中的顺序是第二个,所以可以看到自己和3,也即“北”,在矩阵对应的位置标记。同理,对“北”和“京”也是一样的操作。而询问流矩阵只需要把内容流矩阵的对角线抹去即可(因为询问流看不到自己的信息)。这两个矩阵的使用和Transformer一样,只需要对相应的自注意力矩阵做Hadamard乘积即可。

可以看到,通过这种巧妙的Mask方法,XLnet完美结合了LM的优点和上下文的相关性,并且比起LSTM,还具有可并行的优势。

实际上,这里的Mask和BERT的Mask在本质上是一样的,都可以看作是一种加噪的过程。不同的是,XLnet的Mask利用率更高。这是因为,对同一个句子,我们可以有不同的置换,而且对同一个置换,我们可以像LM那样遍历整个句子,相当于遍历了所有可能的上下文情况。

XLnet还使用了部分预测(Partial Prediction)的方法。因为LM是从第一个Token预测到最后一个Token,在预测的起始阶段,上文信息很少而不足以支持Token的预测,这样可能会对分布产生误导,从而使得模型收敛变慢。为此,XLnet只预测后面一部分的Token,而把前面的所有Token都当作上下文。具体来说,对长度为 T 的句子,我们选取一个超参数 K ,使得后面 1/K 的Token用来预测,前面的 1-1/K 的Token用作上下文。注意, K 越大,上下文越多,模型预测得就越精确。

此外,XLnet还使用了Transformer-XL作为Backbone,也使用了T-XL的相对位置编码,所以相比BERT,XLnet对长文档的支持更加有效。

实验结果:超越BERT的那个模型

XLnet在阅读理解与问答(RACE、SQuAD)、文本分类(IMDB、Yelp-2/5、DBpedia、Amazon-2/5、AG)、NLU(GLUE Dataset)和文档排序(ClueWeb09-B)等任务上进行了实验,均超越了BERT达到最新SOTA。下面逐一进行分析。

首先是MRC&QA。XLnet使用了RACE和SQuAD两个数据集,实验设置详见论文。下图是文中给出的实验结果。可以看到,在两个数据集上,XLnet都全面碾压BERT,其中RACE有非常巨大的提升。注意到,RACE和SQuAD属于长文档类型,尤其是RACE,文档的平均长度超过了300,所以在处理这种长文档的能力上,以T-XL为Backbone的模型自然要比BERT更强。

然后是GLUE数据集,这是一个综合各类NLU任务的数据集,包括MNLI、QNLI、QQP、RTE、SST-2、MRPC、CoLA、STS-B与WNLI。下图是该数据集上的实验结果。首先看到第一行,即在单任务测试集上XLnet和BERT的表现。可以看到,XLnet相比BERT,在各个数据集上都有不同程度的提升,但是提升幅度相比MRC&QA而言较小。可能的原因有,一是GLUE的文档长度较短,XLnet相比BERT没有相对较大的优势;二是Mask的方式相对而言不如MRC&QA敏感。

然后是信息检索中的文档排序任务,该任务主要考察的是低层特征表示的质量。从下图可以看到,XLnet比BERT有进一步的提升,但是提升没有特别显著。

特别需要提出的一点是,在上面的所有任务中,XLnet使用了比BERT多得多的训练数据。BERT使用的是BooksCorpus和En-WikiPedia共13G数据,而XLnet除此之外还使用了Giga5、ClueWeb2012-B和CommonCrawl共112G数据。从数据量上看,XLnet使用了成倍的数据进行训练,那么对于上述实验提升较小的任务,如文档排序、GLUE任务,大量训练数据在其中能有多大的贡献还存疑,而在MRC&QA中数据量的贡献和T-XL的贡献又占多大的比重。这些都需要未来进一步的探究。

在文章Ablation Study部分,作者探究了三个因素:PLM、T-XL和其他实现细节。遗憾的是,作者并没有在同等规模的数据量下进行比较。

从下图可以看到, K=6 的XLnet显著优于BERT和DAE+T-XL,而且在RACE数据集上,加上NSP能够取得最佳效果。我们首先注意到前两行,在RACE和SQuAQ数据集上,T-XL显著比BERT好,这说明T-XL的确对长文档有更好的支持。比较第三、四行,发现 K=7 略优于 K=6 ,这说明训练时更多的上下文信息有助于模型更好地学习。从五到七行来看,这三种训练技巧都能有效地提高模型效果,而NSP不一定对效果有帮助。

来日可期:NLP的新时代

XLnet使用了一种非常巧妙的方法克服了BERT和LM的缺点,可以说是BERT的装甲进化版。难能可贵的是,XLnet给出了一个当前大规模预训练模型下可用于生成式任务的思路,并且能够更好地支持长文档。可以预见,今后更多的关于生成式预训练的方法会大量涌现,生成的质量、效率都将得到极大提高。并且,从BERT和XLnet的Mask方法来看,今后也会有更多更有效的训练方法产生。如何更充分地利用无监督的训练数据?如何设计更科学合理的模型架构来得到高质量的特征表示?如何把NLP的各类任务统一起来?这些都是我们需要面对的问题。

从ELMo到BERT再到今天的XLnet,我们见证了大规模语料上的预训练快速发展的脚步,同时也见证了算力在其中扮演的重要角色。可以说,我们迎来的是一个NLP的新时代,新的训练方法,新的模型架构,新的学习要求。千言万语,来日可期。

参考文献

[1]Bert: Pre-training of Deep Bidirectional Transformers for Language Understanding

[2]XLnet: Generalized Autoregressive Pretraining for Language Understanding

[3]Deep Contextualized Word Representations

[4]Improving Language Understanding by Generative Pre-Training

[5]Attention is All You Need

编辑于 2019-07-02