0%

2020-10-30-论文分享

XLNet: Generalized Autoregressive Pretraining for Language Understanding

BERT和GPT都是只使用了transformer的encoder和decoder部分,原本transformer层也是可以attend to 双向的,但是GPT为了要基于前面的序列预测下一个word,所以只有上文信息,所以像decoder一样mask掩码掉了,只能利用上文的信息;而BERT没有进行掩码,为了更加利用好双向的关系,BERT在transformer的基础上使用了MLM的策略,主要处理的是自然语言理解的任务。

NIPS 2019

authors : ZhilinYang , ZihangDai (Carnegie Mellon University, Google AI BrainTeam )

code url (official tf) : https://github.com/zihangdai/xlnet

code url (unofficial torch): https://github.com/huggingface/transformers

论文名字的含义:一般的AR模型更适合处理自然语言生成的任务,比如transformer、transformer-XL; 而AE更适合处理自然语言理解的任务。本文通过XLNet模型,能够是AR预训练(结合了transformer-XL的思想)能够泛化到处理多个自然语言理解的问题上(与BERT功能类似)

背景

image-20201031210916531

AR语言模型(transformer-XL)只是训练编码一个单向的上下文,然而这限制了其在更多应用场景的效果,比如阅读理解这种任务,在做任务的时候是可以允许同时看到上文和下文一起做决策的。 所以AR语言模型适合自然语言生成的任务 (机器翻译等)

image-20201031211538083

因为没有将密度估计作为目标函数的一部分,所以AE语言模型(BERT)就可以获取双向信息,利用上下文信息进行重建masked token。适合自然语言理解任务(阅读理解,问答等)

借助对双向上下文进行建模的功能,像BERT这种的基于denoising autoencoding (AE)比基于autoregressive language modeling(AR)的方法具有更好的性能。

问题

image-20201101103324693

BERT的MLM策略的缺点

  1. mask掉的词之间的联系忽略了,即BERT假设被mask掉的词之间是独立无依赖的

  2. pretrain (有mask)和fine-tune(无mask)直接有区别 (pretrain-finetune discrepancy)

解决

image-20201031212429943

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

(1)没有使用BERT的MLM,而是用的是PLM策略。即通过最大化因式分解的所有排列的预期似然性来实现双向上下文学习,克服MLM的缺点。

所有的分解序列作为一个集合,对所有采样序列,XLNet按照AR LM的计算方式求对数似然期望的极大值。

(2)XLNet将来自最先进的自回归模型Transformer-XL的思想(segment recurrence mechanism和relative encoding scheme)整合到预训练中,能够提升涉及长文本序列时的效果

(3)引入Masked Two-Stream Self-Attention 策略来解决PLM出现的目标预测歧义(the ambiguity in target prediction)问题

每一步在随机排列之后的token,进行的都是一个AR语言模型的过程(在排列顺序中,根据前面的token来预测当前的token ),这样进行T次(具体次数是超参),原则上就可以克服AR中只能看到原始序列顺序之前token的缺点,可以关注到双向信息。

模型

背景知识

给定文本序列x=[x1,…,xT],语言模型(AR)的目标是调整参数使得训练数据上的似然函数最大:

image-20201031221410608

记号x<t表示t时刻之前的所有x,也就是x1:xt−1。hθ(x1:t−1)是RNN或者Transformer。e(x)是词x的embedding。

BERT是去噪(denoising)自编码的方法。对于序列x,BERT会随机挑选15%的Token变成[MASK]得到带噪声版本的x^。假设被Mask部分的原始值为x¯,那么BERT希望尽量根据上下文恢复(猜测)出原始值了:

image-20201031221357201

上面的公式中,mt=1表示xt被Mask掉,Hθ是一个Transformer,它把长度为T的序列x映射为隐状态的向量序列。

不同点:

  1. BERT是“≈” ,因为BERT假设被mask掉的词之间是独立无依赖的,没考虑之间的关系,而AR是“=”
  2. BERT的输入是BERT会随机挑选15%的Token变成[MASK]得到带噪声版本的x^,而AR是原始的x序列
  3. BERT可以获取上下文的双向信息,而AR只能获得上文token信息
Permutation Language Modeling ( PLM )
思想

提出了一种序列语言建模目标,它不仅可以保留 AR 模型的优点,同时也允许模型捕获双向语境。

具体来说,一个长度为 T 的序列 x 拥有 T! 种不同的排序方式,可以执行有效的自回归因式分解。在本文中选择了T种

如果模型参数在所有因式分解顺序中共享,那么预计模型将学习从两边的所有位置上收集信息。

以下图为例,对于序列[1,2,3,4]有24种排列方式,那么下图中四种排列方式的,该序列的期望函数分别是:

image-20201101004521295

image-20201031223904029

在给定相同输入序列 x(但因式分解顺序不同)时预测 token x3的示例

相比于普通的语言模型只能学习一种方向的依赖关系,排列语言模型会学习各种顺序的预测方法

问题:遍历T!种路径,然后学习语言模型的参数。计算量非常大

解决:随机采样T!中的部分排列

PLM的目标是调整模型参数使得下面的似然概率最大:

image-20201031224727513

其中ZT表示长度为T的序列的所有排列组成的集合,则z∈ZT是一种排列方法。

用Xzt表示排列的第t个元素,zt表示第t个位置,而z<t表示z的第1到第t-1个元素。

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

注意:上面的模型只会遍历概率的分解顺序,并不会改变原始词的顺序。

实现:

通过Attention Mask来对应不同的分解方法。比如p(x1|x3)p(x2|x1x3)p(x3),我们可以在用Transformer编码x1时候让它可以Attend to x3,而把x2Mask掉;编码x3的时候把x1,x2都Mask掉。

image-20201031235156078

将上述的策略结合AR语言模型,那么就可以避免BERT的问题

基于目标感知的双流注意力模型

问题:

image-20201101005004082

image-20201101005315581

这两个概率不应该相等的,但是对比这两个公式会发现,这两个公式的概率是相等的。为什么会出现这样的情况呢?上面问题的关键是模型无法知道当前mask掉的文本在原始序列中的位置。在Transformer中输入的embedding会加入position embedding,输入已经带入了位置信息,但是我们重新排列之后模型无法预测当前位置在原始序列中的位置,因此我们需要让模型来预测当前文本的位置。 那么在模型中当前位置的文本的概率计算方式则如下所示,其中g(θ)不仅需要输入当前位置之前的文本,还需要输入他们在原始文本中的位置。

image-20201101005459040

XLNet 打乱了句子的顺序,这时在预测的时候 token 的位置信息会非常重要,同时在预测的时候也必须将 token 的内容信息遮掩起来 (否则输入包含了要预测的内容信息,模型就无法学到知识)。也就是说 XLNet 需要看到 token 的位置信息,但是又不能看到 token 的内容信息

双流self-attention

1.Query Stream,对于每一个 token,其对应的 Query Stream 只包含了该 token 的位置信息,注意是 token 在原始句子的位置信息,不是重新排列的位置信息。

2.Content Stream,对于每一个 token,其对应的 Content Stream 包含了该 token 的内容信息。

查询表征单元(Query Representation):查询表征单元和我们上述需要注意的点相同,可以看到上下文的信息和当前位置,不可以看到当前的Token,例如[1,2,3,4]在第4个位置只能看到[1,2,3]。查询表征单元中矩阵Q由于计算了各个位置的信息,保留了当前位置,但是KV矩阵分别表示各个context的重要性,没有计算当前位置。

img

内容表征单元(Context Representation):内容表征单元和我们上文中说的Transformer一致,可以看到上下文的信息和当前的Token,例如文本序列[1,2,3,4],在第4个位置,内容表征单元可以看到[1,2,3,4],在第3个位置内容表征单元可以看到[1,2,3]。如下图所示QKV矩阵的计算都包含了当前位置。

img

Query Stream 和 Content Stream 组合

XLNet 将 Query Stream 和 Content Stream 组合在一起,整体架构如下图所示。

image-20201101011712221

图中最下面的一层是输入层,其中 e(x) 是单词的词向量,表示输入的 Content Stream,而 w 表示输入的位置信息,即 Query Stream。

图中的掩码矩阵,红色表示不遮掩,白色表示遮掩。第 1 行表示 token 1 的掩码,可以看到,1 是句子的最后一个 token,因此可以看到之前的所有 token (3,2,4)。3 是句子的第一个 token,看不到句子的任何信息,因此第 3 行都是白色的 (表示遮掩)。

Partial Prediction

XLNet 将句子重新排列,然后根据排列后的顺序使用 AR 方式预测,但是由于句子是随机排列的,会导致优化比较困难且收敛速度慢。因此 XLNet 采用了 Partial Prediction (部分预测) 的方式进行训练,对于排列后的句子,只预测句子末尾的 1/K 个 token。

例如 K=4,就是只预测最后 1/4 的 token。给定句子 [1,2,3,4,5,6,7,8] 和一种随机排列 [2,8,3,4,5,1,7,6],则只预测 7 和 6。论文中训练 XLNet-Large 时使用的 K 为 6,大约是预测末尾 14.3%的 token。

实验

image-20201101012324865

image-20201101012421507

消融实验

排列语言模型和transfomer-xl对效果的影响很大。而且NSP任务对效果的影响倒是几乎没有,这也是上文中我们没有用NSP任务的原因。

总结

XLNet 的核心思想是 PLM,排列原来的句子,然后预测末尾的单词。这样可以学习到单词之间的依赖关系,而且可以利用 token 前后向的信息。

http://aiblog.top/2019/07/12/XLNET%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%E5%8F%8A%E7%90%86%E8%A7%A3/

https://my.oschina.net/u/4373067/blog/4476706

https://baijiahao.baidu.com/s?id=1654814515140351919&wfr=spider&for=pc

-------------本文结束感谢阅读-------------
卑微博主,在线求赏