Objective: Permutation Language Modeling
Incorporating Ideas from Transformer-X
Comparison with Language Model
Pretraining and Implementation
XLNet:
XLNet 的核心思想:PermutationLM 使用双向上下文 + Transformer-XL 对架构进行改进。
Bert在预训练阶段的两个问题:
- 自编码语言模型在预训练过程中会使用 MASK 符号,但在下游 NLP 任务中并不会使用,所以导致预训练和finetune不匹配;
- BERT 假设要预测的词之间是相互独立的,即 Mask 之间相互不影响。(独立性假设)
由于意识到BERT 这种自编码模型强大的理解能力,本质上是由于同时考虑了上下文信息,如何优化自回归模型使其也拥有在学习当前词时能结合上下文信息?
XLNet方法介绍:
首先,如上图,因为随机排列是带有位置信息的,所以扰乱词顺序并不影响句子的序列建模。如果我们知道所有词的内容及位置,那么是不是顺序的拆解句子就不那么重要了。相反这种随机 分解顺序还会构建双向语义;如上利用[语言]和[喜欢]预测[处理]就利用了上下文的词。
这理解起来其实也非常直观,如果我们知道某些词及词的位置,那么完形填空式地猜某个位置可能出现哪些词也是没问题的。此外,我们可以发现,这种排列语言模型就是传统自回归语言模型的推广,它将自然语言的顺序拆解推广到随机拆解。当然这种随机拆解要保留每个词的原始位置信息,不然就和词袋模型没什么差别了。
如果读者了解一些 Transformer,那么就会知道某个 Token 的内容和位置向量在输入到模型前就已经加在一起了,后续的隐向量同时具有内容和位置的信息。但杨植麟说:「新任务希望在预测下一个词时只能提供位置信息,不能提供内容相关的信息。因此模型希望同时做两件事,首先它希望预测自己到底是哪个字符,其次还要能预测后面的字符是哪个。」
如果模型预测当前词,则只能使用位置向量;如果模型预测后续的词,那么使用位置加内容向量。因此这就像我们既需要标准 Transformer 提供内容向量,又要另一个网络提供对应的位置向量。
调整Transformer 以适应任务提出了 Two-Stream Self-Attention,它通过构建两条路径解决这个条件句。如上图所示为 Two-Stream 的结构,其中左上角的 a 为 Content 流,左下角的 b 为 Query 流,右边的 c 为排列语言模型的整体建模过程。
在 Content 流中,它和标准的 Transformer 是一样的,第 1 个位置的隐藏向量 h_1 同时编码了内容与位置。在 Query 流中,第 1 个位置的隐向量 g_1 只编码了位置信息,但它同时还需要利用其它 Token 的内容隐向量 h_2、h_3 和 h_4,它们都通过 Content 流计算得出。因此,我们可以直观理解为,Query 流就是为了预测当前词,而 Content 流主要为 Query 流提供其它词的内容向量。
在 finetuning 时可以丢掉 query representation,使用 content representation 作为标准 Transformer。
由于不同排列导致的 Language Modeling 优化问题,这里只选择预测最后一个 token,具体是将 z 分为目标和非目标两部分 (Partial Prediction):