BERT 练习时将部分单词 mask 起来,使模型能够运用语句双向的信息,在许多 NLU 使命上取得很好的作用。可是 BERT 疏忽了 mask 单词之间的联系,且微调进程与预练习进程不一致 (微调时没有 mask 的单词)。XLNet 选用了 PLM (Permutation Language Model) ,将语句随机摆放,然后用自回归的办法练习,然后获得双向信息并且能够学习 token 之间的依靠联系。别的 XLNet 运用了 Transformer-XL,运用了更宽广的上下文信息。

1.前语

XLNet 论文中首先提出了一种比较有意思的观念,将当时预练习模型分为了两类 AR (Auto Regression,自回归) 和 AE (Auto Encoder,自编码器)。

GPT 便是一种 AR 办法,不断地运用当时得到的信息猜测下一个输出 (自回归)。而 BERT 是一种 AE 办法,将输入语句的某些单词 mask 掉,然后再经过 BERT 复原数据,这一进程相似去噪自编码器 (Denoising AutoEncoder,DAE)。不熟悉 GPT 和 BERT 的童鞋能够参阅前面的文章,《OpenAI GPT 和 GPT2 模型详解》和《彻底了解 Google BERT 模型》。

AR 的办法能够更好地学习 token 之间的依靠联系,而 AE 的办法能够更好地运用深层的双向信息。因而 XLNet 期望将 AR 和 AE 两种办法的长处结合起来,XLNet 运用了 Permutation Language Model (PLM) 完成这一意图。

Permutation 指摆放组合的意思,XLNet 将语句中的 token 随机摆放,然后选用 AR 的方法猜测结尾的几个 token。这样一来,在猜测 token 的时分就能够一起运用该 token 双向的信息,并且能学到 token 间的依靠,如下图所示。

XLNet_permutation_example.png

接下来介绍 XLNet 中的完成细节,其中 XLNet 为了完成 PLM,提出了 Two-Stream Self-Attention 和 Partial Prediction。别的 XLNet 还运用了 Transformer-XL 中的 Segment Recurrence Mechanism 和 Relative Positional Encoding,不熟悉 Transformer-XL 的童鞋能够参阅前面的文章,《Transformer-XL 言语模型》。

2.Permutation Language Model

PLM (Permutation Language Model) 是 XLNet 的中心思维,首先将语句的 token 随机摆放,然后选用 AR 的方法猜测语句结尾的单词,这样 XLNet 即可一起具有 AE 和 AR 的优势。

2.1 PLM 介绍

XLNet 中经过 Attention Mask 完成 PLM,而无需真正修改语句 token 的次序。例如本来的语句是 [1,2,3,4],如果随机生成的序列时 [3,2,4,1],则输入到 XLNet 的语句仍然是 [1,2,3,4],可是掩码需求修改成下图。

Query_mask_example.png

图中的掩码矩阵,赤色表明不讳饰,白色表明讳饰。第 1 行表明 token 1 的掩码,能够看到,1 是语句的最后一个 token,因而能够看到之前的一切 token (3,2,4)。3 是语句的第一个 token,看不到语句的任何信息,因而第 3 行都是白色的 (表明讳饰)。

2.2 Two-Stream Self-Attention

Two-Stream 概念

XLNet 打乱了语句的次序,这时在猜测的时分 token 的方位信息会非常重要,一起在猜测的时分也必须将 token 的内容信息讳饰起来 (否则输入包括了要猜测的内容信息,模型就无法学到常识)。也便是说 XLNet 需求看到 token 的方位信息,可是又不能看到 token 的内容信息,因而 XLNet 选用了两个 Stream 完成这一意图:

  • Query Stream,关于每一个 token,其对应的 Query Stream 只包括了该 token 的方位信息,留意是 token 在原始语句的方位信息,不是重新摆放的方位信息。
  • Content Stream,关于每一个 token,其对应的 Content Stream 包括了该 token 的内容信息。

Query Stream 核算

Query Stream 用 g 表明,Content Stream 用 h 表明,运用 Query Stream 对要猜测的方位进行猜测的时分,Q (Query) 向量是用 g 核算得到的,包括该方位的方位信息,而 K (Key) 和 V (Value) 是用 h 核算的,包括其他 token 的内容信息。下图展现了怎么经过当时层的 g 核算下一层 g 的进程,图中的摆放是 [3,2,4,1],核算的 token 是 1。

Query_stream.png

能够看到在核算 token 1 的 Q 向量时,只运用了 token 1 的 Query Stream g,即模型只得到 token 1 的方位信息。而向量 K,V 运用 token 3, 2, 4 进行核算,所以模型能够得到 token 3, 2, 4 的内容信息。因为 token 1 是摆放 [3,2,4,1] 的最后一位。这一个进程的掩码矩阵和上一节的是相同的 ,对角线上都为白色,即讳饰当时猜测方位的内容信息 h

Query_mask.png

Content Stream 核算

Content Stream 包括了 token 的内容信息,因为 XLNet 的层数许多,需求将 token 的内容传递到下一层。这一层的 Q, K, V 都是运用 h 核算的。Content Stream 的核算如下图所示。

Content_stream.png

能够看到,在核算下一层的 h1 时,也会运用 token 1 当时的内容信息,这样就能够将 token 的内容传递到下一层,可是留意 XLNet 在猜测时只是用 g (Query Stream)。核算 Content Stream 时分的掩码矩阵如下图所示。

Content_mask.png

和 Query Stream 的掩码矩阵差异在于对角线,Content Stream 不讳饰对角线,使得当时 token 的信息能够传递到下一层。

Query Stream 和 Content Stream 组合

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

Query_Content_Stream.png

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

2.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。

3.XLNet 优化技巧

3.1 Transformer-XL

XLNet 运用了 Transformer-XL 中的 Segment Recurrence Mechanism (段循环) 和 Relative Positional Encoding (相对方位编码) 进行优化。

Segment Recurrence Mechanism 段循环的机制会将上一段文本输出的信息保存下来,用于当时文本的核算,使模型能够具有更宽广的上下文信息。

在引进上一段信息后,可能会有两个 token 具有相同的方位信息,例如上一段的第一个单词和当时段的第一个单词方位信息都是相同的。因而 Transformer-XL 选用了 Relative Positional Encoding (相对方位编码) ,不运用固定的方位,而是选用单词之间的相对方位进行编码。在之前的文章《Transformer-XL 言语模型》中有比较详细的介绍,感兴趣的童鞋能够参阅一下。

XLNet 运用了 Transformer-XL 后如下图所示。mem 表明的便是前一个 XLNet 段的内容信息,而 XLNet 中输入的 Query Stream 为 w,保存方位信息,选用的是 Relative Positional Encoding。

XLNet_segment.png

3.2 Relative Segment Encodings

XLNet 期望像 BERT 相同选用 [A, SEP, B, SEP, CLS] 的形式处理语句使命,在 BERT 中有两个表征向量 EAEB 分别表明语句 A 和 B。可是 XLNet 选用 Transformer-XL 的段循环机制后会出现问题,两个段都有语句 A 和 B,则两个语句 A 属于不同的段,可是却会有相同的 Segment 向量。

XLNet 提出了 Relative Segment Encodings,关于每一个 attention head 都增加 3 个可练习的向量 s+, s-, b,然后运用以下公式核算 attention score。

Relative_segment_encoding.png

其中 q 便是 Query 向量,这个核算得到的 attention score 会加到本来的 attention score 上,再核算 softmax。Relative Segment Encodings 加上了一个偏置向量 b,一起 Relative Segment Encodings 也能够用于一些超越两段输入语句的使命上。

4.总结

XLNet 的中心思维是 PLM,摆放本来的语句,然后猜测结尾的单词。这样能够学习到单词之间的依靠联系,而且能够运用 token 前后向的信息。

XLNet PLM 的完成需求用到 Two-Stream Self-Attention,包括两个 Stream,Query Stream 用于猜测,只包括当时方位的方位信息。而 Content Stream 保存了 token 的内容。

XLNet 还运用了 Transformer-XL 的优化方法。

5.参阅文献

  • XLNet: Generalized Autoregressive Pretraining for Language Understanding