【论博文笔记】XLNet总结

结合
XLNet结合了Bert、GPT 2.0和Transformer XL

  • 它通过PLM预训练目标,吸收了Bert(AE)的双向语言模型;
  • GPT2.0更多更高质量的预训练数据,这也被XLNet吸收进来;
  • 引入Transformer XL来解决Transformer对于长文档应用不好的问题

XLNet 四个好处

  • 结合AE优点,PLM获取双向语义信息(对token级别的任务如RC\QA很重要)
  • 结合AR优点,输入不用masking,解决了pretrain-finetune不匹配
  • 可以对序列的概率分布进行建模,避免了独立性假设
  • 探索到更长距离


0 XLNet 创新点

  • PLM

  • Two-Stream self-attention(与PLM相辅相成)

    query stream , content stream

    核心是target-aware Representations,引入了target position zt

  • 引入transformer-xl模型(以下简称txl)

    • segment recurrence mechanism

    • relative positional encoding


1 三种语言模型

1.1 AR——自回归语言模型

对于一个给定的序列 x=[x1,⋯,xT],自回归语言模型致力于对该序列的概率分布进行估计。通俗来讲,就是根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行。GPT 就是典型的自回归语言模型。

具体的,利用乘法公式对原始序列的似然函数进行分解
在这里插入图片描述
可以通过极大似然来进行预训练:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kAqyJC5m-1583239177056)(C:\Users\changreal\AppData\Roaming\Typora\typora-user-images\image-20200303132132301.png)]

缺点:不是双向

1.2 AE——去噪自编码语言模型(DAE, denoising auto-encoding)

以BERT为首,核心:reconstruct the original data from corrupted input 。做法是将部分待预测词替换为 MASK,通过建模双向语境的信息,来预测原来的词语:
在这里插入图片描述
优点:融入双向语言模型,同时看到被预测单词的上文和下文

缺点

  1. 独立性假设(independence assumption)。上式使用了 ≈符号,因为 AE 语言模型不是对原始的序列分布进行建模,没有使用乘法公式。BERT 对 mask 掉的目标单词分别进行预测,使用了独立性假设,即待预测的所有 MASK token 在未 mask 序列的条件下是独立的。(xlnet认为他们是有关系的)

  2. pretrain-finetune 不匹配(discrepancy)

1.3 PLM——乱序语言模型

乱序语言模型使用一个序列的所有可能排序方式来构建一个 AR 语言模型。

理论上,如果模型的参数在所有的顺序中共享,那么模型就能学到从所有位置收集上下文信息。乱序语言模型目标表示如下,其中g函数和zt后面会说,并且后面目标会进一步改进为局部预测

在这里插入图片描述

乱序语言模型使用的是原始位置的位置编码,而不是调整了原来句子的顺序,这得益于 Transformer 的 mask 机制来实现。实现的话要配合后面说到的双通道自注意力流,query流就是代替Bert的[mask] [2],只保留位置信息。为了记录位置信息,使用relative positional encoding

XLNet只是扔了表面的[Mask]占位符号,内部还是引入Query流来忽略掉被Mask的这个单词。和Bert比,只是实现方式不同而已。

模型图例

img

优点

  1. 捕获双向信息(AE优点)
  2. 自然的避免了独立性假设、pretrain-finetune 不匹配的问题。(AR优点,AE缺点)
  3. 模型的参数在所有的顺序中共享

2 Two-Stream Self-Attention 双通道自注意力

2.1 结合PLM

上面说的PLM思想,难点在于具体怎么实现上述思想。实际上不能去排列组合原始输入,因为Fine-tuning阶段也不可能也去排列组合原始输入,因此,可以在Transformer部分做些工作,来达成目标。

由此,XLNet采取了Attention掩码的机制 (把其它没有被选到的单词Mask掉,不让它们在预测单词Ti的时候发生作用,看着就类似于把这些被选中的单词放到了上文Context_before的位置了),即在输入侧维持表面的X句子单词顺序,但在Transformer内部,看到的已经是被重新排列组合后的顺序,关键就是那个掩码矩阵

双流自注意力机制就是实现这个思想的具体方式。得益于 Transformer 的 mask机制,XLNet只是扔了表面的[Mask]占位符号,内部还是引入Query流来忽略掉被Mask的这个单词[2]。和Bert比,只是实现方式不同而已。

想要实现乱序的语言模型,如果直接对每个排序方式构建普通的 Transformer,并不能达到效果。原因如下。
假设我们需要预测下一个 token,
在这里插入图片描述
hθ(xZ<t) 并没有依赖于要预测的内容的位置信息zt,乱序语言模型的分解顺序是随机的,因此无论预测目标的位置在哪里,因式分解后得到的所有情况都是一样的,并且transformer的权重对于不同的情况是一样的,因此无论目标位置怎么变都能得到相同的分布结果,这是不合理的。

因此需要修改预测next-token distribution的公式,也就是引入target position zt

2.2 双流Attention

需要建模的两种 token 为:

  1. xzt ,此时只能使用位置信息 zt而不能使用内容信息xzt ,否则就暴露标签了;

  2. xxj ,j>t。对于后面的 token,需要使用完全的上下文内容信息

因此,用到了两种hidden representation,一个包含了内容信息,一个只包含位置信息:

  • content representation(与标准transformer是相同的)

  • query representation就是用来代替Bert的那个[Mask]标记的

对于 self-attention 的后续层 m=1,…,M,两个表示分别按照下式进行更新:
在这里插入图片描述
在 fine-tuning 阶段,直接将 query stream 去掉。

2.3 局部预测

由于使用了乱序的语言模型,部分出现在排列前部分的 token 的上下文信息很弱,导致增加了模型优化的困难度、收敛慢。因此在一个排列中,我们选择只预测后部分的一些 token。对于一个排列,将对目标子序列进行预测,因为其有当前排列下的最长上下文信息
在这里插入图片描述
使用超参数 K 来决定目标子序列的比例.在这里插入图片描述由图看出,K越大,划分的子序列也越长。

xlnet认为哪怕是局部预测,也能获取到target tokens的之间的关系(因为没有bert的假设独立性),尽管张俊林认为这不重要。

3 引入Transformer-xl

我们可以将 XLNet 看成是不同排列下多个 Transformer-XL 的并行

预训练的时候,对于输入的sequence,就已起作用了。fine-tune的时候当然也有。
在这里插入图片描述
segment循环机制

从而使该segment可以使用上一段segment的内容流hs,并且这个attention更新与乱序后的上个segmentZ无关。
在这里插入图片描述
因此该机制的引入,也无需知道上一段的乱序信息。query流注意力更新里的h同理。

相对位置编码

如上文里,一段序列中位置 zt的位置编码,相对位置编码在不同排列方式间保持一致,不随排列方式的变化而变化。

4 Multiple Segments与relative segment encodings

预训练的时候,把2个segment看作一个sequence 运行PLM,和BERT的输入格式一样:[CLS, A, SEP, B, SEP],但没使用NSP。

在 fine-tuning 阶段,有很多任务是需要输入多 segments 的,如双句分类、阅读理解、智能问答等。传统的 BERT 直接使用了绝对编码,即将 eA 与 eB 直接赋值给句子内的每个 token。

把txl的relative encodings也拓展到segments上,我们对于 segments 进行相对编码。只关心两个位置是不是属于同一个segment,sij等于S+或S-,而不是考虑他们来自哪个segment。这是核心。

从而得到一个attention weight,
在这里插入图片描述
与传统的transformer的weight相加从而得到最终的attention weight.RSE提供了finetune任务有多于2个输入segments上的可能性。

5 实验

部分实验方法:

Since the recurrence mechanism is introduced, they use use a bidirectional data input pipeline.

finetune时,span-based prediction

XLNet vs BERT(使用同样数据集)
在这里插入图片描述
XLNet vs RoBERTa (XLNet用全部数据集)
在这里插入图片描述

在这里插入图片描述

6 其他补充

关于mask单词独立性问题

张俊林说:XLNet说的,Bert里面被Mask掉单词的相互独立问题,其实是不重要的。因为XLNet在内部Attention Mask的时候,也会Mask掉一定比例的上下文单词,只要有一部分被Mask掉的单词,其实就面临这个问题。而如果训练数据足够大,其实不靠当前这个例子,靠其它例子,也能弥补被Mask单词直接的相互关系问题,因为总有其它例子能够学会这些单词的相互依赖关系。

关于MASK

如图是单向语言模型的Mask方式,可见是一个下三角。Attention矩阵的每一行事实上代表着输出,而每一列代表着输入,而Attention矩阵就表示输出和输入的关联。

XLNet是乱序语言模型,它跟语言模型一样,都是做条件概率分解,但是乱序语言模型的分解顺序是随机的:
在这里插入图片描述
任意一种“出场顺序”都有可能。原则上来说,每一种顺序都对应着一个模型,所以原则上就有n!个语言模型。基于Transformer的模型,则可以将这所有顺序都做到一个模型中去!

以“北京欢迎你”的生成为例,假设随机的一种生成顺序为**“< s > → 迎 → 京 → 你 → 欢 → 北 → < e >**”,那么我们只需要用下图中第二个子图的方式去Mask掉Attention矩阵,就可以达到目的了:
在这里插入图片描述
直观来看,这就像是把单向语言模型的下三角形式的Mask“打乱”了。

也就是说,实现一种顺序的语言模型,就相当于将原来的下三角形式的Mask以某种方式打乱。

训练方式,就是输入的不仅只有token本身,还包括token所在的位置id,即会有个词序的position embedding会加入到序列输入上来。

参考

  1. 论文地址:https://arxiv.org/pdf/1906.08237.pdf
  2. 张俊林XLNet和Bert讲解:https://zhuanlan.zhihu.com/p/70257427
  3. 超棒的博客:https://suixinblog.cn/2019/11/xlnet.html
  4. 博客2:https://blog.csdn.net/u012526436/article/details/93196139
  5. 关于mask的讲解,特别好:https://spaces.ac.cn/archives/6933
发布了63 篇原创文章 · 获赞 13 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/changreal/article/details/104640786