数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
九、XLNet [2019]
无监督表示学习
unsupervised representation learning
在自然语言处理领域取得了巨大的成功。通常情况下,这些方法首先在大规模的无标签文本语料库中预训练神经网络,然后在下游任务中对模型或representation
进行微调。在这个共同的high-level
思想下,人们在各种文献中探讨了不同的无监督预训练目标unsupervised pretraining objective
。其中,自回归autoregressive: AR
语言建模language modeling
和自编码autoencoding: AE
是两个最成功的预训练目标。自回归语言建模旨在用自回归模型估计文本语料的概率分布。具体而言,给定一个文本序列
$ \mathbf x = (x_1,\cdots,x_T) $ ,自回归语言建模将likelihood
分解为前向乘积forward product
$ p(\mathbf x) = \prod_{t=1}^Tp(x_t\mid \mathbf x_{\lt t}) $ 或后向乘积backward product
$ p(\mathbf x)= \prod_{t=T}^1 p(x_t\mid \mathbf x_{\gt t}) $ 。一个参数化的模型(例如神经网络)被训练来建模每个条件分布。由于自回归语言模型只被训练来编码单向上下文(前向或后向),所以它不能有效地建模深度双向上下文deep bidirectional context
。相反,下游的语言理解任务往往需要双向的上下文信息。这就造成了自回归语言建模和有效的预训练之间的gap
。 $ \mathbf x_{\lt t} $ 为文本序列 $ \mathbf x $ 前 $ t-1 $ 个位置的子序列, $ \mathbf x_{\gt t} $ 为文本序列 $ \mathbf x $ 后 $ T-t $ 个位置的子序列。相比之下,基于自编码的预训练并不进行显式的密度估计
density estimation
( $ p(\mathbf x) $ 就是文本序列 $ \mathbf x $ 的概率密度),而是旨在从破坏的输入中重建原始数据。一个值得注意的例子是BERT
,它一直是SOTA
的预训练方法。给定输入的token
序列,其中输入的某一部分token
被一个特殊的符号[MASK]
所取代,模型被训练为从破坏的版本中恢复原始token
。由于任务目标不包含密度估计,所以BERT
可以利用双向上下文来重建原始数据。作为一个直接的好处,这弥补了上述自回归语言建模中的bidirectional information gap
,导致了性能的提高。然而:BERT
在预训练时使用的[MASK]
等人造符号在微调时不存在于真实数据中,从而导致了pretrain-finetune
的不一致。- 此外,由于
predicted token
在输入中被masked
了,BERT
不能像自回归语言建模那样使用乘积规则product rule
建立联合概率模型。换句话说,BERT
假设在给定unmasked token
的条件下,predicted token
之间是相互独立的。这是过于简化的,因为在自然语言中普遍存在着高阶的、长程的依赖性。
面对现有语言预训练目标的优点和缺点,在论文
《XLNet: Generalized Autoregressive Pretraining for Language Understanding》
工作中,作者提出了一种广义的自回归方法,即XLNet
。XLNet
同时利用了自回归语言建模和自编码的优点,并避免了它们的局限。- 首先,
XLNet
不是像传统的自回归模型那样使用固定的前向分解顺序forward factorization order
或后向分解顺序backword factorization order
,而是最大化关于分解顺序的所有可能的排列组合中,序列的期望对数似然expected log likelihood
。由于排列操作permutation operation
,每个位置的上下文可以同时由左右两侧的token
组成。在预期中,每个位置学会利用来自所有位置的上下文信息,即捕获双向的上下文。 - 其次,作为一个广义的自回归语言模型,
XLNet
不依赖于数据破坏data corruption
。因此,XLNet
不会受到BERT
所带来的pretrain-finetune discrepancy
的影响。同时,自回归目标还提供了一种自然的方法,可以使用乘积法则对predicted token
的联合概率进行分解,消除了BERT
中的独立性假设independence assumption
。
除了新颖的预训练目标外,
XLNet
还改进了预训练的架构设计。- 受自回归语言建模最新进展的启发,
XLNet
将Transformer-XL
的segment
递归机制和相对编码方案relative encoding scheme
融合到预训练中。根据经验,特别是在涉及较长文本序列的任务中,这会提高下游任务的性能。 - 简单直接地将
Transformer(-XL)
架构应用于permutation-based
的语言建模是行不通的,因为分解顺序是任意的、目标是模糊ambiguous
的。作为一个解决方案,作者建议重新参数化reparameterize
Transformer(-XL)
网络从而消除模糊性ambiguity
。
根据经验,
XLNet
在18
个任务上取得了SOTA
的结果,即:7
个GLUE
语言理解任务,3
个阅读理解任务(包括SQuAD
和RACE
)、7
个文本分类任务(包括Yelp
和IMDB
)、以及ClueWeb09-B
文档排序任务。在一组公平的比较实验下,XLNet
在多个benchmark
上一直优于BERT
。相关工作:
permutation-based
的自回归建模的思想已经在《Neural autoregressive distribution estimation》
和《Made: Masked autoencoder for distribution estimation》
中进行了探讨,但有几个关键的区别。以前的模型是无序orderless
的,而XLNet
基本上是顺序感知order-aware
的(带positional encoding
)。这对语言理解language understanding
很重要,因为无序模型会退化为bag-of-word
,缺乏基本的表达能力。上述差异源于动机
motivation
的根本差异:以前的模型旨在通过在模型中加入 "无序" 的归纳偏置inductive bias
来改善密度估计,而XLNet
的动机是使自回归语言模型学习双向上下文。
9.1 模型
9.1.1 背景
这里我们首先针对语言预训练
language pretraining
来回顾并比较传统的自回归语言建模和BERT
。给定一个文本序列
$ \mathbf x = [x_1,\cdots,x_T] $ ,自回归语言模型通过最大化前向自回归分解forward autoregressive factorization
下的对数似然likelihood
来进行预训练:其中:
$ \mathbf x_{\lt t}=\mathbf x_{1:t-1}=[x_1,\cdots,x_{t-1}] $ 为 $ \mathbf x $ 的前 $ t-1 $ 个位置的子序列,作为上下文。 $ \mathbf{\vec h}_\theta(\mathbf x_{1:t-1}) $ 为通过神经网络模型(如RNN
或Transformer
)产生的context representation
, $ \theta $ 为模型的参数。 $ \mathbf{\vec e}(x) $ 为 $ x $ 的embedding
。 $ \mathcal V $ 为vocabulary
。
相比之下,
BERT
是基于降噪自编码denoising auto-encoding
的。具体来说,对于一个文本序列 $ \mathbf x = [x_1,\cdots,x_T] $ ,BERT
首先通过随机设置 $ \mathbf x $ 中的一部分(例如15%
)的token
为特殊符号[MASK]
从而构建一个破坏的版本 $ \hat{\mathbf x} $ 。令这些masked token
记做 $ \bar {\mathbf x} $ ,训练目标是根据 $ \hat{\mathbf x} $ 重建 $ \bar {\mathbf x} $ :其中:
$ m_t\in \{0,1\} $ 表示 $ x_t $ 是否被masked
。 $ \mathbf H_\theta $ 是一个Transformer
,它将一个长度为T
的文本序列 $ \hat{\mathbf x} $ 映射到一个hidden vector
序列: $ \mathbf H_\theta(\mathbf x) = \left[\mathbf {\vec h}_{1,\theta}(\mathbf x),\cdots,\mathbf {\vec h}_{T,\theta}(\mathbf x)\right] $ 。 $ \theta $ 为Transformer
的参数, $ \mathbf {\vec h}_{t,\theta}(\mathbf x) $ 为位置 $ t $ 的hidden vector
。
可以看到:在自回归语言建模中,
context representation
为 $ \mathbf{\vec h}_\theta(\mathbf x_{1:t-1}) $ ,即模型在位置 $ t $ 仅能看到前面 $ t-1 $ 个位置的token
(即, $ \mathbf x_{1:t-1} $ );在BERT
中,context representation
为 $ \mathbf {\vec h}_{t,\theta}(\mathbf x) $ ,即模型在位置 $ t $ 能够看到所有的token
(即, $ \mathbf x $ )。两种预训练目标的优点和缺点比较如下:
独立性假设
Independence Assumption
:正如 $ \simeq $ 符号所强调的那样,BERT
基于独立性假设来分解联合条件概率 $ p_\theta\left(\bar{\mathbf x}\mid \hat{\mathbf x}\right) $ ,即,所有mask token
$ \bar{\mathbf x} $ 都是独立重建的。相比之下,自回归语言建模目标使用普遍适用的乘积规则对
$ p_\theta(\mathbf x) $ 进行分解,而没有这种独立性假设。输入噪声
Input Noise
:BERT
的输入包含像[MASK]
这样的人工符号,而这些符号在下游任务中从未出现过,这就造成了pretrain-finetune discrepancy
。像BERT
论文中那样用原始token
替换[MASK]
并不能解决问题,因为原始token
只能以很小的概率被使用,否则 $ \max_\theta \log p_\theta\left(\bar{\mathbf x}\mid \hat{\mathbf x}\right) $ 是没有意义的优化(因为要预测的标签就在输入中)。相比之下,自回归语言建模并不依赖于任何输入破坏
input corruption
,因此不会受到这个问题的影响。上下文不一致
Context Dependency
:自回归representation
$ \mathbf{\vec h}_\theta(\mathbf x_{1:t-1}) $ 仅以位置 $ t $ 之前的token
作为条件(即,左侧的token
)。相比之下,
BERT representation
$ \mathbf {\vec h}_{t,\theta}(\mathbf x) $ 可以同时获得两侧的上下文信息。因此,BERT
目标允许对模型进行预训练以更好地捕捉双向的上下文。
9.1.2 目标:排列语言建模
根据上面的比较,自回归语言模型和
BERT
拥有各自独特的优势。一个自然的问题是:是否存在一种预训练目标,既能带来两者的优点又能避免它们的缺点?借用
orderless NADE
(《Neural autoregressive distribution estimation》
)的思路,我们提出了排列语言建模permutation language modeling
目标,它不仅保留了自回归模型的优点,而且还允许模型捕获双向上下文。具体而言,对于一个长度为
$ T $ 的文本序列 $ \mathbf x $ ,有 $ T! $ 种不同的顺序来进行有效的自回归分解autoregressive factorization
。直观地说,如果模型参数在所有分解顺序中都是共享的,那么在预期中,模型将学会从两侧的所有位置收集信息。为了形式化这个思想,令
$ \mathcal Z_T $ 是长度为 $ T $ 的索引序列 $ [1,2,\cdots,T] $ 的所有可能的排列的集合。我们用 $ z_t $ 和 $ \mathbf z_{\lt t} $ 来表示一个排列 $ \mathbf z \in \mathcal Z_T $ 的第 $ t $ 个元素和前 $ t-1 $ 个元素。那么,我们提出的排列语言建模目标可以表示为:基本上,对于一个文本序列
$ \mathbf x $ ,我们一次采样一个分解顺序 $ \mathbf z $ ,并根据分解顺序对likelihood
$ p_\theta(\mathbf x) $ 进行分解。由于相同的模型参数在训练期间在所有的分解顺序之间都是共享的,在预期中, $ x_t $ 已经看到了序列中每一个可能的元素 $ x_i\ne x_t $ ,因此能够捕获到双向上下文。此外,由于这个目标适合于自回归框架,它自然避免了前面讨论的独立假设和pretrain-finetune discrepancy
。前向自回归分解和后向自回归分解分别采用了两种特殊的分解顺序:
$ \mathbf z=[1,2,\cdots,T], \mathbf z=[T,T-1,\cdots,1] $ 。Permutation
的备注:所提出的目标只是排列分解顺序factorization order
,而不是序列顺序sequence order
。换句话说,我们保持原始的序列顺序,使用对应于原始序列的positional encoding
,并依靠Transformer
中恰当的attention mask
来实现分解顺序的排列。请注意,这种选择是必要的,因为模型在微调期间只会遇到具有自然顺序的文本序列。XLNet
在实现过程中并未采样 $ \mathbf z $ ,而是通过生成合适的attention mask
来达到采样 $ \mathbf z $ 的效果。为了提供一个总体概览,我们在下图中展示了一个例子:给定相同的输入序列
$ \mathbf x $ ,但是以不同的分解顺序来预测token
$ x_3 $ 。mem
表示Transformer-XL
的memory
机制。
9.1.3 架构:双流自注意力
虽然排列语言建模目标具有理想的属性,但是标准
Transformer
的朴素实现naive implementation
可能无法工作。为了说明这个问题,假设我们使用标准的softmax
公式对next-token
分布 $ p_\theta(X_{z_t}\mid \mathbf x_{\mathbf z_{\lt t}}) $ 进行参数化parameterize
,即:其中
$ \mathbf{\vec h}_\theta(\mathbf x_{\mathbf z_{\lt t}}) $ 表示由共享的Transformer
网络生成的 $ \mathbf x_{\mathbf z_{\lt t}} $ 的hidden representation
(通过适当的掩码得到)。现在注意到:
representation
$ \mathbf{\vec h}_\theta(\mathbf x_{\mathbf z_{\lt t}}) $ 并不依赖于它将预测哪个位置,即 $ z_t $ 的值。因此,无论目标位置如何,都会预测出相同的分布,这就无法学习到有用的representation
。为了避免这个问题,我们建议重新参数化next-token
分布,使其感知到目标位置:其中
$ \mathbf{\vec g}_\theta(\mathbf x_{\mathbf z_{\lt t}},z_t) $ 表示一种新的representation
类型,它还将目标位置 $ z_t $ 作为输入。原始的
Transformer
没有这个问题,因为Transformer
输入序列的分解顺序是固定的( $ \mathbf z=[1,2,\cdots,T] $ ),第 $ t $ 个要预测的token
就是位于序列中的位置 $ t $ 。但是,在排列语言建模目标,由于分解顺序是随机的,因此第
$ t $ 个要预测的token
的位置不确定(可能是原始序列中第一个位置、也可能是原始序列中最后一个位置)。标准的语言模型参数化失败的例子:考虑两个不同的排列
$ \mathbf z^{(1)} $ 和 $ \mathbf z^{(2)} $ ,并且它们之间满足:如果采用标准
Transformer
的朴素实现,则有:从效果上看,两个不同的目标位置
$ i $ 和 $ j $ 共享完全相同的模型预测。然而,这两个位置的ground-truth
分布应当是不同的。双流自注意力
Two-Stream Self-Attention
:虽然target-aware representation
的思想消除了target prediction
中的模糊性ambiguity
,但如何形式化 $ \mathbf{\vec g}_\theta(\mathbf x_{\mathbf z_{\lt t}},z_t) $ 仍然是一个困难的问题。我们提出 "站" 在目标位置 $ z_t $ ,并依赖位置 $ z_t $ 通过注意力从上下文 $ \mathbf x_{\mathbf z_{\lt t}} $ 收集信息。目标位置
$ z_t $ 代表了目标token
位于原始序列中的位置(而不是排列之后的位置,排列之后的位置就是 $ t $ )。为了使这个参数化
parameterization
发挥作用,有两个要求在标准的Transformer
架构中是矛盾的:- 为了预测
token
$ x_{z_t} $ , $ \mathbf{\vec g}_\theta(\mathbf x_{\mathbf z_{\lt t}},z_t) $ 应该只使用位置 $ z_t $ 而不是内容 $ x_{z_t} $ ,否则任务目标就变得非常简单。 - 为了预测
$ j>t $ 的其他token
$ x_{z_j} $ , $ \mathbf{\vec g}_\theta(\mathbf x_{\mathbf z_{\lt t}},z_t) $ 也应该编码内容 $ x_{z_t} $ 从而提供完整的上下文信息。
为了解决这样的矛盾,我们建议使用两组
hidden representation
而不是一组:content representation
$ \mathbf{\vec h}_\theta(\mathbf x_{\mathbf z_{\le t}}) $ ,或缩写为 $ \mathbf{\vec h}_{z_t} $ ,它的作用与Transformer
中的标准hidden state
类似。这个representation
同时编码了上下文和 $ x_{z_t} $ 本身。注意,这里是小于等于号:
$ \mathbf z_{\le t} $ 。query representation
$ \mathbf{\vec g}_\theta(\mathbf x_{\mathbf z_{\lt t}},z_t) $ ,或缩写为 $ \mathbf{\vec g}_{z_t} $ ,它只能访问上下文信息 $ \mathbf x_{\mathbf z_{\lt t}} $ 和位置 $ z_t $ ,但不能访问内容 $ x_{z_t} $ ,如前所述。
在计算上:
- 第一层查询流
query stream
以trainable vector
来初始化(即, $ \mathbf{\vec g}_i^{(0)}=\mathbf{\vec w} $ )。 - 而第一层内容流
content stream
被设置为相应的word embedding
(即, $ \mathbf{\vec h}_i^{(0)} = \mathbf{\vec e}(x_i) $ )。
对于每个自注意力层
$ m=1,2,\cdots,M $ ,两个表征流representation stream
用一组共享的参数进行更新:其中:
$ \mathbf Q,\mathbf K,\mathbf V $ 分别表示注意力操作中的query, key, value
。注意:
query stream
中的key, value
使用 $ \mathbf z_{\lt t} $ (小于号);content stream
中的key, value
使用 $ \mathbf z _{\le t} $ (小于等于号)。content representation
的更新规则与标准的自注意力完全相同,因此在微调过程中,我们可以简单地放弃query stream
,将content stream
作为普通的Transformer(-XL)
。最后,我们可以使用最后一层的
query representation
$ \mathbf{\vec g}_{z_t}^{(M)} $ 来计算:因为
query representation
包含了位置 $ z_t $ (而content representation
不包含 $ z_t $ ),因此使用query representation
来计算 $ p_\theta(X_{z_t} = x\mid \mathbf x_{\mathbf z_{\lt t}}) $ 。query representation
会利用content representation
来计算,而content representation
就是传统的自注意力机制而不会用到query representation
。- 为了预测
双流自注意力的示意图如下图所示,其中分解顺序为
3 -> 2 -> 4 -> 1
而当位置 $ t=4 $ ,即 $ z_t=1 $ 。图
(a)
:content stream
, $ \mathbf{\vec h}_1^{(0)} $ 为query
, $ \left\{\mathbf{\vec h}_1^{(0)},\mathbf{\vec h}_2^{(0)},\mathbf{\vec h}_3^{(0)},\mathbf{\vec h}_4^{(0)}\right\} $ 为key/value
。图
(b)
:query stream
, $ \mathbf{\vec g}_1^{(0)} $ 为query
, $ \left\{\mathbf{\vec g}_2^{(0)},\mathbf{\vec g}_3^{(0)},\mathbf{\vec g}_4^{(0)}\right\} $ 为key/value
。图
(c)
:在attention mask
中,第 $ i $ 行代表位置 $ i $ (原始序列的顺序)的mask
,白色代表不可见(掩码)、红色代表可见。query stream
无法看到当前位置的内容,因此相比conent stream
的attention mask
,query stream
的attention mask
掩码了对角线。这就是通过生成合适的
attention mask
来达到采样 $ \mathbf z $ 的效果。例如,
$ z_t = 1 $ (即attention mask
的第一行):- 由于
content stream
中它可以看到所有位置(包括它自己),因此attention mask
第一行全部是红色(可见)。 - 由于
query stream
中它可以看到除了自己之外的所有其它位置,因此attention mask
第一行除了第一个位置之外全部是红色。
- 由于
部分预测
Partial Prediction
:虽然排列语言建模目标有几个好处,但由于排列组合,它是一个更具挑战性的优化问题,并在实验中导致收敛缓慢。为了降低优化难度,我们选择仅预测分解顺序中的最后一批token
。正式地,我们把
$ \mathbf z $ 拆分成一个non-target
子序列 $ \mathbf z_{\le c} $ 和一个target
子序列 $ \mathbf z_{\gt c} $ ,其中 $ c $ 是拆分点。我们的目标是:给定non-target
子序列的条件下最大化target
子序列的对数似然log-likelihood
,即:注意:
$ \mathbf z_{\gt c} $ 被选为目标,因为在给定当前分解顺序 $ \mathbf z $ 的条件下,它拥有序列中最长的上下文。我们使用一个超参数
$ K $ ,使得大约 $ 1/K $ 的token
被选中从而用于预测,即 $ T/(T-c) \simeq K $ 。对于未被选择的token
,它们的query representation
不需要计算,这就节省了速度和内存。这里假设序列的长度为
$ T $ ,因此 $ \mathbf z\sim \mathcal Z_T $ 。对于有效长度较短的序列,用 $ |\mathbf z| $ 代替上式中的 $ T $ 。这里我们对所提出的排列语言建模目标进行了详细的可视化,包括
reusing memory
机制(又称递归机制)、如何使用注意力掩码来排列分解顺序、以及两个注意力流的区别。如Figure 3
和Figure 4
所示,给定当前位置 $ z_t $ ,注意力掩码由排列(或分解顺序) $ \mathbf z $ 决定,这样只有排列中 $ z_t $ 之前出现的token
$ z_i,i\lt t $ 才可以被关注。此外,比较
Figure 3
和Figure 4
,我们可以看到query stream
和content stream
是如何通过attention mask
在特定排列中工作的。主要的区别是:query stream
不能做自注意力、不能访问当前位置上的token
,而content stream
则执行正常的自注意力。
9.1.4 融合 Transformer-XL 的思想
由于我们的目标函数符合自回归框架,我们将
SOTA
的自回归语言模型Transformer-XL
纳入我们的预训练框架,并以它命名我们的方法(即,XLNet
)。我们融合了Transformer-XL
中的两项重要技术,即相对位置编码方案relative positional encoding scheme
、段递归机制segment recurrence mechanism
。如前所述,我们基于原始序列应用相对位置编码,这很直接。现在我们讨论如何将递归机制融合到所提出的
permutation setting
中,并使模型能够重用previous segments
的hidden state
。在不失一般性的情况下,假设我们有来自长序列 $ \mathbf s $ 的两个segment
,即 $ \tilde{\mathbf x} = \mathbf s_{1:T} $ , $ \mathbf x=\mathbf s_{T+1:2T} $ 。令 $ \tilde{\mathbf z} $ 和 $ \mathbf z $ 分别表示 $ [1,\cdots,T] $ 和 $ [T+1,\cdots,2T] $ 的排列。然后,基于排列 $ \tilde{\mathbf z} $ ,我们处理第一个segment
,然后为每个层 $ m $ 缓存得到的content representation
$ \tilde{\mathbf{\vec h}}^{(m)} $ 。然后,对于下一个segment
$ \mathbf x $ ,带有memory
的注意力机制可以写成:其中
$ [\cdot,\cdot] $ 表示沿着序列的维度拼接两个向量序列。注意,这里不用缓存
query representation
,因为只有content representation
才会被用来作为key
和value
。注意:
positional encoding
只取决于原始序列中的实际位置。因此,一旦得到representation
$ \tilde{\mathbf{\vec h}}^{(m)} $ ,上述的注意力更新就与 $ \tilde{\mathbf z} $ 无关。这允许在不知道前一个segment
的分解顺序的情况下缓存和复用memory
。在预期中,该模型学习利用上一个segment
的所有分解顺序的memory
。不管前一个
segment
的分解顺序如何,它始终位于当前segment
之前,因此当前segment
的任何位置都能看到所有的 $ \mathbf s_{1:T} $ 。query stream
也可以用同样的方法计算(只需要注意力机制中的修改key
和value
即可。)。最后,
Figure 2 (c)
展示了所提出的具有双流注意力的排列语言建模的概况。更详细的介绍参考Figure 3
和Figure 4
。
9.1.5 建模多个 Segment
许多下游任务都有多个
input segment
,例如,问答question answering: QA
中包含一个问题和一个上下文段落。我们现在讨论一下我们如何预训练XLNet
以便在自回归框架中对多个segment
进行建模。在预训练阶段,遵从BERT
,我们随机抽取两个segment
(可以来自同一上下文,也可以来自不同的上下文),并将两个segment
的拼接视为一个序列,以进行排列语言建模。我们仅复用属于同一上下文的memory
。具体而言,我们模型的输入与
BERT
类似:[A, SEP, B, SEP, CLS]
,其中"SEP"
和"CLS"
是两个特殊符号,"A"
和"B"
是两个segment
。尽管我们遵循two-segment
的数据格式,XLNet-Large
没有使用next sentence prediction
的目标,因为它在我们的消融研究中没有显示出一致的改进。注意,这里用于下游任务,即微调阶段。在预训练阶段,是没有多个
input segment
的,因为预训练没有next sentence prediction
目标。相对段编码
Relative Segment Encoding
:从结构上看,与BERT
在每个位置的word embedding
中增加一个绝对段嵌入absolute segment embedding
不同,我们从Transformer-XL
中扩展了relative encoding
的思想,也对segment
进行相对编码。注意,这里也是用于下游任务,即微调阶段。
给定序列中的一对位置
$ i $ 和 $ j $ ,如果 $ i $ 和 $ j $ 来自同一segment
,我们使用segment encoding
$ \mathbf{\vec s}_{i,j} = \mathbf{\vec s}_+ $ ;如果来自不同的segment
,则 $ \mathbf{\vec s}_{i,j} = \mathbf{\vec s}_\_ $ 。其中, $ \mathbf{\vec s}_+ $ 和 $ \mathbf{\vec s}_\_ $ 是每个注意力头attention head
的可学习模型参数。换句话说,我们仅考虑这两个位置是否在同一segment
内,而不是考虑它们来自哪个具体的segment
。这与relative encoding
的核心思想是一致的,即,只对位置之间的关系进行建模。理论上讲,对于
input segment
数量为2
的输入,relative encoding
和absolute encoding
的模型容量是相同的,都是两个待学习的embedding
参数。但是:- 二者的语义不同:
relative encoding
的embedding
空间编码了是否来自于同一个segment
;absolute encoding
的embedding
空间编码了每个绝对segment id
。 - 二者的用法不同:
relative encoding
用于计算relative
注意力系数,然后将这个系数添加到正常的注意力权重中;absolute encoding
直接添加到word embedding
从而直接计算注意力权重。
当位置
$ i $attend
位置 $ j $ 时(站在位置 $ i $ 的角度来看),segment encoding
$ \mathbf {\vec s}_{i,j} $ 被用来计算注意力权重 $ a_{i,j} =\left (\mathbf{\vec q}_i + \mathbf{\vec b}\right) ^\top \mathbf{\vec s}_{i,j} $ ,其中 $ \mathbf{\vec q}_i $ 是标准的注意力操作中的query
向量, $ \mathbf{\vec b} $ 是一个可学习的head-specific
的偏置向量bias vector
。最后,这个值 $ a_{i,j} $ 被添加到正常的注意力权重中。使用
relative segment encoding
有两个好处:首先,
relative encoding
的归纳偏置inductive bias
可以改善泛化性。其次,
relative encoding
为那些有两个以上input segment
的任务中进行微调提供了可能,而这是使用absolute segment encoding
所不能做到的。因为
absolute segment encoding
仅能编码训练期间看到的segment id
(即,segment id = A
、segment id = B
,这两个id
)。
- 二者的语义不同:
9.1.6 讨论和分析
a. 和 BERT 的比较
比较公式
$ \max_\theta \log p_\theta\left(\bar{\mathbf x}\mid \hat{\mathbf x}\right) $ 和 $ \max_{\theta} \mathbb E_{\mathbf z\sim \mathcal Z_T} \left[\log p_\theta(\mathbf x_{\mathbf z_{\gt c}}\mid \mathbf x_{\mathbf z_{\le c}})\right] $ ,我们发现BERT
和XLNet
都进行了部分预测,即仅预测序列中token
的一个子集。- 这对
BERT
来说是一个必须的选择,因为如果所有的token
都被maksed
了,就不可能做出任何有意义的预测。 - 此外,对于
BERT
和XLNet
来说,部分预测仅预测具有足够上下文的token
,起到了降低优化难度的作用。 - 然而,前面内容讨论的独立性假设使得
BERT
无法建模预测目标之间的依赖性。
- 这对
为了更好地理解这种差异,让我们考虑一个具体的例子:
[New, York, is, a, city]
。假设BERT
和XLNet
都选择[New, York]
这两个token
作为预测目标,并最大化 $ \log p(\text{New York}\mid \text{ is a city}) $ 。又假设XLNet
采样到了分解顺序[is, a, city, New, York]
。在这种情况下,BERT
和XLNet
分别简化为以下目标:注意,
XLNet
能够捕捉到一对目标(New, York)
之间的依赖关系,而这个依赖关系被BERT
忽略了。尽管在这个例子中,BERT
学到了一些依赖关系,如(New, city)
和(York, city)
。但是很明显,在相同的目标下,XLNet
总是能学到更多的依赖关系,并且包含 "denser
" 的有效训练信号(即,上下文更长)。为了证明超一般性观点(而不是单个例子),我们现在转向更正式的表达。受之前工作的启发(
《Breaking the softmax bottleneck: A high-rank rnn language model》
),给定一个序列 $ \mathbf x=[x_1,\cdots,x_T] $ ,我们定义一组感兴趣的target-context pair
: $ \mathcal I = \{(x,\mathcal U)\} $ ,其中 $ \mathcal U $ 是 $ \mathbf x $ 中的一组token
从而构成 $ x $ 的上下文。直观而言,我们希望模型通过预训练loss
项 $ \log p(x\mid \mathcal U) $ 来学习 $ x $ 对 $ \mathcal U $ 的依赖性。例如,给定上述的句子,感兴趣的pair
$ \mathcal I $ 可以被实例化为:注意:
$ \mathcal I $ 只是一个虚拟的概念,没有唯一的ground-truth
。无论 $ \mathcal I $ 是如何实例化的,我们的分析都将成立。给定一组
target token
$ \mathcal T $ 和一组non-target token
$ \mathcal N = \mathbf x\backslash \mathcal T $ ,BERT
和XLNet
都能最大化 $ \log p(\mathcal T\mid \mathcal N) $ ,但采用不同的公式:其中:
$ \mathcal T_{\lt x} $ 表示 $ \mathcal T $ 中根据分解顺序而位于 $ x $ 之前的token
集合。这两个目标都由
$ \log p(x\mid \mathcal C_x) $ 形式的多个loss
项组成,其中 $ \mathcal C_x $ 为 $ x $ 的上下文。直观而言,如果存在一个target-context pair
$ (x,\mathcal U)\in \mathcal I $ ,使得 $ \mathcal U\sube \mathcal C_x $ ,那么loss
项 $ \log p(x\mid \mathcal C_x) $ 为 $ x $ 和 $ \mathcal U $ 之间的依赖性提供了一个训练信号。为便于讨论,如果 $ \mathcal U \sube \mathcal C_x $ ,则我们说一个target-context pair
$ (x,\mathcal U)\in \mathcal I $ 被一个模型(或目标)所覆盖。给定这个定义,我们考虑两种情况:
- 如果
$ \mathcal U\sube \mathcal N $ ,则依赖关系 $ (x,\mathcal U) $ 同时被BERT
和XLNet
所覆盖。 - 如果
$ \mathcal U\sube \mathcal N\cup \mathcal T_{\lt x} $ 且 $ \mathcal U\cap \mathcal T_{\lt x} \ne \phi $ ,则该依赖关系只能被XLNet
所覆盖,而无法被BERT
所覆盖。因此,XLNet
能够比BERT
覆盖更多的依赖关系。换句话说,XLNet
目标包含更有效的训练信号,这将经验empirically
地带来更好的性能。
- 如果
b. 和语言建模的比较
像
GPT
这样的标准自回归语言模型只能覆盖依赖关系 $ (x=\text{York}, \mathcal U=\{\text{New}\}) $ ,而无法覆盖依赖关系 $ (x=\text{New}, \mathcal U=\{\text{York}\}) $ 。而XLNet
则能够在所有分解顺序的期望中覆盖这两种情况。标准自回归语言建模的这种限制在现实世界的应用中可能是至关重要的。例如,考虑一个
span extraction
的问答任务,其中上下文是"Thom Yorke is the singer of Radiohead"
,问题是"Who is the singer of Radiohead"
。在自回归语言建模中,"Thom Yorke"
的representation
不依赖于"Radiohead"
,因此"Thom Yorke"
不会被标准方法(即,在上下文中所有的token representation
上应用softmax
)选为答案。更正式地说,考虑一个
context-target pair
$ (x,\mathcal U) $ :- 如果
$ \mathcal U\cap \mathcal T_{\lt x} \ne \phi $ ,其中 $ \mathcal T_{\lt x} $ 表示原始序列中 $ x $ 之前的token
,那么自回归语言建模无法覆盖该依赖关系。 - 相比之下,
XLNet
能够覆盖期望中的所有依赖关系。
- 如果
像
ELMo
这样的方法以浅层的方式将前向语言模型和后向语言模型拼接起来,这不足以对两个方向之间的深层交互进行建模。
c. 弥合语言建模和预训练之间的 gap
由于缺乏双向上下文建模的能力,语言建模和预训练之间一直存在着
gap
,正如前面内容所分析的。一些机器学习从业者甚至质疑:如果语言建模不能直接改善下游任务,那么它是否有意义。XLNet
推广了语言建模并弥补了这个gap
。因此,它进一步 "证实" 了语言建模的研究。此外,针对预训练而利用语言建模研究的快速进展也成为可能。作为一个例子,我们将Transformer-XL
融合到XLNet
中,从而证明最新的语言建模进展的有用性。
9.2 实验
9.2.1 预训练和实现
遵从
BERT
,我们使用BooksCorpus
和English Wikipedia
作为我们预训练数据的一部分,它们合并起来有13GB
的纯文本。此外,我们还包括Giga5
(16GB
文本)、ClueWeb 2012-B
和Common Crawl
进行预训练。我们使用启发式方法激进地过滤掉ClueWeb 2012-B
和Common Crawl
中短的或低质量的文章,结果分别得到19GB
和78GB
的文本。在使用
SentencePiece
(《Sentencepiece: A simple and language independent subword tokenizer and detokenizer for neural text processing》
)进行tokenization
后,我们为Wikipedia
、BooksCorpus
、Giga5
、ClueWeb
和Common Crawl
分别得到27.8B
、1.09B
、4.75B
、4.30B
和19.97B
个subword piece
,共计32.89B
个subword piece
。我们最大的模型
XLNet-Large
具有与BERT-Large
相同的架构超参数,这导致了相似的模型大小。序列长度和memory
长度分别被设置为512
和384
。我们在
512
个TPU v3
芯片上对XLNet-Large
进行了500K
步的训练,使用Adam
优化器,线性学习率衰减,batch size = 2048
,这大约需要2.5
天。据观察,模型在训练结束时仍然对数据欠拟合,但继续预训练对下游任务没有帮助,这表明给定优化算法,模型没有足够的容量来充分利用数据规模。然而,在这项工作中,我们避免训练一个更大的模型,因为它在微调方面的实际用途可能是有限的。此外,类似于
BERT-Base
,我们考虑只在BooksCorpus + Wikipedia
上训练一个XLNet-Base
,用于消融研究、以及和BERT
的公平比较。由于引入了递归机制,我们使用了一个双向的
data input pipeline
,其中前向和后向各占batch size
的一半。双向的
data input pipeline
意思是:在batch
中,既有正序(相对于原始序列顺序)的输入、又有逆序(相对于原始序列顺序)的输入。这是为了配合span-based
预测。因为
span-based
预测直接将原始序列中连续 $ L $ 个token
作为预测目标,顺序不变(如,从I like New York, because ...
中截取(New, York)
)。如果只有正序输入,那么这些预测目标之间只能捕获前向的依赖性(如,p(York | New)
)。增加了逆序输入之后,这些预测目标之间就可以捕获后向的依赖性(如,p(New | York)
)。注意,这里影响的是预测目标之间的依赖性,而不是预测目标和上下文之间的依赖性。为了训练
XLNet-Large
,我们将部分预测常数 $ K $ 设置为6
。我们的微调程序遵循BERT
,除非另有说明。我们采用了一种span-based
预测的思想,首先采样一个长度 $ L\in [1,2,\cdots,5] $ ,然后在 $ (KL) $ 个token
的上下文中随机选择连续的、跨度为 $ L $ 的token
作为预测目标。假设随机选择的位置为
$ (r,r+1,\cdots,r+L-1) $ ,则将这 $ \mathbf z_{\gt c} $ 固定为 $ [r,r+1,\cdots,r+L-1] $ 并且顺序不变。而剩余的位置作为 $ \mathbf z_{\le c} $ (它们的顺序不重要,因为它们仅作为上下文而不会作为预测目标)。这种
span-based
的方法易于实现,但是它强迫预测目标是连续的,且预测目标之间保持原始序列的顺序不变。预训练
XLNet
的超参数如下表所示。微调
XLNet
的超参数如下表所示。Layer-wise decay
是指以自上而下的方式对各个层的学习率进行指数衰减。例如,假设第24
层使用的学习率为 $ l $ ,Layer-wise
衰减率为 $ \alpha $ ,则第 $ m $ 层的学习率为 $ l\times \alpha ^{24-m} $ 。这意味着从上到下,更新的步幅越来越小。这隐含了一个约束:底层的更新更小而顶层的更新越大。
9.2.2 RACE 数据集
RACE
数据集包含了近10
万个问题,这些问题来自于12
到18
岁之间的中国初高中学生的英语考试,答案由人类专家生成。这是最难的阅读理解数据集之一,涉及到具有挑战性的推理问题。此外,RACE
中段落的平均长度超过300
,这比其他流行的阅读理解数据集如SQuAD
长很多。因此,这个数据集可以作为长文本理解的一个挑战性的benchmark
。在微调过程中,我们使用的序列长度为
640
。如下表所示:- 单一模型
XLNet
的准确率比最佳ensemble
高出7.6
分。 - 同样明显的是,
XLNet
大大超过了其他预训练的模型,如BERT
和GPT
。
由于
RACE
包含相对较长的段落,我们认为XLNet
在这个数据集上获得巨大收益的原因之一是:除了自回归目标之外,XLNet
融合了Transformer-XL
架构从而提高了对长文本建模的能力。- 单一模型
9.2.3 SQuAD 数据集
SQuAD
是一个具有两个任务的大规模阅读理解数据集。SQuAD1.1
包含了在给定段落中总是有相应答案的问题,而SQuAD2.0
则引入了不可回答的问题(即,给定段落中不存在答案)。为了在
SQuAD2.0
上对XLNet
进行微调,我们联合应用了类似于分类任务的逻辑回归损失(表明任务是否有答案)、和问答任务的标准span extraction
损失。由于v1.1
和v2.0
在训练集中共享相同的可回答的问题,我们只需在v2.0
上微调的模型中删除answerability prediction
部分(即,任务是否有答案的部分),即可对v1.1
进行评估。由于排行榜头部的方法都采用了某种形式的数据增强,我们在SQuAD2.0
和NewsQA
上联合训练了一个XLNet
从而用于我们的排行榜submission
。如下表所示:
XLNet
在排行榜上获得了SOTA
的单一模型结果,超过了一系列基于BERT
的方法。- 值得注意的是,在
v1.1
中,XLNet
的单一模型在EM
指标上的表现比人类和最佳ensemble
分别高出7.6
分和2.5
分。 - 最后,为了与
BERT
直接比较从而消除排行榜submission
上的额外技巧的影响,我们在验证集上将XLNet
与BERT
进行了比较。XLNet
在v1.1
和v2.0
的F1
指标中大大超过了BERT
,分别超出3.6
分和7.0
分。
9.2.4 文本分类
遵从以前的文本分类工作(
《Character-level convolutional networks for text classification》
、《Adversarial training methods for semi-supervised text classification》
),我们在以下benchmark
上评估了XLNet
:IMDB
、Yelp-2
、Yelp-5
、DBpedia
、AG
、Amazon-2
和Amazon-5
。如下表所示,
XLNet
在所有给定的数据集上取得了新的SOTA
结果,与BERT
相比,在IMDB
、Yelp-2
、Yelp-5
、Amazon-2
和Amazon-5
上的错误率分别降低了16%
、18%
、5%
、9%
和5%
。
9.2.5 GLUE 数据集
GLUE
数据集是一个包含9
个自然语言理解任务的集合。测试集标签在公开发布的版本中被删除,所有用户必须在evaluation server
上提交他们的预测,以获得测试集结果。在下表中,我们展示了多种
setting
的结果,包括单任务和多任务、以及单一模型和ensemble
。在多任务
setting
中,我们在四个最大的数据集(即,NLI
、SST-2
、QNLI
和QQP
)上联合训练XLNet
,并在其他数据集上微调网络。对于这四个大型数据集,我们只采用了单任务训练。
即,多任务训练仅用于其他的数据集。
对于
QNLI
,我们在提交测试集时采用了《Multi-task deep neural networks for natural language understanding》
中的pairwise relevance ranking
方案。然而,为了与BERT
进行公平的比较,我们对QNLI
验证集的结果是基于标准的分类范式classification paradigm
的。对于
WNLI
,我们使用《A surprisingly robust trick for winograd schema challenge》
中描述的损失。
可以看到:
多任务
ensemble
的XLNet
在公共排行榜的9
个任务中的7
个任务上取得了SOTA
的结果。在最广泛的基准任务MNLI
上,XLNet
将 "匹配" 和 "不匹配" 的setting
分别提高了2.0
分和1.8
分。注意,排行榜上的竞争者采用了比
BERT
更好的技术,如蒸馏、修改的多任务损失、或元学习meta learning
,但仍然低于XLNet
的表现。而XLNet
除了使用标准的多任务学习方法外,没有采用额外的技巧。由于排行榜的目的不是为了消融研究或超参数调优,我们只在测试集上评估了我们最好的多任务模型。为了获得与
BERT
的直接比较,我们在验证集上运行一个单任务XLNet
。如下表的最上面几行所示,XLNet
一直优于BERT
,在RTE
、MNLI
、CoLA
、SST-2
和STS-B
上分别提高了13.4
分、3.2
分、3.0
分、2.4
分 和1.8
分。
9.2.6 ClueWeb09-B 数据集
遵从
《Convolutional neural networks for soft-matching n-grams in ad-hoc search》
的setting
,我们使用ClueWeb09-B
数据集来评估文档排序document ranking
的性能。这些query
是由TREC 2009-2012Web Tracks
基于50M
个文档创建的,任务是对使用标准检索方法检索到的前100
个文档进行rerank
。由于document ranking
或ad-hoc retrieval
主要涉及low-level representation
,而不是high-level
的语义,这个数据集可以作为评估word embedding
质量的测试平台。我们使用预训练好的
XLNet
来抽取文档和query
的word embedding
而不进行微调,并采用kernel pooling network
(《End-to-end neural ad-hoc ranking with kernel pooling》
)对文档进行排序。结果如下表所示:
XLNet
大大超过了其他方法,包括使用与我们相同训练程序的BERT
模型。这说明XLNet
比BERT
能更好地学习low-level
的word embedding
。注意,为了公平比较,我们排除了
《Word-entity duet representations for document ranking》
中的结果(ERR@20
为19.55
,略差于我们),因为它使用了额外的实体相关数据。DCG@k
指标: $ \sum_{i=1}^k \frac{\text{hit}(i)}{\log_2(i+1)} $ ,其中 $ \text{hit}(i) $ 表示第 $ i $ 个推荐的item
是否命中真实的目标item
,取值为1
或0
。NDCG@k
指标:对DCG@k
的归一化,归一化分母为 $ \sum_{i=1}^N \frac{1}{\log_2(i+1)} $ ,其中 $ N $ 为总的真实目标item
数量(小于等于 $ k $ )。
9.2.7 消融研究
基于四个具有不同特点的数据集,我们进行了一项消融研究从而了解每个设计选择的重要性。具体来说,我们希望研究的主要有三个方面:
- 排列语言建模目标的有效性,具体而言,是与
BERT
使用的降噪自编码目标相比。 - 使用
Transformer-XL
作为backbone
神经架构、以及采用segment-level
递归(即,使用memory
)的重要性。 - 一些实施细节的必要性,包括
span-based
的预测、双向input pipeline
和next-sentence prediction
。
考虑到这些目的,在下表中,我们比较了具有不同实施细节的
6
个XLNet-Base
变体(第3 ~ 8
行)、原始的BERT-Base
模型(第1
行),以及一个额外的Transformer-XL baseline
(第2
行)。这个Transformer-XL baseline
用BERT
中使用的降噪自编码enoising auto-encoding: DAE
目标训练,但具有双向input pipeline
。为了进行公平的比较,所有的模型都是基于一个12
层的架构,具有与BERT-Base
相同的模型超参数,并且只对Wikipedia + BooksCorpus
进行训练。所有报告的结果都是5
次运行的中位数。检查结果的第
1 ~ 4
行,我们看到用不同的 $ K $ 值训练的两个full XLNet-Base
模型在各任务中的表现明显优于BERT
、以及DAE
训练的Transformer-XL
,这显示了排列语言建模目标的优越性。同时,有趣的是,
DAE
训练的Transformer-XL
在RACE
和SQuAD
等长文本的任务中取得了比BERT
更好的表现,这表明Transformer-XL
在语言建模方面的卓越表现。DAE + Transformer-XL
与BERT
不同的地方在于:相对位置编码、以及segment-level
递归。接下来,如果我们去掉
memory
缓存机制(第5
行),则性能明显下降,特别是对于涉及4
个任务中最长上下文的RACE
。此外,第
6 ~ 7
行显示,span-based
预测和双向input pipeline
在XLNet
中都发挥了重要作用。最后,我们意外地发现,在最初的
BERT
中提出的next-sentence prediction
目标在我们的setting
中不一定能带来改进。相反,除了RACE
数据集,next-sentence prediction
往往会损害性能。因此,当我们训练XLNet-Large
时,我们排除了next-sentence prediction
目标。
- 排列语言建模目标的有效性,具体而言,是与
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论