转载

XLNet理解

XLNet理解

XLNet是CMU和谷歌大脑在6月份,提出的一个新的预训练模型。在多个任务的性能超越

Bert.如果你学习过Bert、Transformer、Transformer XL, XLNet论文看起来会简单很多

自回归语言模型 Autoregressive language modeling

自回归语言模型通俗点讲,就是已知上文,预测上文的下一个单词。或者已知下文,预测下文

的上一个单词。用公式描述如下, x < t x_{<t} 表示上文, x t 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})

自编码语言模型 Autoencoding language modeling

自编码语言模型并不是对上文提到的概率分布建模,而是希望从出错的输入重构原来的输入

自编码语言模型最典型的就是Bert模型,Bert模型,先mask掉一部分单词,后用余下的部分预测被

mask掉的单词。Bert模型在XLNet论文中别反复强调了两个缺点:

  • 预训练阶段,有单词被mask掉了,但是在fine-tuning阶段,所有单词不允许被mask,所以造成了

    模型中的预训练阶段和微调阶段的不匹配。(预训练数据和微调数据的不统一)

  • Bert模型在预测一个被mask掉的单词,无法利用另外被mask掉的单词信息。举个例子

    加入输入句子 [ ] [我, 爱, 中, 国] ,假设爱,中mask掉了,则在预测的时候,只能利用

    我、国这两个字, 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)

第二个排列预测位置4,得到如下公式 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)} )

  • 查询流

    预测当前单词时,不能使用当前单词内容信息( h 1 ( 0 ) h_1^{(0)} )

  • 总的流程图

在fine-tuning阶段,只需要把隐状态向量 h h 作为输出,用于下游任务

参考

XLNet paper

最通俗易懂的XLNET详解

XLNet运行机制及和Bert的异同比较

ticle/details/93196139)

XLNet运行机制及和Bert的异同比较

正文到此结束
本文目录