github:https://github.com/zihangdai/xlnet
摘要
凭借对双向上下文进行建模的能力,与基于自回归语言模型的预训练方法(GPT)相比,基于像BERT这种去噪自编码的预训练方法能够达到更好的性能。然而,由于依赖于使用掩码(masks)去改变输入,BERT忽略了屏蔽位置之间的依赖性并且受到预训练与微调间差异的影响。结合这些优缺点,我们提出了XLNet,它一种通用的自回归预训练方法,其具有一下优势:(1)通过最大化因式分解次序的概率期望来学习双向上下文,(2)由于其自回归公式,克服了BERT的局限性。此外,XLNet将最先进的自回归模型Transformer-XL的创意整合到预训练中。根据经验,XLNet在20个任务上的表现优于BERT,通常大幅度提升,并在18个任务中实现最先进的结果,包括问答,自然语言推理,情感分析和文档排名。
1.介绍
无监督表示学习在自然语言处理领域非常成功。通常,这种方法首先需要在大规模未标记的文本语料库上对神经网络进行预训练,然后对下游任务中的模型或表示进行微调。基于这样一个思想,不同文献中探讨了不同的无监督预训练方法。其中,自回归(AR)语言模型和自编码(AE)语言模型是两个最成功的预训练目标。
AR语言模型试图用自回归模型估计文本语料的概率分布。具体而言,给定文本序列
X
=
(
x
1
,
.
.
.
,
x
T
)
X=(x1,...,xT)
X=(x1,...,xT),AR语言模型将概率分解为正向乘积
p
(
X
)
=
∏
t
=
1
T
p
(
x
t
∣
x
<
t
)
p(X)=\prod ^T_{t=1} p(x_t | x _{<t})
p(X)=∏t=1Tp(xt∣x<t)或向后
p
(
X
)
=
∏
t
=
T
1
p
(
x
t
∣
x
>
t
)
p(X)=\prod ^1_{t=T} p(x_t | x _{>t})
p(X)=∏t=T1p(xt∣x>t)。一个参数模型(例如,神经网络)被训练以拟合每个条件分布。 由于AR语言模型仅被训练为编码单向上下文(向前或向后),因此在建模深度双向上下文时无效。 相反,下游语言理解任务通常需要双向上下文信息。这导致AR语言建模与有效预训练之间存在差距。
相比之下,基于AE的预训练不执行显式概率估计,而是旨在从改变(即MASK)的输入重建原始数据。一个值得注意的例子是BERT,它是最先进的预训练方法。给定输入字符序列,字符的某一部分被特殊符号[MASK]替换,并且训练该模型以从屏蔽的版本恢复原始字符。由于概率估计不是目标的一部分,因此允许BERT利用双向上下文进行重建。作为直接的好处,这可以弥补AR语言建模中的上述双向信息差距,从而提高性能。然而,在微调时,实际数据中不存在BERT在预训练期间使用的[MASK]等人工符号,导致预训练与微调之间存在差异。此外,由于预测的字符在输入中被掩盖,因此BERT不能像在AR语言建模中那样使用乘积来建模联合概率。换句话说,BERT假设预测的字符在给定的未掩盖的字符的情况下彼此独立,这在普遍存在长距离程依赖问题的自然语言处理任务中,被过度简化了。
面对现有语言预训练模型的优缺点,在这项工作中,我们提出了XLNet,这是一种通用的自回归方法,它充分利用了AR语言模型和AE的优点,同时避免了它们的局限性。
- 首先,不是像传统的AR模型那样使用固定的前向或后向因式分解顺序,对于序列中各种可能的因式分解次序的排列,XLNet通过最大化其期望对数似然函数。由于排列操作,每个位置的上下文可以包括来自左侧和右侧的字符。在期望中,每个位置都能学习到来自所有位置的上下文信息,即捕获双向上下文。
- 其次,作为一种通用的AR语言模型,XLNet不依赖于输入数据的变换。因此,XLNet不会受到像BERT那样的在预训练与微调之间存在差异的影响。同时,自回归模型还提供了一种自然的方式来使用乘积规则来分解预测的字符的联合概率,从而消除了在BERT中做出的独立性假设。
除了新的预训练模型以外,XLNet还改进了预训练的结构设计。
- 受AR语言模型的最新进展的启发,XLNet将Transformer-XL的分段重现机制和相对编码方案集成到预训练中,从而在经验上改进了性能,尤其是涉及较长文本序列的任务。
- 直接地将Transformer(-XL)架构应用于基于排列的语言模型不起作用,因为因式分解顺序是任意的并且目标是不明确的。作为解决方案,我们建议重新参数化Transformer(-XL)网络以消除歧义。
根据经验,XLNet在18个任务上实现了最先进的效果,即7个GLUE语言理解任务,3个阅读理解任务,包括SQUAD和RACE,7个文本分类任务,包括Yelp和IMDB,以及ClueWeb09-B文档排名任务。 在一系列公平的比较实验中,XLNet在多个基准测试中始终优于BERT。
2.相关工作
在[32,11]中已经探讨了基于排列的AR模型的想法,但是存在几个关键的差异。以前的模型是无序的,而XLNet本质上是顺序感知的位置编码。这对于语言理解很重要,因为无序模型被简化为词袋,缺乏基本的表达能力。上述差异源于动机的根本差异 - 之前的模型旨在通过将“无序”归纳偏差融入模型来改善概率估计,而XLNet的动机是通过启用AR语言模型来学习双向上下文。
3.提出方法
3.1 背景
在本节中,我们首先在模型预训练方面回顾和比较传统的AR语言模型和BERT。
(1)传统的AR语言模型
给定文本序列
X
=
[
x
1
,
⋅
⋅
⋅
,
x
T
]
X = [x_1,···,x_T]
X=[x1,⋅⋅⋅,xT],AR语言模型通过最大化前向自回归因式分解的对数似然来执行预训练:
m
a
x
θ
l
o
g
p
θ
(
X
)
=
∑
t
=
1
T
l
o
g
p
θ
(
x
t
∣
x
<
t
)
=
∑
t
=
1
T
l
o
g
e
x
p
(
h
θ
(
x
1
:
t
−
1
)
⊤
e
(
x
t
)
)
∑
x
′
e
x
p
(
h
θ
(
x
1
:
t
−
1
)
⊤
e
(
x
′
)
)
,
(
1
)
max_θ\quad log~p_θ(X)=\sum^T_{t=1}log~p_θ(x_t|x_{<t})=\sum^T_{t=1}log~\frac {exp(h_θ(x_{1:t−1})^{\top}e(x_t))}{\sum_{x'} exp(h_θ(x_{1:t−1})^{\top}e(x'))},\qquad (1)
maxθlog pθ(X)=t=1∑Tlog pθ(xt∣x<t)=t=1∑Tlog ∑x′exp(hθ(x1:t−1)⊤e(x′))exp(hθ(x1:t−1)⊤e(xt)),(1)
其中,
h
θ
(
x
1
:
t
−
1
)
h_θ(x_{1:t−1})
hθ(x1:t−1)是由神经网络(例如RNN或 Transformer)产生的字符序列
x
1
:
t
−
1
x_{1:t−1}
x1:t−1的上下文表示,
e
(
x
t
)
e(x_t)
e(xt)表示
x
t
x_t
xt的词嵌入。
(2)BERT
相比之下,BERT基于去噪自编码。具体地,对于文本序列
X
X
X,BERT首先通过将
X
X
X中的字符的一部分(例如,15%)随机设置为特殊符号[MASK]来构造重构的版本
x
^
\hat{x}
x^。令被屏蔽的字符为
x
ˉ
\bar{x}
xˉ,训练目标是从
x
^
\hat{x}
x^重建
x
ˉ
\bar{x}
xˉ:
m
a
x
θ
l
o
g
p
θ
(
x
ˉ
∣
x
^
)
≈
∑
t
=
1
T
m
t
l
o
g
p
θ
(
x
t
∣
x
^
)
=
∑
t
=
1
T
m
t
l
o
g
e
x
p
(
H
θ
(
x
^
)
⊤
e
(
x
t
)
)
∑
x
′
e
x
p
(
H
θ
(
x
^
)
⊤
e
(
x
′
)
)
,
(
2
)
max_θ\quad log~p_θ(\bar{x}|\hat{x})\thickapprox \sum^T_{t=1}m_t~log~p_θ(x_t|\hat{x})=\sum^T_{t=1}m_t~log~\frac {exp(H_θ(\hat{x})^{\top}e(x_t))}{\sum_{x'} exp(H_θ(\hat{x})^{\top}e(x'))},\qquad (2)
maxθlog pθ(xˉ∣x^)≈t=1∑Tmt log pθ(xt∣x^)=t=1∑Tmt log ∑x′exp(Hθ(x^)⊤e(x′))exp(Hθ(x^)⊤e(xt)),(2)
其中
m
t
=
1
m_t=1
mt=1表示
x
t
x_t
xt被屏蔽,而
H
θ
H_θ
Hθ是将长度为
T
T
T的文本序列
X
X
X映射为隐藏向量序列的Transform
H
θ
(
X
)
=
[
H
θ
(
X
)
1
,
H
θ
(
X
)
2
,
⋅
⋅
⋅
,
H
θ
(
X
)
T
]
H_θ(X)=[H_θ(X)_1,H_θ(X)_2,··· ,H_θ(X)_T]
Hθ(X)=[Hθ(X)1,Hθ(X)2,⋅⋅⋅,Hθ(X)T]。
(3)比较
现在从以下几个方面比较两个预训练模型的利弊:
- 独立性假设:正如等式(2)中符号 ≈ \thickapprox ≈所强调的那样,BERT基于独立假设对联合条件概率 p ( x ˉ ∣ x ^ ) p(\bar{x}|\hat{x}) p(xˉ∣x^)进行因式分解,所有独立假设都是分别重构所有被屏蔽的字符 x ˉ \bar{x} xˉ。相比之下,AR语言模型(1)使用普遍存在的乘积规则对 p θ ( X ) p_θ(X) pθ(X)进行分解,而没有这种独立性假设。
- 引入噪声:BERT的输入包含从未在下游任务中出现的人工符号,如[MASK],这会产生预训练与微调之间差异。用[10]中的原始标记替换[MASK]并不能解决问题,因为原始标记只能以很小的概率使用 - 否则等式(2)将是微不足道的优化。相比之下,AR语言模型不依赖于任何输入重构,因而不会遇到此问题。
- 上下文依赖性:AR表示 h θ ( x 1 : t − 1 ) h_θ(x_{1:t-1}) hθ(x1:t−1)仅以字符从开始到位置 t t t(即左边的字符)为条件,而BERT表示 H θ ( X ) t H_θ(X)_t Hθ(X)t可以访问双向的上下文信息。因此,BERT模型允许预训练模型以更好地捕获双向上下文。
3.2 模型:排列语言模型(Permutation Language Modeling)
根据上述比较,AR语言建模和BERT具有各自的优势。一个自然而然的问题是,是否存在一个预训练模型,即能在避免其弱点的同时带来两者的优势。
借用无序NADE的思想,我们提出了排列语言模型,它不仅保留了AR模型的优点,而且还允许模型捕获双向上下文。具体来说,对于长度为
T
T
T的序列
X
X
X,有
T
!
T!
T!个不同的排列顺序来执行有效自回归因式分解。直观地说,如果模型参数在所有因式分解排列中共享,那么在期望上,模型将学会从双向的所有位置收集信息。
为了形式化这个想法,令
Z
T
Z_T
ZT为长度
T
T
T的索引序列
[
1
,
2
,
.
.
.
,
T
]
[1,2,...,T]
[1,2,...,T]的所有可能排列的集合。我们使用
z
t
z_t
zt和
z
<
t
z_{<t}
z<t来表示排列
z
∈
Z
T
z\in Z_T
z∈ZT的第
t
t
t个元素和前
t
−
1
t-1
t−1个元素。然后,我们提出的排列语言模型可以表示如下:
m
a
x
θ
E
z
∼
Z
T
[
∑
t
=
1
T
l
o
g
p
θ
(
x
z
t
∣
x
z
<
t
)
]
.
(
3
)
max_θ\quad \mathbb{E}_{z∼Z_T}[\sum^T_{t=1}log~p_θ(x_{z_t}|x_{z_{<t}} )].\qquad (3)
maxθEz∼ZT[t=1∑Tlog pθ(xzt∣xz<t)].(3)
本质上,对于文本序列
X
X
X,我们一次采样出一个因式分解序列
z
z
z,并根据因式分解顺序求解概率
p
θ
(
x
)
p_θ(x)
pθ(x)。由于在训练期间在所有因式分解序列中共享相同的模型参数
θ
θ
θ,因此在期望上,
x
t
x_t
xt已经看到序列中的每个可能元素
x
i
=
̸
x
t
x_i =\not x_t
xi≠xt,因此能够捕获双向上下文。此外,由于该模型适用于AR框架,它自然避免了3.1节中讨论的独立性假设和预训练与微调间差异的影响。
注意事项:所提出的模型只会排列因式分解顺序,而不是序列顺序。换句话说,我们保持原始序列顺序,使用对应于原始序列的位置编码,并依赖Transformers中的适当注意屏蔽来实现因式分解顺序的排列(通过使用类似上下三角矩阵的方式实现)。请注意,这种选择是必要的,因为模型在微调期间只会遇到具有自然顺序的文本序列。
为了提供整体结构,我们在图1中展示了在给定相同输入序列
X
X
X但不同因式分解顺序下预测字符
x
3
x_3
x3的示例。
3.3 架构:目标感知表示的双向自注意
虽然排列语言模型具有所需的属性,但使用标准Transformer参数化的简单实现可能不起作用。为了看清这个问题,假设我们使用标准Softmax公式参数化下一个字符分布
p
θ
(
X
z
t
∣
x
z
<
t
)
p_θ(X_{z_t} | x_{z_{<t}})
pθ(Xzt∣xz<t),即
p
θ
(
X
z
t
=
x
∣
x
z
<
t
)
=
e
x
p
(
e
(
x
)
⊤
h
θ
(
x
z
<
t
)
)
∑
x
′
e
x
p
(
e
(
x
′
)
⊤
h
θ
(
x
z
<
t
)
)
p_θ(X_{z_t}=x|x_{z_{<t}})=\frac{exp(e(x)^\top h_θ(x_{z<t}))}{\sum_{x'}exp(e(x')^\top h_θ(x_{z<t}))}
pθ(Xzt=x∣xz<t)=∑x′exp(e(x′)⊤hθ(xz<t))exp(e(x)⊤hθ(xz<t)),其中
h
θ
(
x
z
<
t
)
h_θ(x_{z<t})
hθ(xz<t)表示在适当掩蔽之后由共享Transformer网络产生的
x
z
<
t
x_{z<t}
xz<t的隐藏表示。现在注意到表示
h
θ
(
x
z
<
t
)
h_θ(x_{z<t})
hθ(xz<t)不取决于它将预测哪个位置,即
z
t
z_t
zt。因此,无论目标位置如何,都会预测相同的分布,这无法学习有用的表示(具体示例见附录A.1)。为避免此问题,我们建议将下一个字符分布重新参数化为目标位置感知:
p
θ
(
X
z
t
=
x
∣
x
z
<
t
)
=
e
x
p
e
(
x
)
⊤
g
θ
(
x
z
<
t
,
z
t
)
∑
x
′
e
x
p
(
e
(
x
′
)
⊤
g
θ
(
x
z
<
t
,
z
t
)
)
,
(
4
)
p_θ(X_{z_t}=x|x_{z_{<t}})=\frac{exp~e(x)^\top g_θ(x_{z_{<t}},z_t)}{\sum_{x'} exp(e(x')^\top g_θ(x_{z_{<t}}, z_t))}, \qquad(4)
pθ(Xzt=x∣xz<t)=∑x′exp(e(x′)⊤gθ(xz<t,zt))exp e(x)⊤gθ(xz<t,zt),(4)
其中
g
θ
(
x
z
<
t
,
z
t
)
g_θ(x_{z_{<t}}, z_t)
gθ(xz<t,zt)表示额外将目标位置
z
t
z_t
zt作为输入的新类型的表示(仅仅使用目标字符位置而不使用内容)。
(1)双向自注意力(Q,K,V参数共享)
虽然目标感知表示的想法消除了目标预测中的模糊性,但是如何构建
g
θ
(
x
z
<
t
,
z
t
)
g_θ(x_{z<t},z_t)
gθ(xz<t,zt)仍然是一个不简单的问题。在其他可能性中,我们建议以目标位置
z
t
z_t
zt为参考点并依靠位置
z
t
z_t
zt通过注意从上下文
x
z
<
t
x_{z<t}
xz<t获取信息。为了使这个参数化起作用,在标准Transformer架构中有两个要求是矛盾的:(1)预测字符
x
z
t
x_{z_t}
xzt,
g
θ
(
x
z
<
t
,
z
t
)
g_θ(x_{z<t},z_t)
gθ(xz<t,zt)应该只使用
x
z
t
x_{z_t}
xzt的位置而不是其内容,否则目标字符将变得无关紧要; (2)为了用
j
>
t
j>t
j>t预测其他字符
x
z
j
x_{z_j}
xzj,
g
θ
(
x
z
<
t
,
z
t
)
g_θ(x_{z<t},z_t)
gθ(xz<t,zt)也应编码内容
x
z
t
x_{z_t}
xzt以提供完整的上下文信息。为了解决这种矛盾,我们建议使用两层隐藏表示而不是一层:
- 内容表示 h θ ( x z ≤ t ) h_θ(x_{z≤t}) hθ(xz≤t),或缩写为 h z t h_{z_t} hzt,其作用与Transformer中的标准隐藏状态类似。该表示形式对上下文和 x z t x_{z_t} xzt本身进行编码。
- 问题表示 g θ ( x z < t , z t ) g_θ(x_{z<t},z_t) gθ(xz<t,zt),或缩写为 g z t g_{z_t} gzt,它只能访问上下文信息 x z < t x_{z<t} xz<t和 z t z_t zt的位置,但不能访问内容 x z t x_{z_t} xzt,这如上所述。
在实际计算中,网络第一层的问题流用一个可训练的向量进行初始化,即
g
i
(
0
)
=
w
g^{(0)}_i=w
gi(0)=w,而内容流设置为相应的字嵌入,即
h
i
(
0
)
=
e
(
x
i
)
h^{(0)}_i=e(x_i)
hi(0)=e(xi)。对于每个自注意力层
m
=
1
,
.
.
.
,
M
m=1,...,M
m=1,...,M,两个表示流共用一组的参数来计划性地进行更新,其公式如下(结构如图2(a)和(b)所示):
g
z
t
(
m
)
←
A
t
t
e
n
t
i
o
n
(
Q
=
g
z
t
(
m
−
1
)
,
K
V
=
h
z
<
t
(
m
−
1
)
;
θ
)
,
(
q
u
e
r
y
s
t
r
e
a
m
:
u
s
e
z
t
b
u
t
c
a
n
n
o
t
s
e
e
x
z
t
)
h
z
t
(
m
)
←
A
t
t
e
n
t
i
o
n
(
Q
=
h
z
t
(
m
−
1
)
,
K
V
=
h
z
≤
t
(
m
−
1
)
;
θ
)
,
(
c
o
n
t
e
n
t
¬
s
t
r
e
a
m
:
u
s
e
b
o
t
h
z
t
a
n
d
x
z
t
)
.
g^{(m)}_{z_t}←Attention(Q = g^{(m−1)}_{z_t}, KV= h^{(m−1)}_{z_{<t}}; θ), (query~stream: use~z_t~but~cannot~see~x_{z_t})\\ h^{(m)}_{z_t}←Attention(Q = h^{(m−1)}_{z_t}, KV= h^{(m−1)}_{z_{≤t}}; θ), (content¬stream: use~both~z_t~and~x_{z_t}).
gzt(m)←Attention(Q=gzt(m−1),KV=hz<t(m−1);θ),(query stream:use zt but cannot see xzt)hzt(m)←Attention(Q=hzt(m−1),KV=hz≤t(m−1);θ),(content¬stream:use both zt and xzt).
其中Q,K,V表示注意力操作中的问题,键和值。内容表示的更新规则与标准self-attention完全相同,因此在微调期间,我们可以简单地删除问题流并将内容流用作普通的Transformer(-XL)。最后,我们可以使用最后一层的查询表示
g
z
t
(
M
)
g^{(M)}_{z_t}
gzt(M)来计算等式(4)。
(2)部分预测
虽然排列语言模型具有若干益处,但由于对输入字符进行全排列并且在初步实验中导致缓慢收敛,因此它成为了更具挑战性的优化问题。为了降低优化难度,我们选择仅预测因式分解顺序中的最后N个字符。形式上,我们将
z
z
z分成非目标子序列
z
≤
c
z_{≤c}
z≤c和目标子序列
z
>
c
z_{>c}
z>c,其中
c
c
c是切割点。我们的目标是以非目标子序列为条件下最大化目标子序列的对数似然,即:
m
a
x
θ
E
z
∼
Z
T
[
l
o
g
p
θ
(
x
z
>
c
∣
x
z
≤
c
)
]
=
E
z
∼
Z
T
[
∑
t
=
c
+
1
∣
z
∣
l
o
g
p
θ
(
x
z
t
∣
x
z
<
t
)
]
.
(
5
)
max_θ\quad E_{z∼Z_T}[log~p_θ(x_{z_{>c}}|x_{z_{≤c}})]=E_{z∼Z_T}[\sum^{|z|}_{t=c+1}log~p_θ(x_{z_t}| x_{z_{<t}}) ].\qquad (5)
maxθEz∼ZT[log pθ(xz>c∣xz≤c)]=Ez∼ZT[t=c+1∑∣z∣log pθ(xzt∣xz<t)].(5)
注意,选择
z
>
c
z_{>c}
z>c作为目标,因为它在给定当前分解顺序
z
z
z的情况下具有序列中最长的上下文。使用超参数
K
K
K,使得选择约
1
/
K
1/K
1/K字符用于预测,即
∣
z
∣
/
(
∣
z
∣
−
c
)
≈
K
| z | /(| z | - c)≈K
∣z∣/(∣z∣−c)≈K。对于未选择的字符,不需要计算它们的问题表示,这样可以加快速度和减少运行内存。
3.4 来自Transformer-XL的想法
由于我们的目标函数适用于AR框架,我们将最先进的AR语言模型Transformer-XL纳入我们的预训练框架,并在其后面引入了我们的方法。我们在Transformer-XL中集成了两个重要的技术,即相对位置编码方案和段循环机制。我们应用基于前面讨论的原始序列的相对位置编码,这是很明显的。现在我们讨论如何将递归机制集成到所提出的排列方案中,并使模型能够重用之前序列段的隐藏状态。不失一般性,假设我们有两个来自长序列
S
S
S的段;即,
x
~
=
S
1
:
T
\tilde{x}=S_{1:T}
x~=S1:T和
x
=
S
T
+
1
:
2
T
x=S_{T+1:2T}
x=ST+1:2T。令
z
~
\tilde{z}
z~和
z
z
z分别是
[
1
⋅
⋅
⋅
T
]
[1···T]
[1⋅⋅⋅T]和
[
T
+
1
⋅
⋅
⋅
2
T
]
[T+1···2T]
[T+1⋅⋅⋅2T]的排列。然后,基于排列
z
~
\tilde{z}
z~,我们处理
z
z
z中的第一段,然后缓存每一层
m
m
m所获得的内容表示
h
~
(
m
)
\tilde{h}^{(m)}
h~(m)。然后,对于下一个段
x
x
x,可以将使用缓存表示的注意力更新写为:
h
z
t
(
m
)
←
A
t
t
e
n
t
i
o
n
(
Q
=
h
z
t
(
m
−
1
)
,
K
V
=
[
h
~
(
m
−
1
)
,
h
z
≤
t
(
m
−
1
)
]
;
θ
)
h^{(m)}_{z_t} ← Attention(Q=h^{(m−1)}_{z_t}, KV =[\tilde{h}^{(m−1)}, h^{(m−1)}_{z_{≤t}}];θ)
hzt(m)←Attention(Q=hzt(m−1),KV=[h~(m−1),hz≤t(m−1)];θ)
其中
[
.
,
.
]
[.,.]
[.,.]表示沿序列维度的连接。请注意,位置编码仅取决于原始序列中的实际位置。 因此,一旦获得表示
h
~
(
m
)
\tilde{h}^{(m)}
h~(m),上述注意力的更新就与
z
z
z无关。这允许在不知道前一段的分解顺序的情况下缓存和重用存储器。在期望中,模型利用最后一段的所有分解顺序的存储器进行学习。同样地,可以以相同的方式计算查询流。最后,图2(c)概述了所提出的具有双向注意力的排列语言模型(更详细的说明见附录A.4)。
3.5 多分段模型
许多下游任务具有多个输入段,例如问题和问题回答中的上下文段落。我们现在讨论如何预训练XLNet来模拟自回归框架中的多分段模型。
(1)预训练
在预训练阶段,与BERT类似,我们随机采样两个段(来自相同的上下文或不相同)并将两个段的串联视为一个序列以执行排列语言模型。我们只重用属于同一上下文的记忆。具体来说,我们模型的输入类似于BERT:
[
A
,
S
E
P
,
B
,
S
E
P
,
C
L
S
]
[A,SEP,B,SEP,CLS]
[A,SEP,B,SEP,CLS],其中“SEP”和“CLS”是两个特殊符号,“A”和“B”是两个段。尽管我们遵循两段数据格式,但XLNet-Large并未使用下一句话预测的目标[10],因为它没有显示我们的消融研究-Ablation Study的持续改进(参见第4.7节)。
(2)相对段编码
在架构上,与BERT不同,BERT在每个字符位置的词嵌入的基础上,添加了绝对位置编码,我们扩展了Transformer-XL相对编码的概念,也对段进行编码。给定序列中的一对位置
i
i
i和
j
j
j,如果
i
i
i和
j
j
j来自同一段,我们使用段编码
s
i
j
=
s
+
s_{ij}=s_+
sij=s+或
s
i
j
=
s
−
s_{ij}=s_-
sij=s−,其中
s
+
s_+
s+和
s
−
s_-
s−是每个注意力头的可学习模型参数。换句话说,我们只考虑这两个位置是否属于同一段,而不是考虑它们来自哪个特定段。这与相对编码的核心思想是一致的,即,仅模拟位置之间的关系。当
i
i
i参与
j
j
j的计算时,段编码
s
i
j
s_{ij}
sij用于计算注意力权重
a
i
j
=
(
q
i
+
b
)
⊤
s
i
j
a_{ij}=(q_i+b)^{\top} sij
aij=(qi+b)⊤sij,其中
q
i
q_i
qi是在标准注意操作中的查询向量,并且b是可学习的头部特定偏置向量。最后,将值
a
i
j
a_{ij}
aij添加到正常注意力量中。使用相对分段编码有两个好处:首先,相对编码的归纳偏差改善了泛化;其次,它开启了对具有两个以上输入段的任务进行微调的可能性,这是使用绝对段编码无法实现的。
3.6 讨论和分析
3.6.1 与BERT的比较
比较公式(2)和(5),我们观察到BERT和XLNet都对输入序列进行部分预测,即仅预测序列中的字符子集。这是BERT的必需选择,因为如果所有字符都被屏蔽,则无法进行任何有意义的预测。此外,对于BERT和XLNet,部分预测通过仅预测具有足够上下文的字符来起到降低优化难度的作用。但是,第3.1节中讨论的独立性假设禁止BERT模拟目标字符之间的依赖关系。
为了更好地理解他们的差异,让我们考虑一个具体的例子
[
N
e
w
,
Y
o
r
k
,
i
s
,
a
,
c
i
t
y
]
[New,York,is,a,city]
[New,York,is,a,city]。假设BERT和XLNet都选择两个字符
[
N
e
w
,
Y
o
r
k
]
[New,York]
[New,York]作为预测目标并最大化
l
o
g
p
(
N
e
w
Y
o
r
k
∣
i
s
a
c
i
t
y
)
log~p(New~York | is~a~city)
log p(New York∣is a city)。还假设XLNet所抽样的因式分解顺序为
[
i
s
,
a
,
c
i
t
y
,
N
e
w
,
Y
o
r
k
]
[is,a,city,New,York]
[is,a,city,New,York]。在这种情况下,BERT和XLNet分别简化到以下目标:
J
B
E
R
T
=
l
o
g
p
(
N
e
w
∣
i
s
a
c
i
t
y
)
+
l
o
g
p
(
Y
o
r
k
∣
i
s
a
c
i
t
y
)
,
J
X
L
N
e
t
=
l
o
g
p
(
N
e
w
∣
i
s
a
c
i
t
y
)
+
l
o
g
p
(
Y
o
r
k
∣
N
e
w
,
i
s
a
c
i
t
y
)
.
\mathcal{J}_{BERT}=log~p(New|is~a~city)+log~p(York|is~a~city),\\ \mathcal{J}_{XLNet}=log~p(New | is~a~city) + log~p(York | New, is~a~city).
JBERT=log p(New∣is a city)+log p(York∣is a city),JXLNet=log p(New∣is a city)+log p(York∣New,is a city).
注意到,XLNet能够捕获对
(
N
e
w
,
Y
o
r
k
)
(New,York)
(New,York)之间的依赖关系,BERT则忽视了该关系。虽然在这个例子中,BERT学习了一些依赖关系对,例如
(
N
e
w
,
c
i
t
y
)
(New, city)
(New,city)和
(
Y
o
r
k
,
c
i
t
y
)
(York, city)
(York,city),但很明显,XLNet总是在给定相同目标的情况下学习更多的依赖关系对,并且包含“更密集”的有效训练信息。
为了证明该例子之外的一般性观点,我们现在转向更正式的表达。受先前工作的启发,给定一个序列
X
=
[
x
1
,
⋅
⋅
⋅
,
x
T
]
X = [x_1,···,x_T]
X=[x1,⋅⋅⋅,xT],我们定义了一组感兴趣的【目标字符,上下文】对,
I
=
{
(
x
,
U
)
}
\mathcal{I}= \{(x,\mathcal{U})\}
I={(x,U)},其中
U
\mathcal{U}
U是一个属于
X
X
X中的来自于
x
x
x上下文的字符集合。直觉上,我们希望模型通过预训练损失项
l
o
g
p
(
x
∣
U
)
log~p(x|\mathcal{U})
log p(x∣U)来学习
x
x
x对
U
\mathcal{U}
U的依赖性。 例如,给定上面的句子,【目标字符,上下文】对可以实例化为:
I
=
{
(
x
=
Y
o
r
k
,
U
=
{
N
e
w
}
)
,
(
x
=
Y
o
r
k
,
U
=
{
c
i
t
y
}
)
,
(
x
=
Y
o
r
k
,
U
=
{
N
e
w
,
c
i
t
y
}
)
,
⋅
⋅
⋅
}
.
\mathcal{I} =\{(x = York, \mathcal{U}= \{New\}),(x = York, \mathcal{U}= \{city\}),(x = York, \mathcal{U}=\{New, city\}), · · · \}.
I={(x=York,U={New}),(x=York,U={city}),(x=York,U={New,city}),⋅⋅⋅}.
请注意,
I
\mathcal{I}
I只是一个没有ground truth的虚拟概念,无论
I
\mathcal{I}
I如何实例化,我们的分析都会成立。
给定一组目标字符
T
\mathcal{T}
T和一组非目标字符
N
=
X
\
T
\mathcal{N}=X \backslash \mathcal{T}
N=X\T,BERT和XLNet都最大化
l
o
g
p
(
T
∣
N
)
log~p(T | N)
log p(T∣N),但具有不同的公式:
J
B
E
R
T
=
∑
x
∈
T
l
o
g
p
(
x
∣
N
)
;
J
X
L
N
e
t
=
∑
x
∈
T
l
o
g
p
(
x
∣
N
∪
T
<
x
)
\mathcal{J}_{BERT}=\sum_{x∈\mathcal{T}}log~p(x |\mathcal{N});\quad \mathcal{J}_{XLNet} =\sum_{x∈\mathcal{T}}log~p(x |\mathcal{N}∪ \mathcal{T}_{<x})
JBERT=x∈T∑log p(x∣N);JXLNet=x∈T∑log p(x∣N∪T<x)
其中
T
<
x
\mathcal{T}_{<x}
T<x表示在
T
\mathcal{T}
T中且位于
x
x
x之前的具有分解顺序的字符。两个目标都由
l
o
g
p
(
x
∣
V
x
)
log~p(x | \mathcal{V}_x)
log p(x∣Vx)形式的多个损失项组成。直观地,如果存在一个【目标字符,上下文】对
(
x
,
U
)
∈
I
(x,\mathcal{U})∈\mathcal{I}
(x,U)∈I使得
U
⊆
V
x
\mathcal{U}⊆\mathcal{V}_x
U⊆Vx,那么损失项
l
o
g
p
(
x
∣
V
x
)
log~p(x | \mathcal{V}_x)
log p(x∣Vx)为
x
x
x和
U
\mathcal{U}
U之间的依赖性提供训练信息。为方便起见,如果
U
⊆
V
x
\mathcal{U}⊆\mathcal{V}_x
U⊆Vx,则说明【目标字符,上下文】对
(
x
,
U
)
∈
I
(x,\mathcal{U})∈\mathcal{I}
(x,U)∈I由模型(目标)覆盖。
根据定义,让我们考虑两种情况:
- 如果 U ⊆ N \mathcal{U}⊆\mathcal{N} U⊆N,则依赖性 ( x , U ) (x,\mathcal{U}) (x,U)由BERT和XLNet覆盖。
- 如果 U ⊆ N ∪ T < x \mathcal{U}⊆\mathcal{N}∪\mathcal{T}_{<x} U⊆N∪T<x且 U ∩ T < x = ̸ ∅ \mathcal{U}∩\mathcal{T}_{<x}=\not ∅ U∩T<x≠∅,则依赖关系只能由XLNet覆盖,但不能覆盖BERT。因此,XLNet能够覆盖比BERT更多的依赖关系。 换句话说,XLNet 模型包含更有效的训练信息,这在第4节中将导致更好的性能。