「自然语言处理」一文读懂XLNET到底是什么?


<code>XLNet是google和cmu联合发表的一篇论文,是预训练模型的一种。 

预训练模型越来越大,越来越多,这篇博客详细讲述一下xlnet到底是什么/<code>
「自然语言处理」一文读懂XLNET到底是什么?

预训练家族(https://github.com/thunlp/PLMpapers)

二、XLNET的建模思想

xlnet是19年6月份google和cmu联合发表的一篇论文,这篇论文的主要贡献是提出一种新的预训练方法,在多个公开数据集中取得SOAT。


「自然语言处理」一文读懂XLNET到底是什么?


首先我们可以简单的理解XLnet = ELMO + BERT。这个公式的意思是xlnet综合了ELMO和BERT的训练思想。ELMO的优点主要是没有像bert一样随机mask一些单词,丢失了信息。BERT相比了ELMO考虑了全局信息,因为它是根据所有没有mask掉的单词进行预测。


XLNET的思想: 首先我们假设一个句子有四个单词,标为1、2、3、4。XLNET做的事情是第一步,先求所有的全排列,有4!种。然后训练的过程中随机抽出一个全排列比如3 2 4 1。第二步对这个全排列用语言模型的思想(ELMO思路)进行预测,也就是用 3 预测2,用3 2 预测4,用3 2 4 预测1。


但是第二步为什么这么做呢?对所有的全排列都这么做,相当于求解了一个期望,比如同样一个单词2。在不同的排列中预测方法不一样,但是平均起来,相当于考虑了2的上下文。


这种思想用图解如下:


「自然语言处理」一文读懂XLNET到底是什么?


三、XLNET的实现

第二小节讲的只是xlnet的设计思想,但是这种思想具体怎么实现的呢?


一种直观的实现:

对于全排列的一个采样比如:3 2 4 1,对于单词4 可以用transformer 采用固定长度,比如10,然后对3 2 进行编码,其他位置用mask。预测目标为4


但是这样有一个问题,就是当序列为3 2 1 4的时候,3 2 预测却又是1。这就有问题了,问题的本质是没有模型预测的时候没有预测单词的位置信息。如果加入位置信息,不就唯一确定了吗?


xlnet的实现:

xlnet使用双流注意力机制来解决这个问题,说白了就是两个self-attention。一个注意力包含位置信息,文中称为Query Stream。另一个注意力包含文本的信息称为context stream。

如图用w表示词的位置信息,每个位置都初始化一个这样的可训练的变量(相当于position embedding),然后当做输入输入到transformer-xl中。用g表示,上标表示层,下标表示第i个单词。

「自然语言处理」一文读懂XLNET到底是什么?

对于每个位置展开:


「自然语言处理」一文读懂XLNET到底是什么?


「自然语言处理」一文读懂XLNET到底是什么?

对于context stream。使用包含当前词的上下文,用h表示,比如下面图中的位置3,它就只包含3的信息。位置4会包含3 2 4的信息。

「自然语言处理」一文读懂XLNET到底是什么?


「自然语言处理」一文读懂XLNET到底是什么?


「自然语言处理」一文读懂XLNET到底是什么?

当看完这些,可以回头再看看Query stream是怎么计算的,可以看看图的连线,每个gi只包含一个位置w(图中虚线)和小于t时刻的上下文。


上面图中表示的例子可以用下面公式表示:

「自然语言处理」一文读懂XLNET到底是什么?

然后g的最后一层可以用来计算下面的式子,也就是用query stream的最后输出表示

「自然语言处理」一文读懂XLNET到底是什么?

然后套用自回归的计算公式(语言模型),公式如下:

「自然语言处理」一文读懂XLNET到底是什么?


我从事算法工程师多年,目前主要研究和兴趣点在机器学习、深度学习、自然语言处理。我会持续分享自然语言处理工程师必备的相关技术,感兴趣的朋友可以关注我,相信一定会有所收获。

如果有计算机学习、自然语言处理相关的问题或者考研、学习方法等方面的问题,可以在评论区留言,或者私信我,谢谢大家!


分享到:


相關文章: