【通览一百个大模型】XLNet(Google)

XLNet

欢迎订阅阅读【大模型&NLP&算法】。

【通览一百个大模型】XLNet(Google)

作者:王嘉宁,本文章内容为原创,仓库链接:https://github.com/wjn1996/LLMs-NLP-Algo

订阅专栏【大模型&NLP&算法】可获得博主多年积累的全部NLP、大模型和算法干货资料大礼包,近200篇论文,300份博主亲自撰写的markdown笔记,近100个大模型资料卡,助力NLP科研、学习和求职。


XLNet大模型基本信息资料卡

序号 大模型名称 归属 推出时间 规模 预训练语料 评测基准 模型与训练方法 开源 论文 模型地址 相关资料
1 XLNet Google 2019-06 <1B 预训练语料:Wikipedia和BookCorpus共13GB。
Giga5(16GB)、ClueWeb 2012-B、Common Crawl
GLUE、SuperGLUE、SQuAD、RACE等NLU数据集 (1)排序语言模型目标:假设排列组合方式为 x4 -> x3 -> x1 -> x2,那么在预测 x3 的时候,可以看到 x4 的信息,并 mask 掉 x1 和 x2 这两个单词;当排列组合方式为 x2 -> x4 -> x3 -> x1时,在预测 x3 的时候,可以看到 x2、x4 的信息,mask 掉 x1 单词。不管选择哪一种排列组合方式,实际句子输入时单词的顺序并没有改变,只是通过 mask 的方法,将排列组合顺序中需要预测的位置之后的全部内容屏蔽掉,等价于自回归语言模型,但利用了上下文中的信息。
(2)双流自注意力:内容流(content stream) 指的是单词的全部信息可见,包括单词本身的内容和位置信息;查询流 (query stream)实际上也可理解为位置流,只包含单词的位置信息。
image.png
Github XLNet xlnet-large-cased 查看

XLNet 模型是在 2019 年 10 年由 CMU 和 Google 大脑团队在 NIPS 顶会上联合发布,是 Bert 模型不到一年之后又一刷爆榜单的模型。XLNet 一共在 20 个 NLP 任务上超越了 Bert,并且其中 18 个任务在当时取得了 SOTA 的成绩。
在 XLNet 出现之前,NLP 领域的两大预训练语言模型阵营分别是 AR 和 AE 模型,我们先看下面这张图关于两种模型的对比。

AR模型 VS AE模型
AR (Auto-regressive LM) 即自回归语言模型,任务是根据句子中前面已知的单词信息,来预测后面的单词,典型代表是 RNN/LSTM。比如在句子 “New York is a city" 中预测 “a” 这个单词,需要用到 “New York is” 来预测,也就是预测的词与前面的词有依赖关系。AR 模型的目标函数是根据句子前面的单词预测后面单词的似然概率最大,具有严格的数学公式表达。
AE (Auto-encoding LM) 即自编码语言模型,典型代表是 Bert 模型,其任务是在句子中随机 Mask 掉一些单词,并通过上下文来重新预测这些被标记为 [MASK] 的单词。因此 Bert 这种在输入中加入所谓的噪声并进行单词还原的模型也被称为降噪 (Denoising) 的自编码模型。AE 模型的目标函数是根据句子中的上下文预测 [MASK] 单词的似然概率最大。从数学公式中细心一点我们可以发现采用了“≈”号,这是因为 Bert 模型是假设所有 [MASK] 单词之间是没有关系的,即预测 MASK 时丢失了来自其他 [MASK] 的信息,因此数学表达相比 AR 模型没有那么严格。

两种语言模型的优缺点对比

AR 模型的训练过程是单向的,只能从前往后预测或者从后往前预测,不能充分利用上下文的信息,因此模型的性能不能进一步的提升。而优点是生成类的任务是自左向右的,与 AR 模型的结构有很好的匹配,因此在生成类任务上 AR 模型的表现是更优异的。AE 模型的优点是双向训练,预测时充分考虑了上下文的内容。而缺点在于一方面做了独立假设,基于 [MASK] 单词之间相互独立,因此目标函数是近似的计算。另一方面在预训练阶段引入了 [MASK] 标签,而在 fine-tuning 阶段这个标签是不存在的,导致两个阶段存在差异。

模型改进

改进方向

结合 AR 模型和 AE 模型的优缺点,我们希望改进后的模型既具备生成能力,又能双向训练,同时可以避免预训练和 fine-tuning 之间的 discrepancy,由此引申出来两个改进思路。第一种是以 Bert 模型为基础进行改进,第二种是以 LM 模型为基础的改进。XLNet 的提出更多的是为了提升模型的生成能力,因此最终改进的方向是围绕 LM 模型为基础,并使模型具备双向训练的能力。

改进1 - 排列组合 Permutation

借鉴 NADE (Neural autoregressive distribution estimation) 的思想,在XLNet模型中引入排列组合方法,使得 AR 模型也能够学习到上下文的信息。排列组合的思想是,对于一个长度为 n 的序列,对每个单词打乱顺序,一共可以得到 n! 种排列组合的分解因子 (Factorization order) 方式。举个简单的例子,假如一个句子原始顺序是 x=x1x2x3x4,随机打乱后选择其中一种排序为 x1 -> x4 -> x2 -> x3,那么预测第三个位置为 x3 单词的概率可以用公式表示为 p(x) = p(x3|x1,x4,x2) p(x2|x1,x4) p(x4|x1),其中 p(x3|x1,x4,x2) 表示已知第一个词是 x1,第二个词是 x2,第四个词是 x4 的条件下,第三个词是 x3 的概率。这样一来,虽然 x4 的位置是在 x3 的后面,但是在预测 x3 时可以用到后面的信息,也就是上下文的信息都可以利用起来。
如下图所示,第一种排列组合方式为 x4 -> x3 -> x1 -> x2,那么在预测 x3 的时候,可以看到 x4 的信息,并 mask 掉 x1 和 x2 这两个单词;第二种排列组合方式为 x2 -> x4 -> x3 -> x1,在预测 x3 的时候,可以看到 x2、x4 的信息,mask 掉 x1 单词。不管选择哪一种排列组合方式,本质上句子输入时单词的顺序并没有改变,只是通过 mask 的方法,将排列组合顺序中需要预测的位置之后的全部内容屏蔽掉,等效成使用自回归语言模型的训练方法,但同时利用了上下文中的信息。

Factorization order diagram
排列组合语言模型的目标函数可以表示成以下公式:其中 ZT 表示所有排列组合方式的集合,z 表示选择其中一种排列组合方式,即已知该排列组合前面 t-1 个位置内容的条件下,预测 t 位置单词为 XZT 的最大似然概率。

PLM objective function
而在实际训练的时候,考虑到句子很长的情况下,排列组合的数量 n! 会非常大,如果每个组合都训练一次需要的计算量极大。因此对于一个句子只采样一种排列组合的方式进行训练。另外一个句子中不是所有位置都需要预测,XLNet 采用的是部分预测的方法,即如果取位置靠前面的单词来预测,由于可利用的上下文信息很有限,训练效率也不高。因此只选择位置在最后 1/K 的单词来预测,这样利用的上下文的单词更多了,训练的收敛更快。K 的值一般取 6~7 (14%~16%),与 Bert 模型 mask 掉 15% 的单词也是差不多的。

改进2 - 双流注意力机制 Two-stream attention

采用排列组合的方法后,通过 mask 掉句子中的一部分单词来等效实现了利用上下文信息预测这些 mask 单词的内容,相当于结合了语言模型和 Bert 的优点。但是如果只用 Permutation 方法会存在一个问题,在一个排列组合顺序中,已知前面 t-1 个位置单词,来预测下一个位置的单词,那么对于同一个真实值,似然概率都是一样的,与真实值在原始句子顺序中的位置是没有关系的。
举个简单的例子,“I love China very much"这个句子中,原始顺序表示为 [1, 2, 3, 4, 5]。如果打乱顺序为 z = [2, 4, 1, xxx, xxx],即已知 “love”, “very”, “I” 这三个单词,那么预测下一个单词为 “China” 时,不管它在原始顺序处在位置3还是位置5,其预测概率都是相同的,也就是等同于 “I love much very China”。而显然 “China” 放在 “love” 后面的概率要更高。
由此进一步改进,对于预测目标,除了需要知道前面位置的单词外,还需要加入目标的位置信息。比如下图中的排列组合顺序 x3 -> x2 -> x4 -> x1,预测 x4 时需要知道 x3、x2 的位置和内容(下图中用实线表示),还需要知道 x4 的位置(下图中用虚线表示),但不能提前暴露 x4 的内容。为此 XLNet 引入双流自注意力机制的方法,其中双流分别指的是内容流 (content stream) 和 查询流 (query stream)。内容流指的是单词的全部信息可见,包括单词本身的内容和位置信息;查询流实际上也可理解为位置流,只包含单词的位置信息。

具体实现上,内容流做 self-attention 时,Q 取当前位置的全部信息(用 h(m-1) 表示),K 和 V 取所有位置的全部信息(图 a 所示)。查询流做 self-attention 时, Q 取当前位置的位置信息(用 g(m-1) 表示),K 和 V 取其他位置的全部信息(图 b 所示)。

Content-stream and Query-stream
XLNet 将两种 stream 组合在一起使用,每一层的每个位置的都分别求出内容流 h(m-1) 和查询流 g(m-1) 。当某个位置的单词需要被预测时,则该位置只用到 g(m-1) 的隐藏编码;反之如果某个位置的单词是已知的信息,那么该位置用到 h(m-1) 的隐藏编码。完整训练过程如下图所示。

Two-stream co-work and attention masks
综合上述,优化后的 XLNet 目标函数中增加了预测位置的信息,如下公式中 zt 表示预测目标的位置。这种方法也称为 target-aware prediction。

PLM optimized objective function

改进3 - 借鉴 Transformer-XL 的思想

我们知道 Transformer 相比于 RNN 模型的优势在于长距离依赖的问题,但缺点是需要的内存非常大。假如一段输入文本长度为 N,那么 Transformer 内部的 self-attention 由于是两两单词之间计算,即需要 N 平方的计算量。因此 Transformer 在空间复杂度上的问题比较突出,需要考虑将内存分散到不同的机器。在 Transformer-XL 出来之前,解决方法是将长文本拆分成几个等长的短文本,并单独训练。虽然解决了计算量的问题,但是也打断了短文本之间的联系。
而 Transformer-XL 提出的解决方法是,将长文本拆分成几个 segment,每个 segment 再通过 RNN 的方法串联起来从而学习到相互间的关系。下图展示了在 Transformer 模型结构基础上做的改进,首先有两个已经拆分好的 segment t 和segment t+1,输入阶段都进行了 word embedding + positional embedding 并输出给第一层 encoder block。对于 segment t,每一层 encoder block 的隐状态输出,一方面用作下一层 encoder block 的输入,另一方面作为segment t 的 “Memory” 信息输出给 segment t+1 的同一层 encoder block,两个 segment 同一层 encoder block 的隐状态输出进行拼接,并且每一层都重复同样的操作,从而实现了将两个 segment 之间的信息关联起来,与此同时计算所需的内存也大大降低。

Segment recurrence mechanism

改进4 - Relative positional encoding

将长文本拆成几个 segment 之后,随着而来出现了另外一个问题。采用 Transformer 的绝对位置编码方式,每个 segment 的同一个位置编码是一样,导致 segments 之间同一个位置无法区分先后顺序。因此 Transformer-XL 还需引入相对位置编码方式。
采用绝对位置编码时,Transformer 的 attention score 可以分解为下面左图的形式。其中,i、j 分别表示 query 和 key 的位置,E 表示 word embedding,U 表示 positional encoding,因此实际上下面的公式由 (Exi+Ui)WqWk(Exj+Uj) 按乘法分配律分解成 4 个多项式的。可以发现 (a) 项是关于两个词向量之间的相关性,(b) © 项都是关于一个位置的词向量与另一个位置的位置编码之间相关性,(d) 项是关于两个位置编码之间相关性。

Attention score of absolute and relative positional encoding
为了用相对位置编码的方式替换绝对位置编码,在原有的分解式做了3处改进(右图的公式表示):

  1. 将所有的 Uj 项统一改成 Ri-j,也就是将 Key 的绝对位置表示替换成 Key 和 query 之间的相对位置表示;
  2. 由于 key 的绝对位置表示已经换成了相对位置表示,那么 query 的绝对位置表示 Ui 也就没有意义了,因此两处的 Ui 只需用一个可学习的参数 u 和 v 分别表示即可。
  3. Transformer 中的 word embedding 和 positional encoding 都采用了相同的线性变换。因此进一步细化,可以对两种编码分别采用两个不同的线性变换,将 Wk 项拆分成 Wk,E 和 Wk,R。

采用新的参数定义后,每一项有了更加直观的含义:(a) 项完全是内容相关的表征,(b) 项是内容相关的位置偏置,© 项全局内容的表征,(d) 项是全局的内容偏置。

改进5 - Relative segment encoding

对于句子对任务,BERT 的输入结构为 [CLS, 句子A, SEP, 句子B, SEP],因为需要区分两个句子,Bert 引入了 absolute segment encoding 的方式,句子前面的部分 [CLS, 句子A, SEP] 为 segment A,按值 0 进行编码;句子后面的部分为 segment B,按值 1 进行编码。
借鉴 relative positional encoding 的思想,XLNet 采用了 relative segment encoding 方法,即 segment 不是各自独立地进行编码,而是根据 segment 之间相对关系来编码。在计算 attention 时,如果两个位置 i, j 属于同一个 segment,那么编码统一取为 sij=s+;如果两个位置 i, j 属于不同的 segment,那么编码统一取为 sij=s-。计算 i, j 之间的 attention 时,在常规的 attention 分数基础上,再加上一个 aij 分量:aij=(qi+b)Tsij,其中 qi 是位置 i 的 query 向量,b 是偏移量。
引入 relative segment encoding 方法后,使得 segment 之间的关系表征更加泛化,同时下游任务不局限于句子对任务,还适用于多个 segmnt 的任务。

试验结果

在同等模型参数大小和数据规模的条件下,XLNet 的性能几乎全面超越了 Bert。以 XLNet-Large 和 BERT-Large 两个模型为例进行对比,对于阅读理解任务 SQuAD 和 RACE,XLNet 的性能提升是最明显的,平均有 2 个点的分数提高。而对于 GLUE 系列任务上的性能测试,XLNet 相比 BERT 平均也有 1 个点的分数提高。

Fair comparision between BERT and XLNet
由于 XLNet 采用了多个模型改进方法,为了更清楚了解每项改进贡献了多大的性能提升,论文做了以下消融实验。首先我们发现移除了缓存机制后 (memory 项),模型在所有任务中的分数降幅最大 (平均下降 0.6 )。其次是移除双向训练功能,分数平均降幅为 0.4。而移除 span-based 预测的功能后,分数平均降幅为 0.3。最后再 XLNet 模型中加入了 NSP 任务,结果发现除了在 RACE 任务有轻微提升外,在其余任务上的结果都是变差的。

XLNet ablation test result

总结

从宏观来看,XLNet 实现了站在巨人 BERT 肩膀上的新的突破,将 AR 模型和双向训练有机地结合在一起。从微观来看,XLNet 引入的几个改进方法各有所长:Permutation LM 使得语言模型在训练时可以充分利用上下文的信息;Two-stream encoding 很好地区分了预测目标和非预测目标的 attention 的计算使结果更训练更加合理;Transformer-XL 极大减少了运算内存及解决了模型长距离依赖的问题,而 relative-positional encoding 又有效避免了两个 segment 之间的位置冲突。此外,XLNet 以 AR 为基础的结果与生俱来匹配生成类的 NLP 任务,因此 XLNet 必然会推动在文本摘要、机器翻译、问答系统等领域下进一步改进模型的出现。



原文:https://zhuanlan.zhihu.com/p/477860047

  博客记录着学习的脚步,分享着最新的技术,非常感谢您的阅读,本博客将不断进行更新,希望能够给您在技术上带来帮助。


【大模型&NLP&算法】专栏

近200篇论文,300份博主亲自撰写的markdown笔记。订阅本专栏【大模型&NLP&算法】专栏,或前往https://github.com/wjn1996/LLMs-NLP-Algo即可获得全部如下资料:

  • 机器学习&深度学习基础与进阶干货(笔记、PPT、代码)
  • NLP基础与进阶干货(笔记、PPT、代码)
  • 大模型全套体系——预训练语言模型基础、知识预训练、大模型一览、大模型训练与优化、大模型调优、类ChatGPT的复现与应用等;
  • 大厂算法刷题;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36426650/article/details/131743860