论文地址:Insertion-based Decoding with automatically Inferred Generation Order

介绍

大多数的生成模型(例如seq2seq模型),生成句子的顺序都是从左向右的,但是这不一定是最优的生成顺序。
可能有人要说,反正最终都是生成一个句子,跟生成顺序有啥关系?
但是大量实验确实表明了从左向右生成不一定是最好的,比如先生成句子中的核心词(出现词频最高的词,或者动词等)可能效果会更好。

于是这篇论文就提出了自动推测最佳的生成顺序,考虑所有顺序的概率,优化概率之和。
但是对于任意一个生成顺序,如何还原原本的句子呢?
本文又提出了一个相对位置编码的方案,并且融合到了Transformer里。

传统序列生成模型

给定一个输入句子xxx,生成的句子yyy的概率可以被建模为:
pθ(y∣x)=∏t=0Tpθ(yt+1∣y0:t,x1:T′)p_{\theta}(y | x) = \prod_{t=0}^{T}{p_{\theta}(y_{t+1}|y_{0:t}, x_{1:T'})} pθ​(y∣x)=t=0∏T​pθ​(yt+1​∣y0:t​,x1:T′​)
其中规定输出句子的首尾单词y0y_{0}y0​和yT+1y_{T+1}yT+1​是特殊记号。

那么模型最大化正确输出的概率就行了。
解码的时候在每个时刻取概率最大的输出单词就行了,当然也可以加上beam search等方法提高性能。

InDIGO

本文将生成顺序看作隐变量π\piπ,那么对于一个输出句子yyy,他的隐变量可能取值是阶乘级别的。
我们取所有顺序的概率之和,作为输出yyy的概率:
pθ(y∣x)=∑π∈PTpθ(yπ∣x)p_{\theta}(y|x) = \sum_{\pi \in \mathcal{P}_{T}}{p_{\theta}(y_{\pi}|x)} pθ​(y∣x)=π∈PT​∑​pθ​(yπ​∣x)
而每个生成顺序的概率被定义为:
pθ(yπ∣x)=pθ(yT+2∣y0:T+1,z0:T+1,x1:T′)⋅∏t=1Tpθ(yt+1,zt+1∣y0:t,z0:t,x1:T′)p_{\theta}(y_{\pi}|x) = p_{\theta}(y_{T+2}|y_{0:T+1}, z_{0:T+1}, x_{1:T'}) \cdot \prod_{t=1}^T{p_{\theta}(y_{t+1}, z_{t+1}|y_{0:t}, z_{0:t}, x_{1:T'})} pθ​(yπ​∣x)=pθ​(yT+2​∣y0:T+1​,z0:T+1​,x1:T′​)⋅t=1∏T​pθ​(yt+1​,zt+1​∣y0:t​,z0:t​,x1:T′​)
这里多了一个变量zzz,用来表示生成的单词在原句子中的绝对位置。
还多了一项yT+2y_{T+2}yT+2​,表示句子生成结束。
为什么要用这一项呢?因为原来的结束符号< /s>被当作第二项输入进序列了。

这里就会出现一个问题,在每一步预测的时候,都不知道最终句子长度是多少。
那么怎么知道绝对位置zzz是多少呢?所以要用相对位置rrr来进行编码。

假设在ttt时刻,对于第iii个单词wiw_iwi​,采用一个向量来表示它的相对位置,每个维度取值只有-1,0和1三种。
ri,jr_{i,j}ri,j​定义为:如果wiw_iwi​绝对位置在wjw_jwj​的左边,就取-1;如果是一个词,就取0;如果在右边,就取1。
可以观察到这个时刻向量长度其实只有t+1t+1t+1,而且下个时刻长度就会加1。
将这些向量拼接成一个矩阵RRR,每一列表示一个单词的位置向量,这个矩阵关于主对角线对称的元素其实是相反数。

那么下一个时刻是不是这个矩阵得重算呢?不需要。
因为下一个单词无论插在哪里,都不会影响之前的单词的相对顺序,所以只要给这个矩阵RRR新增一行一列即可:

但是rt+1r_{t+1}rt+1​不能随便取值,不然可能是非法的,没办法还原到绝对位置。
所以这里定义rt+1,jr_{t+1,j}rt+1,j​这么算:
首先预测一个单词yky_{k}yk​,然后预测yt+1y_{t+1}yt+1​插入到它的左边还是右边。
如果j=kj = kj=k,那么如果插入到左边,值取-1,插入到右边取1。
如果j≠kj \neq kj​=k,那么yt+1y_{t+1}yt+1​和前面单词的相对顺序其实是和yky_kyk​和他们的相对顺序完全相同的,那么直接取rk,jr_{k, j}rk,j​就行了。

伪代码如下:

最后得到了相对位置之后,怎么还原为绝对位置呢?
只需要用下面式子就行了:
zi=∑jmax⁡{0,ri,j}z_i = \sum_{j}{\max\{0, r_{i, j}\}} zi​=j∑​max{0,ri,j​}
也就是看每个单词前面有多少单词。

模型

本文只修改了Transformer的解码器部分,因为对于随机的生成顺序,解码的时候绝对位置未知,所以传统的绝对位置编码行不通。

稍稍修改attention的计算方式:
ei,j=(ui⊤Q)⋅(uj⊤K+A[ri,j+1])⊤dmodele_{i, j} = \frac{(u_i^{\top}Q)\cdot(u_j^{\top}K + A_{[r_{i,j}+1]})^{\top}}{\sqrt{d_{\text{model}}}} ei,j​=dmodel​​(ui⊤​Q)⋅(uj⊤​K+A[ri,j​+1]​)⊤​
其中uuu是输出的隐层表示,Q,K,AQ, K, AQ,K,A是参数,AAA根据相对位置不同分为三个向量表示。

经过attention计算之后,得到了当前已预测词的表示矩阵HHH,那么下一个词和对应相对位置概率为:
p(yt+1,rt+1∣H)=p(yt+1∣H)⋅p(rt+1∣yt+1,H)p(y_{t+1}, r_{t+1}|H) = p(y_{t+1}|H)\cdot p(r_{t+1}|y_{t+1}, H) p(yt+1​,rt+1​∣H)=p(yt+1​∣H)⋅p(rt+1​∣yt+1​,H)
也就是先预测下一个单词是什么,再预测它的相对位置。当然也可以倒过来,只是实验效果不如这个。

预测单词的概率:
pword(y∣H)=softmax((ht⊤F)⋅W⊤)p_{\text{word}}(y|H) = \text{softmax}((h_t^{\top}F)\cdot W^{\top}) pword​(y∣H)=softmax((ht⊤​F)⋅W⊤)

预测下一个词应该插在哪个位置:
ppointer(k∣yt+1,H)=softmax((ht⊤E+W[yt+1])⋅[H⊤C;H⊤D]⊤)p_{\text{pointer}}(k|y_{t+1}, H) = \text{softmax}((h_t^{\top}E + W_{[y_{t+1}]})\cdot [H^{\top}C; H^{\top}D]^{\top}) ppointer​(k∣yt+1​,H)=softmax((ht⊤​E+W[yt+1​]​)⋅[H⊤C;H⊤D]⊤)
注意到这里不仅拼接上了下一个词的词向量,还区分了每个词左边和右边的隐层表示。

其实这里有个问题,一个词在wiw_iwi​的右边不就等价于在wi+1w_{i+1}wi+1​的左边吗?那其实这两个预测结果都是对的。虽然最后的rrr向量都是一样的。

目标函数

因为一个句子的可能排列顺序太多了,不可能一一枚举,所以这里最大化ELBO来代替最开始的概率之和。
对于输入xxx和生成yyy,首先定义一个生成顺序π\piπ的近似后验q(π∣x,y)q(\pi|x, y)q(π∣x,y)。
然后ELBO可以表示为:

注意这里如果近似后验训练中固定不变的话,第二项可以忽略。

然后就可以根据近似后验来进行采样,优化这个函数了,那么这个近似后验怎么定义呢?

第一种方法是定义为一个常见的确定的顺序,比如从左向右、从右向左等等,详见下表:

这种情况下,模型其实就变成了和普通的序列生成模型差不多了,只用最大化一个生成顺序的概率就行了,区别就是多了相对位置编码。

第二种方法是用beam search,这里称作Searched Adaptive Order (SAO)。
传统的序列生成模型其实也有beam search,不过那是在每个时刻解码概率最大那些子序列。
而这里的beam search空间更大,搜索的是整个排列的空间。
也就是在每个时刻,遍历所有的下一个单词和它的相对位置,找出最大的BBB个子序列。
最后的目标函数变为了:
LSAO=1B∑π∈Blog⁡pθ(yπ∣x)\mathcal{L}_{\text{SAO}} = \frac{1}{B} \sum_{\pi \in \mathcal{B}}{\log{p_{\theta}(y_{\pi}|x)}} LSAO​=B1​π∈B∑​logpθ​(yπ​∣x)
这里近似后验被定义为了:如果π\piπ在B\mathcal{B}B中,概率为1B\frac{1}{B}B1​,否则为0。

还有一些小trick,比如beam search加入噪声,这样可能采样到概率比较小的那些排列。
还有位置预测模块收敛的比单词预测模块更快,这就会导致模型最后总是先预测出高频词或功能词(大雾。。。)。
解决方法是先用给定的顺序(例如从左向右)预训练一遍模型,然后再训练beam search模型。

最终解码还是用上面的伪代码,只是加入了beam search。
但是这里是先预测的单词,再预测的位置,和训练时的beam search略有不同。

实验

实验主要做了几组机器翻译、词序还原、代码生成和图像标签生成,这里就简单看一下机器翻译结果,其他的详见论文。

机器翻译结果如下:

可以看出beam search的提升还是挺大的,而用随机顺序生成序列效果很差,用句法树的遍历顺序生成也挺差的。

其他的实验细节和结果详见论文,这里就不展开分析了。

总结

这篇论文提出了考虑多种序列生成的顺序,以此提升最终生成的效果,实验证明还是有效的。
为了记住这种顺序,还提出了相对位置表示,用来解决原始Transformer无法表示随机排列的问题。

但是总感觉beam search和相对位置表示的矩阵不是很优雅,很繁琐。
后续工作也提到了直接预测排列,而不是用beam search。
还有这种相对位置表示能否用在其他任务上,比如做成通用的位置表示?
不过这种“打乱顺序”的思想倒是挺不错的,很多地方可以用,毕竟人类看句子第一眼可能也会看到核心关键词嘛。

论文赏析[TACL19]生成模型还在用自左向右的顺序?这篇论文教你如何自动推测最佳生成顺序相关推荐

  1. 谷歌大脑团队任意图像风格化迁移论文详解,模型还可以跑在您本地浏览器里...

    图像风格化迁移是一个很有意思的研究领域,它可以将一张图的风格迁移到另外一张图像上,由此还诞生了Prisma和Ostagram这样的商业化产品.本文,我们将介绍谷歌大脑团队的一篇很有影响力的论文: Ex ...

  2. 干货!生成模型的评价与诊断

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 深度生成模型的巨大成功需要量化工具来衡量它们的统计性能.Divergence frontiers 最近被提议作为生成模型的评估框架,因为 ...

  3. 首次不依赖生成模型,一句话让AI修图!

    来源:机器之心 本文约4500字,建议阅读9分钟 本文为你介绍一套基于可微矢量渲染器的解决方案. 2022 年是人工智能生成内容(AI Generated Content,AIGC)爆发的一年,其中一 ...

  4. 扩散模型与生成模型详解

    扩散模型与其他生成模型 什么是扩散模型 扩散模型的简介 生成建模是理解自然数据分布的开创性任务之一.VAE.GAN和Flow系列模型因其实用性能而在过去几年中占据了该领域的主导地位.尽管取得了商业上的 ...

  5. Survey | 基于生成模型的分子设计

    今天给大家介绍MIT的Rafeal Gomez-Bombarelli教授发表在arXiv上的综述文章.文章对分子生成模型进行了分类,并介绍了各类模型的发展和性能.最后,作者总结了生成模型作为分子设计前 ...

  6. 【生成模型】关于无监督生成模型,你必须知道的基础

    大家好,小米粥销声匿迹了很长一段时间,今天又杀回来啦!这次主要是介绍下生成模型的相关内容,尤其是除了GAN之外的其他生成模型,另外应部分读者要求,本系列内容增添了代码讲解,希望能使大家获益,更希望大家 ...

  7. EasyNLP 中文文图生成模型带你秒变艺术家

    导读 宣物莫大于言,存形莫善于画. --[晋]陆机 多模态数据(文本.图像.声音)是人类认识.理解和表达世间万物的重要载体.近年来,多模态数据的爆炸性增长促进了内容互联网的繁荣,也带来了大量多模态内容 ...

  8. EasyNLP中文文图生成模型带你秒变艺术家

    作者:汪诚愚.刘婷婷 导读 宣物莫大于言,存形莫善于画. --[晋]陆机 多模态数据(文本.图像.声音)是人类认识.理解和表达世间万物的重要载体.近年来,多模态数据的爆炸性增长促进了内容互联网的繁荣, ...

  9. 判别模型和生成模型(Discriminative Model Generative Model)【转】

    又是碰到了一些简单的基本概念,但是仔细想想发现自己没有理解透彻,Search一下,总结如下: [摘要] - 生成模型:无穷样本==>概率密度模型 = 产生模型==>预测 - 判别模型:有限 ...

  10. 生成模型和判别模型直接的区别

    作者:JasonDing 链接:https://www.jianshu.com/p/d195b887a32e 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. 概率图分 ...

最新文章

  1. MIT将AI引入中学课堂,除了设计AI系统,还要学生思考背后的伦理
  2. php 运行外部程序_PHP实现执行外部程序的方法详解
  3. [CQOI2015]选数(数论分块+杜教筛)
  4. To B 的产品经理和 To C 的产品经理有什么差别? To B 的产品经理的价值如何体现?
  5. [Redux/Mobx] Redux怎样设置初始状态?
  6. 计算机活动感悟怎么写,计算机教学心得体会范文五篇.doc
  7. 城市大轰炸++(洛谷P1847题题解,Java语言描述)
  8. Win7,Win8下多实例运行Excel2010
  9. 干货!Kaggle座头鲸识别落下帷幕,冠军方案解读
  10. java编程艺术 高永强_Shardingsphere can not initialize xaTransaction问题
  11. https 带端口_基于scapy模块的8种端口扫描
  12. 2010年8月刊:精选热门微博
  13. API接口错误码设计最佳实践
  14. 火龙果(redpitaya)开发板常用接口C语言开发指南(一)——环境配置(持续更新中)
  15. switch怎么切换服务器账号,任天堂eshop如何换区 switch账号如何切换其他服地区
  16. Babel 是什么?· Babel 中文文档
  17. 你了解世界上功能最强大的开源数据库吗?
  18. 讨论 | 博士延期毕业?如何避免?
  19. JSONException: There is a cycle in the hierarchy
  20. pathway 中几张特殊的通路图

热门文章

  1. 2013年值得我们学习的网页设计作品【系列二】
  2. 现在在做的项目的一些感想.
  3. java day33【JavaScript基础】
  4. 细说show slave status参数详解(最全)【转】
  5. 利用python获取nginx服务的ip以及流量统计信息
  6. linux笔记_防止ddos攻击
  7. WinForm与WPF下跨线程调用控件
  8. 虽然保持了连续代码生产量但是仔细想想也没什么必要
  9. 如何保证数据库结构的合理性(三、建立可靠的关系)
  10. 【BZOJ5338】[TJOI2018]异或(主席树)