BERT后时代,XLNet 在20个任务上超越BERT,引起不小的关注。最重要的改进是 XLNet 实现了不在输入中加[Mask] 标志,同样可以利用上下文信息,解决了BERT预训练和微调不一致的问题。
1、XLNet如何实现在不加 [Mask] 情况下利用上下文信息呢?
XLNet 通过 Permutation Language Modeling (PLM) 重排输入文本,使得当前词的下文也有可能出现在当前词的「上文」中,而实际的操作不是通过改变文本输入顺序来实现,而是依靠关键的 Attention Mask 机制来完成的。
上图就是文中Attention Mask的机制,只看图并不是那么好理解,这里引用张俊林老师:XLNet:运行机制及和Bert的异同比较 [1] 文章中非常关键的一句话:
在Transformer内部,通过Attention掩码,从 T 的输入单词里面,也就是Ti的上文和下文单词中,随机选择i-1个,放到Ti的上文位置中,把其它单词的输入通过Attention掩码隐藏掉,于是就能够达成我们期望的目标(当然这个所谓放到Ti的上文位置,只是一种形象的说法,其实在内部,就是通过Attention Mask,把其它没有被选到的单词Mask掉,不让它们在预测单词Ti的时候发生作用,如此而已。看着就类似于把这些被选中的单词放到了上文Context_before的位置了)
以图中的排列序列:3->2->4->1为例,通过 Attention Mask,在 self-attention 的加权平均计算中,假设要计算attention之后第2个词对应的向量 E 2 ′ E_{2^{'}} E2′ :
根据图中Content stream中的mask, E