XLNet理解
XLNet是CMU和谷歌大脑在6月份,提出的一个新的预训练模型。在多个任务的性能超越
Bert.如果你学习过Bert、Transformer、Transformer XL, XLNet论文看起来会简单很多
自回归语言模型 Autoregressive language modeling
自回归语言模型通俗点讲,就是已知上文,预测上文的下一个单词。或者已知下文,预测下文
的上一个单词。用公式描述如下, x < t x_{<t} x<t表示上文, x t x_t xt表示上文的下一个单词,同理 x > t x_{>t} x>t。
自回归模型就是要最大化这个概率。自回归语言模型最大的缺点无法同时利用上下文信息
要么利用上文信息、要么利用下文信息。
p
(
x
)
=
∏
t
=
1
T
p
(
x
t
∣
x
<
t
)
p
(
x
)
=
∏
t
=
T
1
p
(
x
t
∣
x
>
t
)
p(x)=\prod_{t=1}^Tp(x_t|x_{<t}) \\ p(x)=\prod_{t=T}^1p(x_t|x_{>t})
p(x)=t=1∏Tp(xt∣x<t)p(x)=t=T∏1p(xt∣x>t)
自编码语言模型 Autoencoding language modeling
自编码语言模型并不是对上文提到的概率分布建模,而是希望从出错的输入重构原来的输入。
自编码语言模型最典型的就是Bert模型,Bert模型,先mask掉一部分单词,后用余下的部分预测被
mask掉的单词。Bert模型在XLNet论文中别反复强调了两个缺点:
-
预训练阶段,有单词被mask掉了,但是在fine-tuning阶段,所有单词不允许被mask,所以造成了
模型中的预训练阶段和微调阶段的不匹配。(预训练数据和微调数据的不统一)
-
Bert模型在预测一个被mask掉的单词,无法利用另外被mask掉的单词信息。举个例子
加入输入句子 [ 我 , 爱 , 中 , 国 ] [我, 爱, 中, 国] [我,爱,中,国],假设爱,中mask掉了,则在预测爱的时候,只能利用
我、国这两个字, P ( 爱 ∣ 我 , 国 ) P(爱|我,国) P(爱∣我,国), 而不能利用中, P ( 爱 ∣ 我 , 中 , 国 ) P(爱|我,中,国) P(爱∣我,中,国)因为中被mask掉了
排列语言模型 Permutation Language Modeling
排列语言模型,我认为是论文中最重要的创新点。上文提到的自回归模型无法同时编码上文和下文信息,
为了克服自回归模型的这个缺点,XLNet提出了排列语言模型。如下图举例所示。假设输入的序列是
[1,2,3,4]
, 排列共有4x3x2=24种。选其中的四种分别为[3,2,4,1]
,[2,4,3,1]
,[1,4,2,3]
,
[4,3,1,2]
。在预测位置3的单词时,第一种排列看不到任何单词,第二种排列能看到[2,4]
第三种排列能看到[1,2,4]
,第四种排列能看到[4]
,所以预测位置3的单词时,不仅能看到上文
[1,2]
,也能看到下文的[4]
。所以XLNet模型能同时编码上下文信息。
编码预测单词的位置
上面提出的排列语言模型,在实现过程中,会存在一个问题,举个例子,还是输入序列[1, 2, 3, 4]
肯定会有如下的排列[1, 2, 3, 4]
, [1,2,4,3]
第一个排列预测位置3,得到如下公式 P ( 3 ∣ 1 , 2 ) P(3|1,2) P(3∣1,2)
第二个排列预测位置4,得到如下公式 P ( 4 ∣ 1 , 2 ) P(4|1,2) P(4∣1,2)
这会造成预测出位置3的单词和位置4的单词是一样的,尽管它们所在的位置不同。
论文中的公式解释如下
[外链图片转存失败(img-hflMBgVc-1562681116083)(https://raw.githubusercontent.com/zyxdSTU/Image/master/xlnet.PNG)]
所以XLNet在预测单词的时候,把位置信息编码进去了。
双流自注意力机制
模型的实现过程中还有两点要求
- 在预测当前单词的时候,只能使用当前单词的位置信息,不能使用单词的内容信息。
- 在预测其他单词的时候,可以使用当前单词的内容信息
为了满足同时这两个要求,XLNet提出了双流自注意力机制
-
内容流
预测其他单词时,使用自己的内容信息( h 1 ( 0 ) h_1^{(0)} h1(0))
-
查询流
预测当前单词时,不能使用当前单词内容信息( h 1 ( 0 ) h_1^{(0)} h1(0))
-
总的流程图
在fine-tuning阶段,只需要把隐状态向量 h h h作为输出,用于下游任务
参考
ticle/details/93196139)