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个词对应的向量 E2′E_{2^{'}}E2

根据图中Content stream中的mask, E2′=a2E2+a3E3E_{2^{'}}= a_{2} E_2 + a_{3} E_3E2=a2E2+a3E3,其中 E2E_2E2 表示第2个词对应的向量,a2a_2a2表示第2行第2列红点位置对应的attention score,其他同理。这样在 E2′E_{2^{'}}E2 中就看到了它的下文 E3E_3E3,就像是把 E3E_3E3 放到了它的上文位置一样,但实际顺序并没有改变。

采样序列的全排列,目的就是为了生成这个 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]。

3、虽然不需要改变输入文本的顺序,但XLNet 通过 PLM 采样输入文本的不同排列去学习,这样不会打乱或者丢失词汇的时序信息嘛?

不会,因为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不会因为采样排列顺序不同而变化。

XLNet的实现,确实很惊艳,希望这篇文章能帮你掌握 XLNet 的关键实现机制——Attention Mask。

[1] https://zhuanlan.zhihu.com/p/70257427

[2] https://www.zhihu.com/question/330307904/answer/721986216

超细粒度分析 XLNet 中神奇的 Attention Mask相关推荐

  1. 超细粒度分析XLNet中神奇的Attention Mask

    ©PaperWeekly 原创 · 作者|海晨威 学校|同济大学硕士生 研究方向|自然语言处理 BERT 后时代,XLNet 在 20 个任务上超越 BERT,引起不小的关注.最重要的改进是 XLNe ...

  2. 【MHA】之 Attention Mask (with back forward trace) / Causal Mask (with back trace)

    文章目录 1. Attention Mask or Causal Mask 2. Causal Mask (with n_backtrce) 3. Attention Mask with backst ...

  3. 细粒度分析与Bilinear CNN model(附代码实现)

    前言 有时,我们逛街时看到不同的狗,却不知道其具体品种,看到路边开满鲜花,却傻傻分不清具体是什么花.实际上,类似的问题在实际生活中屡见不鲜,人类尚且如此,更别说人工智能了.为了解决这一问题,研究者们提 ...

  4. 什么是XLNet中的双流自注意力

    2020-02-19 21:02:43 作者:Xu LIANG 编译:ronghuaiyang 导读 理解XLNet中的双流自注意力机制. 在我之前的文章什么是XLNet,它为什么比BERT效果好?中 ...

  5. 13万字详细分析JDK中Stream的实现原理

    前提 Stream是JDK1.8中首次引入的,距今已经过去了接近8年时间(JDK1.8正式版是2013年底发布的).Stream的引入一方面极大地简化了某些开发场景,另一方面也可能降低了编码的可读性( ...

  6. 【机器学习】机器学习在爱奇艺视频分析理解中的实践

    原标题:大规模机器学习在爱奇艺视频分析理解中的实践 AI 前线导读:视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着 AI 时代的带来,互联网视频应用高速发展,视频更成为一种人人可 ...

  7. 【视频分析】大规模机器学习在爱奇艺视频分析理解中的实践

    原标题:大规模机器学习在爱奇艺视频分析理解中的实践 AI 前线导读:视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着 AI 时代的带来,互联网视频应用高速发展,视频更成为一种人人可 ...

  8. 细粒度分析综述(Fine-grain image analysis)

    细粒度分析(Fine-grain image analysis) 简介: 细粒度性质会引起的小的类间变化和大的类内变化,我们将现有的 FGIA 技术研究分为三大类:细粒度图像识别.细粒度图像检索和细粒 ...

  9. 中维报警邮件服务器,主打智能分析,中维世纪智能先锋系列产品来了!

    原标题:主打智能分析,中维世纪智能先锋系列产品来了! 中维世纪智能先锋系列产品主打"智能分析",包含JVS-C-BP1H2M-AG.JVS-C-BP1H2M-PG(支持POE).J ...

最新文章

  1. Linux进程状态解析之R、S、D、T、Z、X
  2. windows 技术篇 - 启动项里没有的程序设置为开机启动方法
  3. 极速发展的饿了么订单系统架构演进--转
  4. linux网卡内核文件在哪里,linux-2.6.35内核配置和网卡驱动添加
  5. 在大促中什么影响了数据库性能
  6. Java 读写 hdfs文件或者目录
  7. 解决the NTP socket is in use, exiting问题
  8. 读书笔记之《The Art of Readable Code》Part 2
  9. centos网卡发送被占满了_CentOS 查看实时网络带宽占用情况方法
  10. 个性化推荐中的数据稀疏性
  11. 没完全读懂的《人间失格》
  12. Jedis hget连接好久没有反应
  13. 计算机系统:系统级I/O
  14. 金士顿DT100 G3 PS2251-07海力士U盘量产修复成功教程
  15. php mysql日程管理_9.3 日程表数据库设计
  16. 一次培训机构的面试经历
  17. 黏土基纳米复合水凝胶/PVA/PAA/BC复合水凝胶/聚乙烯醇PVA基复合水凝胶/壳聚糖/液晶(CS/LC)复合水凝胶/PVA/季铵盐壳聚糖复合水凝胶/有机-无机纳米复合水凝胶定制
  18. 《Python机器学习——预测分析核心算法》——2.5 用实数值属性预测实数值目标:评估红酒口感...
  19. linux 两个文件比较是否完全相同
  20. 基于CNN的花卉识别

热门文章

  1. 软件开发标准组织结构
  2. 主机与开发板直连nfs配置与挂载
  3. 如何通过contactId来查找联系人信息-android
  4. 鸿蒙手机生态办公软件,华为备战鸿蒙系统手机!HMS国内开启测试:打造自主软件生态...
  5. mysql 压缩uuid长度_UUID不失精度,长度改进
  6. 最小二乘法拟合圆心与半径
  7. Duplicate keys detected: '0'原因及解决方法
  8. JVM GC原理及调优的基本思路
  9. vue文件夹目录详解教程
  10. Linux 中vim保存文件时出现Can‘t open file for writing问题