订阅
纠错
加入自媒体

中科院计算所副研究员冯洋:神经机器翻译的训练改进和解码提速

2020-04-07 16:18
将门创投
关注

2. 非自回归解码

最后介绍一下基于非自回归的解码方法,传统的解码方法是顺序生成的。如果能够使得解码的时候并行的方式生成,这速度将会大大的提升。

传统的非自回归模型的做法是,在Transformer Encoder端头部加一个Fertility预测,用来预测每个源端Token能翻译成一个目标端的Token,然后根据预测的结果,将源端的Token拷贝到Decoder的输入,如果一个源端Token能够翻译两个目标Token,那就拷贝两次,如果源端Token不会翻译成目标端Token,那就不拷贝。由于每一步输出的译文是没有给到下一步的,所以是可以并行的。对于Fertility的训练是采用某种对齐模型,通过计算源端和目标端的对齐关系,然后就可以得到源端和目标端的对齐结果,就可以采用监督的方式来训练Fertility分支。

该方法有一个问题,就是在翻译当前步的时候没有考虑上一步的翻译信息。这样就可能导致翻译结果的流畅度不够好。我们的方法就是在该方法的基础上添加了序列上的信息。这样模型既能并行执行,又能考虑的到前后的序列关系。

我们的工作分为两个方面,一个是在训练上添加序列信息,一个是在模型上面同样也添加序列信息。序列训练采用的是Reinforce的方法,Reinforce的方法非常难以训练,这是因为其方差非常大,方差大的原因是强化学习episode(一条轨迹从开始到结束)的搜索空间非常大,我们每次只是采样出一个episode,然后根据这个episode进行计算,通过大数定律,我们可以假设这最终得到的是一个梯度的无偏估计。但是在实际情况下,抖动是非常大的。

将Reinforce算法应用到我们这个场景,首先看第一个公式,由于目标端词的概率是独立的,所以就可以写成连乘的形式,第二个公式就是传统的Reinforce公式,就是翻译的reward。是通过前向后向算法计算出来的当前步的reward。

上面的slides介绍的是计算reward时候的不同,接下来看sampling机制的区别。根据生成前后词的独立性,每一步我们并不是采样出一个词,而是采样出K+1个词。这样的话就可以看做我们一次更新的过程中考虑到更多的episode,而不是仅用一个episode就去训练了。具体的做法是,每一步,我们先取Top-K,计算一下损失函数的值,然后从剩下的Token中再采样出来一个。我们将这两部分的loss合起来,是为了保证无偏估计。为前k个翻译的概率的和。

另外一个方法就是模型上的改进,在非自回归层的上面加上自回归层。具体的做法是,模型分为 Bottom Layer,Fusion Layer,Top Layer。Bottom Layer就是之前介绍的非自回归模型,Fusion Layer的作用是将非自回归模型的输出和其Embedding整合起来,Top-Layer和Transformer 的解码器基本一致。

实验结果:AR(Transformer),NAT(非自回归的方法),IRNAT(迭代的非自回归方法),最后是我们提出的方法,第一种是在训练的过程中引入序列信息,第二是在模型上进行改进。作为对比的数据集有三个,前两个数据集比较小。主要关注第三个数据集。可以看出,使用NAT来代替AR模型的话,效果会降6个点左右,迭代的方法会带来1到2个点的提升。我们提出的reinforce方法和传统的reinforce方法相比,有0.6个点的提升。加上回归层的模型已经接近Transformer的效果了。关于速度的提升,如果仅训练的时候采用序列信息,速度可以提升10倍。如果是NAT加上自回归层的方法,速度也可以提高4倍左右。

这里有一些翻译实例,可以看出 NAT-base的方法流畅性不够好,重复很多“more more …”,因为没有考虑序列信息,所以导致结果的流畅度不行。使用我们提出的reinforce方法,能够一定程度上的缓解流畅度的问题,但是问题还是存在。通过使用NAT+AR的方法,能够更好的缓解流畅度的问题。

<上一页  1  2  3  4  5  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

    人工智能 猎头职位 更多
    扫码关注公众号
    OFweek人工智能网
    获取更多精彩内容
    文章纠错
    x
    *文字标题:
    *纠错内容:
    联系邮箱:
    *验 证 码:

    粤公网安备 44030502002758号