拆解XLNet模型设计,回顾语言表征学习的思想演进( 九 )

但是自注意力算子会引入新的问题 -- 词的相对位置的信息被丢弃了。回到我们的例句["我1", "今天2", "很3", “开心4”, “5”, “因为6”, “我7”, “中8”, “了9”, “彩票10”],丢弃词的相对位置意味着在自注意力算子眼里,"我 1" 和「我 7」表达的意思是一样的。解决这个问题的方法是将位置作为词表征的一部分一并输入模型。Transformer 采用的是简单粗暴的加法:"我 1" 和「我 7」的表征分别为

其中 p1 和 p7 是位置 1 和 7 对应的位置编码 (Position Embedding)。这和循环神经网络截然不同:在循环神经网络里,相对位置决定了计算的顺序,而在 Transformer 里则是决定了词的表征。在后文会提到,将位置纳入词表征的做法在 XLNet 中被巧妙地利用了。

Transformer 在每个词基于语境的表征时会同时用上前后语境,但是自回归语言模型却限制了语境的方向。鉴于自回归语言模型在自然语言生成中的普遍应用,为了使用灵活的 Transformer 进行建模,我们需要对 Transformer 进行相应的修改。解决方案是对计算出的注意力权重进行屏蔽 -- 我们强行将不想要的注意力权重置为 0,这样计算表征的时候就不会用到目标词及其右边的词了 -- 这些词的注意力权重为 0。这称之为注意力掩码 (Attention Mask)。这一点也是构建 XLNet 训练目标所必须的技巧。再加上对下游任务的适配以及大量的数据,GPT 和 GPT-2 也搞了一波大新闻。

推荐阅读