超细粒度分析XLNet中神奇的Attention Mask
©PaperWeekly 原创 · 作者|海晨威
学校|同济大学硕士生
研究方向|自然语言处理
BERT 后时代,XLNet 在 20 个任务上超越 BERT,引起不小的关注。最重要的改进是 XLNet 实现了不在输入中加 [Mask] 标志,同样可以利用上下文信息,解决了 BERT 预训练和微调不一致的问题。
1. XLNet 如何实现在不加 [Mask] 情况下利用上下文信息呢?
XLNet 通过 Permutation Language Modeling(PLM)重排输入文本,使得当前词的下文也有可能出现在当前词的「上文」中,而实际的操作不是通过改变文本输入顺序来实现,而是依靠关键的 Attention Mask 机制来完成的。
在Transformer内部,通过 Attention 掩码,从 T 的输入单词里面,也就是 Ti 的上文和下文单词中,随机选择 i-1 个,放到 Ti 的上文位置中,把其它单词的输入通过 Attention 掩码隐藏掉,于是就能够达成我们期望的目标(当然这个所谓放到Ti的上文位置,只是一种形象的说法,其实在内部,就是通过 Attention Mask,把其它没有被选到的单词 Mask 掉,不让它们在预测单词 Ti 的时候发生作用,如此而已。看着就类似于把这些被选中的单词放到了上文 Context_before 的位置了)
采样序列的全排列,目的就是为了生成这个 Attention Mask,实际的文本输入并不受任何的影响。
那这个 Attention Mask 是如何生成的呢?
还是以排列 3->2->4->1 为例,去生成 Content stream 中的 mask,1 前面有 3,2,4,再加上自己,所以上图中第一行都为红点;2 前面只有 3,再加上自己,所以第二行的二三列都为红点,依次类推,就可以得到这个排列对应的 Attention Mask。
注:红点位值为 0,代表这个位有用,白点位值为 -inf,代表这个位被 mask 掉。
2. 为什么不直接在attention掩码矩阵中只把当前的单词掩盖住来获取上下文的信息呢?直接mask住左上到右下的对角线构建双向语言模型不行吗?
XLNet 实际上仍然遵循语言模型的预测模式(AutoRegressive Language Modeling),即从左往右依次预测,如对于排列序列:3->2->4->1,预测 2 时用到了 3 信息,预测 4 时用到了 3、2 信息.……因此,它本质还是需要一个上三角/下三角 mask 矩阵,在第一幅图的 content stream 矩阵中,把第 4 行的左边两个红点移到第 4 列中去,就变成了一个三角矩阵了,和 Transformer decoder 中的 mask 矩阵是一样的。
那为什么要这样的三角矩阵呢?直接 mask 住左上到右下的对角线可以嘛?
答案是不行,mask 掉对角线在预测时可以不看到当前词,但是会提前看到后面的词,这样在预测后面词的时候就相当于提前发生了泄露。
另外,要提及的一点是,XLNet 的从左到右和一般语言模型(如 GPT)的从左到右稍微有一点区别,GPT 的输入和输出是错位一个时间步的,即读入 1,2,3,然后在 3 的位置预测 4;而 XLNet 的输入和输出时间步数是相同的(这一点类似于 BERT),输入 1,2,3,4 并在 4 的位置预测 4。当然,XLNet 不会读取第 4 个时间步的单词(否则有信息泄露),仅仅利用位置 4 的 position embedding,告诉模型现在想要预测第 4 个位置,所以最终预测是用的 query stream,不含当前时间步文本信息 [2]。
不会,因为 BERT/XLNet 底层的特征提取器都是 Transformer,而不是时序敏感的 RNN/LSTM。
在 BERT/XLNet 中,时序信息是通过 Position Embedding 获取的,每个词最后的 embedding 都是已经叠加了 Position Embedding 的,采样不同的排列,影响的是每个词能看到的「上文」,但这个「上文」的 Position Embedding 是由它在原始输入文本中的位置决定的,而不是排列之后的位置。
比如,两种排列 3->2->4->1 和 2->3->4->1 对于预测 4 来说是没有差别的,因为 4 看到的上文都是 2 和 3,它们各自最后的 embedding 不会因为采样排列顺序不同而变化。
参考文献
[1] https://zhuanlan.zhihu.com/p/70257427
[2] https://www.zhihu.com/question/330307904/answer/721986216
更多阅读
#投 稿 通 道#
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱:hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。