“香侬读”是香侬科技(Shannon.AI)推出的栏目,每周解读NLP或前沿、或经典的论文,捕捉时下最新见解,探究未来发展趋向。欢迎大家广泛讨论、交流,也欢迎推荐优秀的文章与我们一起分享。

论文标题及作者

^1 KERMIT: Generative Insertion-Based Modeling for Sequences, from Google and UCB, William Chan, Nikita Kitaev, Kelvin Guu, Mitchell Stern

^2 Insertion Transformer: Flexible Sequence Generation via Insertion Operations, from Google and UCB, Mitchell Stern, William Chan et al.

^3 Insertion-based Decoding with automatically Inferred Generation Order, from FAIR and NYU, Jiatao Gu, Qi Liu, Kyunghyun Cho

^4 Levenshtein Transformer, from FAIR and NYU, Jiatao Gu, Changhan Wang, Jake Zhao

^5 Non-Monotonic Sequential Text Generation, from NYU, Sean Welleck, Kiante Brantley et al.


WARNING:长文预警!长文预警!长文预警!

前言

在之前这篇文章中我们提到了AR和BERT各自的优缺点,对于AR而言,它有下述的优点:

  • 依赖性,可以在一定程度上建模语言符号的相关性
  • 线条性,单方向生成语言符号,契合人类读、说习惯
  • 简便性,使用简单的RNN模型可以非常便捷地训练和推理,并且效果较好

然而,AR的模式也具有不可避免的缺点:

  • 生成方向固定,不能充分利用上下文信息,而且单方向生成的效果是否是最佳也存疑
  • 缺乏可解释性,由于单一方向的生成,我们无法解释生成位置与语法特征的关系

鉴于以上的特点,我们可能会想,有没有那种Non-AR的方法,在不失较多效果的情况下,还能够满足下面尽可能多的条件:

  • 能够学到最优的生成顺序,而不是单一地按照单方向进行生成
  • 生成的顺序能够有可解释性,即是否在生成中具有某种模式
  • 提高生成的效率,最好能够在一定程度上并行 - 模型还能在生成之后进行动态修改

可以看到,当下流行的seq2seq的AR结构(如LSTM、Transformer)不能满足上述任何一个条件,这是AR的固有缺陷决定的,因此我们有必要对Non-AR的方法进行研究,来进一步揭示深度模型的生成规律。下面,我们将一起探究近期的五篇论文,看看它们是否解决了上述问题,效果和AR相比又如何。注意,本文不会逐篇翻译论文,而是从思考的角度交叉讲解,如有疏漏,还望谅解!

背景:AR与Non-AR——狭路相逢勇者胜

按照老规矩,我们还是首先来简要回顾一下AutoRegressive和Non-AutoRegressive模型。

AutoRegressive模型

自回归模型简单地说就是“用过去预测未来”,即序列

满足:

可以看到,

依赖于自身之前的信息
,这也就是“自”的由来。我们的文本生成任务是怎样的呢?举最简单的RNN的例子:

可以看到,每一个时间步

都和前一个隐状态
有关,因为RNN理论上可以归纳若干连续步的信息,所以实际上
多少都含有
的信息,也是一种“过去预测未来”的方法。如果用概率来表示,那么就可以写作:

这里

可以是
,也可以是

Non-AutoRegressive模型

非自回归模型简单来说就是不按照单一方向进行生成的模型,首次在机器翻译任务上被提出^6。而且,我们又不能丢失其中的相关性,这就要求我们需要引入一个隐变量。所以,我们现在的任务是最大化:

这里

是一个隐变量用来建模
的相关性。这时候,
就不一定是
的上文了,所以这时候我们对其进行并行,可以大大提高生成效率。但是,理论上讲,由于相关性的丢失,模型的结果可能会迅速降低,而^6提出的方法可以以较小的效果为代价换取推理速度的大幅提高。当然了,仅从^6中看,的确,Non-AR还有很多疑问之处,而且生成的效果也没能普遍达到AR,似乎我们没有理由去继续选择、研究Non-AR。但是,事实真的是这样的吗?我们需要进一步的思考。

思考:从AR到Non-AR——几时红樱吹绿荷

现在我们要思考的是,如何进行Non-AR生成。也许你会想到,我们可以同时从两个方向生成,然后让它们进行交互^7。的确,这确实是Non-AR的方法,因为一个方向在每个时间步的生成不仅依赖于本方向之前生成的结果,而且还依赖于另一个方向的生成结果。然而,这种方法是非常平凡的,因为本质上没有突破AR的框架,在训练和推理时相比AR方法也没有显著优势。

另外一个非常朴素的想法是,我们可以预先定义生成的顺序,比如先生成词典中常见的词,或者先生成标点等^8。这时候我们可以采用两趟(two-pass)生成的方法,在第一趟生成我们首先定义要生成的符号,对暂时不生成的符号产生一个占位符,然后在第二趟再填充这些占位符。如果第二趟的生成不考虑第一趟生成的符号,那么整个过程依然是AR的,尽管分为了两次。如果第二趟的生成时考虑第一趟的符号,并且考虑了位置的关系,那么整个过程就是Non-AR的。^8表明这些预定义的顺序并不比普通的AR更加优越,只是相对而言先生成标点与功能符号效果更好。在这个Non-AR过程中,由于两趟生成过程,模型的推理过程并不具备优势,虽然是Non-AR模式,但是我们还是只能一个一个生成,不可并行。

既然双向和预定义生成顺序不可行,那么我们就要另辟蹊径。回到我们的语言,我们会发现,大部分情况下我们说的句子并不是其中每个词都和其他词有关联。比如:“我和广州的张宝宝赛跑。”在这里,“我”和“张宝宝”没有直接关系,但它们都是“赛跑”的论元,在这个角度上具有间接联系,因此,假如模型能够首先生成“赛跑”,那么下面完全可以一起生成“我”和“张宝宝”,再生成“和”与“广州的”。这是因为这里的“和”实际上不是个连词,而应该是个介词,“广州的”是“张宝宝”的修饰成分。现在的问题是,如果我们只是说生成这些符号,得到了 [ 赛跑,我,张宝宝,和,广州,的 ],还不能说生成结束。因为这些符号的位置难以确定,这是一个难点。一个非常naive的想法是,排序!我们可以额外搭建一个排序网络,把这些符号统统塞进去,输出最后的句子。然而,这样做效率太低。有没有更高效的办法?当然有!这就是我们下面要隆重介绍的内容。

方法:插入与删除——把山看来旧又新

简单插入^2

上面说了,我们想要边生成边对生成符号实现排序,我们自然就想到插入操作!在生成的每一步,我们不仅要选择生成一个符号,而且要判断这个符号所在的当前序列的位置。下图是^2中的例子:

在这个例子中,我们要生成的句子是“three friends ate lunch together”,如果每次生成一个,可以从空序列 [ ] 开始,如上图左。对于有

个元素的序列 [
,
,
],则有
个槽供插入。如果我们允许一次生成多个,那个对于每个字符,我们同样要去判断所在的位置。注意到,我们这里的插入不允许生成之后的交换,比如,首先生成了 [ friends, three ],那么之后three就始终在friends之前了,这当然有缺陷,后面我们再说优化方法,现在我们从简单的情况开始。

那么显然,在推理的每一步

,我们基于已经生成的
个符号,可以参数化为:

这里

是字典
中的某个符号,
是所在位置,
是对应的参数矩阵。这种方法的参数量为
。另外的方法是利用链式法则:

这里

的第
个表示,总的参数量为
。注意到上面这两种方法考虑的位置都是相互独立的,忽视了已经生成的文本之间的相关性与跨槽的相关性,为此,我们还需要考虑槽之间的联系。所以有下面的方法:

这里的

用于将上下文向量
映射到为一个共有的字典空间向量

现在的问题是,我们来怎么进行训练,而且保持训练和推理过程的匹配。^2给出了三种方法:从左到右,二叉平衡树和任意顺序。

从左到右

从左到右的方法比较简单,在给定样本

的情况下,在第
步,我们去优化

二叉平衡树

从左到右的方法不能并行,因此我们想要使得生成能够并行。一个自然的想法是以平衡树的方法来生成。譬如,我们想要生成 [ A,B,C,D,E,F,G ],那么可以按照下面的顺序生成:[] -> [ D ] -> [ B,D,F ] -> [ A,B,C,D,E,F,G ]。为此,在训练阶段,对给定样本

,我们 首先从
中取样一个子序列
,对每个字符有0.5的概率保留或丢弃。但是这样的话会使得子序列的长度一致地接近
,比较短或比较长的序列没有办法进行训练。所以,我们首先抽样一个长度
,然后再以长度
中抽样子序列。对于抽样操作,我们只需要将下标集合
随机shuffle再取前
个按照原来的顺序排列即可。

假定现在我们选定了长度的

,对每个槽
,令
为在槽
处待插入的字符序列,注意这里的下标都是原序列中的下标。为了生成二叉平衡树,我们首先定义一个距离函数:

然后再定义

:

由于

取遍
,显然
时取最大。下面我们就可以定义损失函数:

任意顺序

为了鼓励模型自动学到在何位置生成何符号,我们可以使用任意顺序的生成方案。为此,我们只需要将(13)式中令

即可:

下图是二叉平衡树和任意顺序的损失分布:

可以看到,平衡树损失鼓励模型优先生成中间的符号,而任意顺序使得生成每一个符号的概率相同。

在推理的时候,我们也有两种方法:贪心推理和并行推理。贪心推理很简单,每一步选择概率最大的即可。对于并行推理,在每一步我们首先要对每一个槽计算出现在其中的最大概率的符号:

这时候,如果我们采用的是(6)的分解式,我们已经得到了

。如果采用的是(5)式,可以进一步写为
。无论哪种方法,条件概率都可以并行计算。接下来就可以按照某种策略选择插入或者不插入,这样一来,时间复杂度最低可到

整个模型都是基于Transformer的编码-解码结构。

更强的生成模型^1

注意到上面的方法还是基于Encoder-Decoder结构的,因此不能对联合概率

建模,我们希望能直接对
建模,从而可以简单地得到
,这样一来,我们就可以像BERT那样,对残缺的输入我们可以进行补齐。不同的是,我们不需要进行额外的掩码,而是基于模型自己的判断,在需要补齐的地方进行插入。

对于给定的序列

和生成顺序
,我们可以得到对应的插入序列
,注意到这里
是第
步的相对位置,而不是
中的绝对位置。比如,我们想要生成(A,B,C),按照顺序()->(C)->(A,C)->(A,B,C),那么就有
,且
。请始终记住
是绝对位置而
是相对位置。再令
为前
个生成的有序序列,如

这样,我们就可以进行分解:

最后的等式应用了Markov假设。对于

最简单的方法是采用
上的均匀分布。

但是,现在问题是上式的复杂度是

,我们进行逼近:

现在用

进行替换:

然后我们把

处分为三部分:

为了计算

,我们就可以按照下面的步骤,上式从左到右:

1. 抽样

2. 抽样

3. 计算

在推理阶段,我们按照^2,使用贪心或者并行的策略。

如果我们有序列对

,我们就按照BERT的方法进行连接。比如现在
,又可以建模
。几个模型图比较如下:

可以看到,这个方法和BERT具有相似的结构,唯一不同的是,BERT输出的是输入中被Mask的部分,而该方法输出的是插入的位置和字符。而且,最关键的是,该方法还可以用于生成任务。这就在上面的Insertion Transformer的方法上得到了极大的泛化。

生成模式^5

上面的方法尽管可以并行,但是我们不能从中窥见生成模式,我们还是希望可以找到某种生成的模式或规律,探究模型在生成的时候到底经历了什么,并且同时还可以并行。

自然地,我们想要把树状生成利用起来。上面的平衡树方法是非常“整齐”的,因为我们钦定了每次都要去生成最中间的一个符号,这样一来就丢失了其中的生成模式,要是我们想让模型自动去生成这个树呢?比如,现在生成了一个根节点,然后再生成左右子节点,然后再生成子节点的子节点,以此类推,但不同的是,这棵树不一定平衡,甚至可能退化成一条链,但我们获得了模型的生成模式,如下图所示:

我们用符号<end>表示当前子树生成结束,故当前字典为

表示所有可能的字符串,且
为一个状态序列,如上图
< are >,
< are, how >。一个动作
表示当前要生成的字符,然后添加到
后。一个策略
就是根据当前状态
,在当前父节点的前后要生成怎样的字符
,即
。这样一来,对于同一个序列,就有很多不同的树,我们因此就有可能从中得到生成的模式。

假定我们只有一个序列

。现在的想法是,在第一步我们首先生成任意一个单词
作为整棵树的根节点,然后类似快速排序的思想,在
左边和右边递归地生成,由于我们希望树的中序遍历可以得到原始序列
,所以
左边的字符必须在
的左子树,同理对右子树。但现在的问题是,我们要按照怎样的策略进行生成?而且对同一个序列,有很多不同的树可以经中序遍历得到,我们该如何选择?答案是使用模仿学习^9和Learning-to-search^10。

所谓Learning-to-search,就是模仿一个参考策略

来学习当前策略
,为此,我们定义一个输入策略
和输出策略
。下面我们不断从
中抽样状态
,然后在
下对每个行为
计算一个运行代价,之后学到的
被训练去最小化这个运行代价。

用数学语言来说就是,我们用

表示
下进行
步得到的状态分布,用
表示运行代价,然后去优化:

现在我们要去选择

的选择
决定了我们要学习的策略
训练的状态分布。我们可以选择
的混合作为
,也可以选择仅使用
。后者更简单,我们本着从简的原则,使用后者。
的选择
就是我们要模仿的策略。由于
是参考策略,所以我们可以通过
完全根据序列构建出树,于是我们可以把
视为树的生成过程,在每一步都对应一个状态
和序列
。在每个
包含了合法行为,比如下图,在第一步,我们可以选择生成
中的一个,比如我们选择了
,之后,左节点的选择就只有
了,右节点的选择就有
,这些选择就是“合法”的。

概率由下式给出:

同样地,我们可以预定义三种不同的策略:任意顺序、指导策略和退火指导策略。

任意顺序

同简单插入的情况,这里我们令

,记为

指导策略

任意顺序的策略会导致一个问题:难以使得

去模仿。为此,我们可以考虑加入当前学习的策略

这样一来,既可以避免不合法的行为,也可以按照当前策略

继续学习。

退火指导策略

指导策略也有一个问题:它不会引导模型进行多样化的学习。因此,我们可以再适当加入

这里

随着训练从1线性递减到0。
的选择
度量的是经过输入策略的选择得到的状态与输出策略之间的误差,最常见的方法是使用平方误差。然而,有研究表明使用RNN时平方误差表现不佳,所以我们可以转而使用KL散度:

上面说的是给定单个句子

我们去生成它的树,如果我们要学习
怎么办?很简单,我们只需要利用seq2seq的架构即可。我们可以为
搭建一个编码器,用来生成一组
维的向量,记为
。比如我们可以使用LSTM或Transformer得到
,再送入到该模型中即可。

用这种方法,我们可以根据生成的树,清晰地看到生成的模式,下图展示了一些有趣的例子。首先我们来看看

的生成模式:

然后是

的模式:

最后我们把它们放在一起进行比较:

从这些例子中可以很清楚地看到,

没有显著的生成模式,根节点可以是动词,也可以代词或介词,因此具有多样性。相反,
具有显著的生成模式:遵循“先简单后困难”的顺序。可以看到,这种模式一般先生成标点,然后生成不定代词、叹词,最后才是动词名词等实词。

不受限生成^3

上面的三种方法,都需要我们自定义生成的顺序或策略,总之需要人工去干预。我们想解放和发展生产力,不用自己去干预,让模型自己学习顺序,该怎么办呢?让模型自己去搜吧!我们可以把这种方法叫做不受限的生成。

为了方便起见,我们还是沿用之前的记号,尽管这些论文中的记号都不同(苦笑)。我们还是取

为一个置换,这样
,且

这里

现在我们的主要任务就是,如何让模型自动去学习插入位置。注意到我们之前一直使用的是绝对位置,这个方法有一个问题:由于每一步的生成都会使得字符的位置发生改变,这就要我们进行额外的调整(至少还要多写一些代码对吧~),而且难以操作,尤其是送入单个网络的时候。我们想要避免这些麻烦,接下来我们可以用神奇的相对位置!

我们使用

来代替绝对位置
,其中
,且:
表示的是第
个字符和其他所有字符的相对位置,左边用-1表示,自己用0表示,右边用1表示。我们可以归纳为一个矩阵
。我们可以用相对位置还原为绝对位置(这是显然的):

你可能会问,用相对位置有什么优势呢?最大的优势就是,我们可以不用对

进行任何修改!我们只需要用
去得到
就可以了:

这样一来,我们每次就不用重新计算之前的隐状态,节省了时间,简便了计算。

假如现在我们已经生成了

及其相对位置向量
,对于下一个预测,我们要选择当前的一个字符
,把
插入到它的左边或者右边,这时候:

这里

如果
插在
左边,
插在右边。 一个生成例子如下:

整个模型依旧基于Transformer,不同的是,我们不仅需要预测下一个字符,还需要预测它的相对位置,即:

我们用最后一个表示

和参数
去预测字符:

然后再去预测其相对位置:

这里

。下面是整体模型结构:

我们还有最后一个问题:如何训练和推理。我们应该去优化(27)(28)式,但是由于高复杂度无法处理。相反,我们去优化Evidence Lower BOund(ELBO),通过引入一个近似后验分布

现在问题又又又又来了:这个

要怎么决定。一个simple的想法是,预定义不就好了嘛。没错,我们可以按照某些策略去定义,但是,这里我们想要模型自己去学习,这样,我们就需要Searched Adaptive Order(SAO)方法!(有点sao

我们要这样的

,使得从中抽样的
能让(28)式最大,即最有可能的生成顺序。为此,在每一步
,对每一个子序列
,我们评估剩下的字符
的概率和对应的位置
,基于此,我们选择最有可能的
个子序列作为新的
集合,并继续这个过程。这可以看作一种beam search,不过搜索空间是生成顺序
而不是字符空间。这样我们要优化的就是:

其中我们假定

上面的beam search可以帮助我们找到贪心下最优的生成顺序,但是,同时也减少了生成全局最优的可能性,为此,我们可以在beam search的同时加入dropout。

在实际的实验中,用上面的方法导致模型生成很多标点和功能符号,这是因为位置预测模块的学习比字符预测模块的学习快得多。为此,我们可以用一种固定顺序如L2R去预训练整个模型,然后再用SAO去微调。

现在我们可以由模型生成任意顺序了,但是,这种方法有一个问题:不能并行。因为该方法还是需要一个一个去生成字符和位置。我们还是想要能够在此基础上并行。

同步生成与修改:加入删除操作^5

现在好了,我们可以让模型自己学习最佳的插入顺序和位置,但是,问题又来了:我们的模型生成之后不能进行修改。假如现在要生成的句子是“你跑得比广州的张宝宝快”,但是,我现在已经生成了 [ 你,张宝宝,澳门 ] ,糟糕,生成了一个“澳门”,目标句子中根本没有,我想把它删除,怎么办?这时候,我们就要进一步引出“删除”操作了,一边插入一边删除,一边生成一边修改,岂不美哉?

我们可以用一个五元组来定义

,其中
是一个媒介(agent),它接受行为(actions)并返回新序列,
是长度最大为
的所有可能序列的集合,
是行为集合,
是反馈(reward)函数。反馈函数度量了生成序列和真值序列的距离,即
,由于操作基于插入和删除,自然地,我们就可以使用

Levenshtein Distance(是一种编辑距离)去度量。

是初始序列,要么为空,要么是由其他模型生成。媒介由策略
定义。

假定我们现在有一个序列

,那么我们的动作就是要去生成

删除

对序列

的每一个符号
,删除策略
作出一个二值决定,这可以用sigmoid实现。

插入

对插入操作,首先对

中所有的槽
给出了插入一个或多个占位符的概率;接下来,对每个占位符,我们生成一个字符

综合

我们综合上面的行为,把“删除——插入——生成”视为一趟,那么

。所以:

这里

。注意到,在每一种操作内,我们都可以进行并行!

整体模型结构依然是Transformer,解码端如下所示:

接下来的问题依旧是怎样学习策略。最简单的,我们还是可以用模仿学习。假设我们现在有一个参考策略

,这个参考策略要么使用真值,要么可以加入少许噪声。下面我们就可以优化下面的目标:

这里

是输入策略,我们不断从由它们导致的状态分布中抽样分布(序列),这些状态首先由参考策略运行,然后返回其行为,我们就是要去最大化这些行为概率。我们有两种方法定义输入策略:在真值上加噪或使用对抗策略。对于删除操作,我们可以定义:

这里

。这里
是任意待插入的序列,
取自参考策略,
取自当前策略。我们用一个
表明我们交替地从初始序列
中选取。用这种方法,我们既可以学习对初始序列
如何删除,也可以学习在整个过程中如何对序列删除。同理,对于插入操作,我们有:

这里

。这里的
是从真值序列中随机丢弃一个字符。为方便理解,我们有下面的数据流图示:

现在最后的问题是如何构造参考策略。一是可以使用真值策略,返回的是最优行为

这里使用Levenshtein Distance进行度量。

二是可以使用一个教师模型。我们首先训练一个AR模型,然后把真值序列

用教师模型的beam search结果
替换。

这个方法是上一个方法的大幅改进,既可以边生成边修改,而且可以并行,效果速度两开花。

小结

下面我们对这五种方法做一个比较,为简便起见,我们把这五种方法分别命名为:InsertionKERMITNon-MonotonicInDIGOLevenshtein。如下表所示:

表现:更好,更快——硕果含露待明朝

在本节我们来看看上面这些方法的实验结果,我们不会对每个实验事无巨细地呈现,而是选择具有代表性的实验及其结果。首先,我们来看看^6在MT上的结果:

可以看到,Non-AR的方法至少是AR方法速度的两倍,而且,我们还可以牺牲效果换取更高的速度。当然,这样的代价在BLEU评估指标下显得有些过多,我们还需要减少效果代价。

由于方法上的不同,我们可以期待Insertion可以有更好的效果,下图是在WMT 2014 English-German 验证集上的实验结果:

可以看到,使用平衡树的方法普遍优于任意顺序的方法,甚至在加入数据蒸馏后能够优于传统的L2R生成,而且令人惊讶的是,并行解码的方法可以取得更好的效果。为了进一步说明,下表展示了在测试集上的结果:

可以看到,使用平衡树的方法,无论是贪心还是并行,都能和Transformer的AR方法匹敌,而且理论上可以达到

的复杂度,尽管不如

NAT,但是在效果上有了大幅改进。这验证了简单插入的有效性。那么,对于更加复杂的模型,如 KERMIT又如何呢?下图依然是 WMT 2014 English-German 测试集上的结果:

可以看到,KERMIT最优的结果甚至超过了Transformer baseline,而且可以控制复杂度至

。而且,由于

KERMIT特殊的模型结构(类似BERT),我们可以直接在GLUE上进行评估:

可以看到,KERMITGPT不知道效果好到哪里去了,虽然比BERT略差,但是KERMIT还可以用于生成任务,这一点BERT目前还望尘莫及。

下面我们再来看看树状生成模式模型Non-Monotonic。我们知道,AR的生成方法不能直接用于句子补齐,即扣掉句子中的一些词,要求我们进行补齐。这一点和BERT比较相似,但我们又知道BERT不能直接用于生成任务,这就在这两个任务之间造成了隔阂。最近的XLnet为消弭该隔阂提供了解决思路,但还是没有成熟的解决方案。在这里,Non-Monotonic 的方法不仅可以用来对生成模型进行解释,而且还可以消除这两种任务的隔阂。具体地,对于句子补齐任务,我们只需要将模型在LM上预训练,然后给出句子中出现的词及其位置,我们就可以得到一个初始树,然后继续在这棵树上进行生成即可。比如下面的例子:

对于MT,实验在IWSLT’16 German-English上进行,结果如下:

可以看到,该方法比AR略有不足,这是因为我们将生成强行限制在了树状上,极大减小了句子空间,这可能就是模型命运的选择吧。

下面我们要介绍的是InDIGO在MT上的实验,结果如下:

这里,中间的若干行都是不同的AR生成策略。可以看到,在三个数据集和各种指标下,SAO都比AR好,而且,从下表可以知道,bootstrap和dropout都有贡献:

下面给出了一个生成的例子:

我们从中可以发现,实际上SAO并没有和L2R的方法差太多,一个明显的不同是,SAO首先将句子分为连续的字符段序列,在每个段内按照L2R的方法进行生成,这是因为,相比L2R的方法,将句子分为小段,可以更好地收集上下文信息,不会使得与最先生成的字符相距太远而导致信息丢失

最后我们来看Levenshtein。下表是在 WMT'16 Ro-En,WMT'14 En-De,WAT2017 Small-NMT En-Jahe Gigaword上的结果:

可以看到,Levenshtein oracle的效果堪比Transformer,而加了Transformer tearcher之后表现几乎总好于Transformer,并且还快得多。

此外,我们还想评估模型的修改效果,为此,我们还进行了APE实验,下表是实验结果:

在这里,左边的结果是BLEU值,右边的结果是TER翻译错误率。可以看到,Levenshtein几乎承包了所有任务上的最优结果,表明了这种修改的可行性。为了更加直观地展示,下图是在MT和APE上的折线图:

图例中的D表示deletion,P表示placeholder。可以看到,LveT已经优于Transformer,如果再加上真值deletion和placeholder,可以进一步得到巨大提升。为此,我们可以借助人工标注大幅提升纯模型效果。

经过上述的若干实验,我们可以总结一下:Non-AR并不就不AR差,因为这一方面非常符合人类的语句生成与判断,另一方面也是对深度模型的挖掘。重要的是,我们还可以利用Non-AR去并行计算,这就缓解了长期以来AR被诟病的无法并行的问题(大名鼎鼎的Transformer的一个重要成果就是可并行)。更快,更好,是Non-AR的目标。

结论:简单点,生成的方式简单点——得二其一有新绩

现在我们知道了,对于生成任务而言,目前主流的是AR模式,但是近两年来Non-AR的模式有新竹蓬勃发展之势,相比AR,Non-AR最大的优势在于可并行且不失其效果。我们知道,从并行的角度来看,Transformer的提出可谓是解决了编码端的一大痛点,但是解码端的并行一直未能有好的方案提出。在过去的很多年内,新的AR模型结构不断推陈出新,但是都始终未能实现突破,直到^6的出现。我们认为,未来一个可发展的研究点就在Non-AR上,包括:

  • 如何像BERT那样进一步引入大量无标注数据进行预训练
  • 如何进一步提高并行效率,甚至在不失效果的情况下复杂度达到
  • 如何像Transformer那样实现任意字符表示间的交互,而且可以并行
  • 如何在模型自动学习生成顺序的情况下得到可解释性

上面的五种方法都只是对上述问题进行了初步回答,还有待进一步开发。当然,这不是说AR的方法就会被淘汰,就像有了Transformer之后LSTM依然大有可为。对于AR方法,我们可能需要进一步对其进行无监督方向的扩展,就像^11一样,把语法推导和AR联系起来,甚至还可以和Non-AR联系起来(当然这都是后话了)。

总而言之言而总之,无论是AR还是Non-AR,目前都还有巨大的探索空间,庞统还是诸葛亮,值得我们一起期待。

参考文献

Chan, William & Kitaev, Nikita & Guu, Kelvin & Stern, Mitchell & Uszkoreit, Jakob. (2019). KERMIT: Generative Insertion-Based Modeling for Sequences.

Stern, M., Chan, W., Kiros, J. & Uszkoreit, J.. (2019). Insertion Transformer: Flexible Sequence Generation via Insertion Operations.

Gu, Jiatao & Liu, Qi & Cho, Kyunghyun. (2019). Insertion-based Decoding with Automatically Inferred Generation Order.

Gu, Jiatao & Wang, Changhan & Zhao, Jake. (2019). Levenshtein Transformer.

Welleck, S., Brantley, K., Iii, H.D. & Cho, K.. (2019). Non-Monotonic Sequential Text Generation.

Gu, Jiatao & Bradbury, James & Xiong, Caiming & Li, Victor & Socher, Richard. (2017). Non-Autoregressive Neural Machine Translation.

Zhou, Long & Zhang, Jiajun & Zong, Chengqing. (2019). Synchronous Bidirectional Neural Machine Translation.

Ford, Nicolas & Duckworth, Daniel & Norouzi, Mohammad & E. Dahl, George. (2018). The Importance of Generation Order in Language Modeling.

Ross, S., Gordon, G., and Bagnell, D. (2011). A reduction of imitation learning and structured prediction to no-regret online learning.

Daume, H., Langford, J., and Marcu, D. (2009). Search-based structured prediction.

Shen, Yikang and Tan, Shawn and Sordoni, Alessandro and Courville, Aaron. (2019). Ordered Neurons: Integrating Tree Structures into Recurrent Neural Networks.

亲,更多NLP干货请关注我们的知乎“香侬慧语科技”与微信公众号“香侬科技”哦~ 如果您有优秀的有关NLP的文章推荐,您可以发送至邮箱qinghong_han@shannonai.com,一经采纳,我们会在当期“香侬读”栏目中注明惹~

gamit怎么利用glred生成测站时间序列_香侬读 | 按什么套路生成?基于插入和删除的序列生成方法相关推荐

  1. 网页一键生成app软件_施工方案不会写?4个工程人必备的自动生成软件,一键生成超便利!...

    对于工程人来说,施工方案和技术交底的编制是基本功,但对于新人来说,编制和整理起来还是有一定难度的. 今天整理了工程人必备的自动生成软件,可以自动生成技术交底.施工方案.施工横道图和施工图等,安装快速, ...

  2. vb不能插入png图片_收藏备用!!VBA操作图片【插入导出删除】

    作者学习VBA以来搜集的操作图片的代码都在这里了.这就是我说的用到时候修修改改的源代码. ▶▶▶单元格(合并单元格)插入图片 Pictures.insert通用性不如shapes.addpicture ...

  3. mybatis 增删改查、批量插入和删除以及自动生成uuid主键和分页

    Mapper接口: public int update(Admin admin); public Admin selectByUserName(String account); public List ...

  4. 目录树 删除 数据结构_数据结构:B树和B+树的插入、删除图文详解

    B树 1.1B树的定义 B树也称B-树,它是一颗多路平衡查找树.我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数.当m取2时,就是我们常见的二叉搜索树. ...

  5. NOMAO软件测试工资,基于混合遗传算法的测试数据自动生成研究

    为了提高软件测试中测试数据自动生成的效率,提出了一种基于混合遗传算法的测试数据自动生成的方法.在传统的遗传算法中引入模拟退火的思想,先利用遗传算法快速搜索到近优解,再使用模拟退火算法局部寻优,实现两种 ...

  6. IJCAI 2018 基于主题信息的神经网络作文生成模型

    本文介绍哈尔滨工业大学社会计算与信息检索研究中心(SCIR)录用于IJCAI 2018的论文<Topic-to-Essay Generation with Neural Networks> ...

  7. oxygen 生成java对象_利用oxygen编辑并生成xml文件,并使用JAVA的JAXB技术完成xml的解析...

    首先下载oxygen软件(Oxygen XML Editor),目前使用的是试用版(可以安装好软件以后get trial licence,获得免费使用30天的权限,当然这里鼓励大家用正版软件!!!) ...

  8. 异常检测时间序列_时间序列的无监督异常检测

    异常检测时间序列 To understand the normal behaviour of any flow on time axis and detect anomaly situations i ...

  9. python图书馆管理系统实验报告_基于Python的图书馆业务报表自动生成研究

    龙源期刊网 http://www.qikan.com.cn 基于 Python 的图书馆业务报表自动生成研 究 作者:辛海滨 来源:<电脑知识与技术> 2016 年第 27 期 摘要:针对 ...

最新文章

  1. 50行Python代码 就能轻松实现中英文对接翻译小程序
  2. mysql jdbc路径,mysql转存数据库后,如何修改jdbc:mysql的路径
  3. kafka查看topic中的数据_实战!Kafka Manager能统计出Topic中的记录条数吗?
  4. CF838C-Future Failure【dp,子集卷积】
  5. 我被跨系统的换行符折磨疯了~~~
  6. ubuntu pycharm mysql_ubuntu安装mysql pycharm sublime
  7. GEF: 图形拖拽处理
  8. sweetalert
  9. matlab按图像边缘抠图_PS抠图教程_PS抠图方法大全
  10. Falsy Bouncer
  11. 用c++随机生成10小学生算术题的课设
  12. java中线程池的实现原理:七参、四策
  13. C语言基础之14:结构和其他数据形式
  14. CDQZ多校集训题目--盛夏
  15. 论文笔记——EXPLAINING AND HARNESSING ADVERSARIAL EXAMPLES(解释和利用对抗样本)
  16. epic启动器在哪个文件夹_启动时|原神启动器在哪个文件中 启动器文件位置一览_234游戏网...
  17. html 组件化 编辑器,V14.0发布:组件化编辑器+数据透视表
  18. 基于jsp的酒店管理系统
  19. 存档用【20考研】国家线/34所自划线 集合!【计算机和软件专业】
  20. 2020-09-26 项目实践(一)

热门文章

  1. PHP+swoole 聊天窒 五子棋斗地主
  2. thinkphp框架的使用
  3. gsoap java_试图了解gsoap
  4. AndServer+Service 打造 Android 服务器实现 so 文件调用
  5. 分布式ID(唯一id-详解及教程)
  6. java炸弹游戏_java制作数字炸弹游戏-萌新疑点,Java语言交流,技术交流区,鱼C论坛 - Powered by Discuz!...
  7. js实现上拉加载更多
  8. GNSS基本概念(2):多路径效应
  9. 诗词-我儿名字藏头,你能猜出来,算你牛
  10. Linux系统中的软件管理详解(下)—搭建网络软件仓库及第三方软件仓库