NAT模型如何同时兼顾性能、速度?蒸馏很有潜力!

2019-11-11 10:54:55 浏览数 (1)

作者 | 冯凯

单位 | 小牛翻译

编辑 | 唐里

原文标题:浅析基于隐变量的非自回归神经机器翻译方法

近年来,基于深度神经网络的机器翻译取得了飞速发展。目前大多数NMT模型都使用了编码器-解码器框架来实现,编码器将源语句的表示送入到解码器来生成目标句子;解码器通常以自回归的方式来工作,从左到右逐字地生成目标句子,第t个目标词的生成依赖于先前生成的t-1个目标词。

虽然最近提出的几个模型利用卷积[1]或者自注意力[2]使得训练过程高度并行化,加快了训练速度。但由于其自回归的特性,模型的推理过程非常缓慢,这对于实际的工业应用是个很大的挑战。因此,怎样提升模型的推理速度成为了一个新的研究热点。

自回归 vs 非自回归

自回归模型

自回归(Autoregressive Translation ,AT)模型需要用已生成的词来预测下一个位置的词,用概率模型来表示为:

这种自回归的解码方式符合阅读和生成句子时的习惯,能有效地捕捉到真实翻译的分布情况。它在机器翻译等任务上取得了较好的性能,并且波束搜索也能够为寻找近似最优译文提供了一种有效的局部搜索方法。但是也有其自身的缺点,主要表现在以下两个方面:

  1. AT模型存在ExposureBias 问题。自回归模型在前面产生错误会传递到后面的位置,这也是模型在长句子的翻译中表现差的原因之一。
  2. 解码器的每个步骤必须顺序地而不是并行地运行,因此自回归解码会阻止像Transformer这样的体系结构在推理过程中充分体现其训练时的性能优势。

非自回归模型

非自回归 (Non-Autoregressive Translation, NAT)模型打破了生成时的串行顺序,希望一次能够解码出整个目标句子,从而解决AT模型所带来的问题。一个简单的NAT模型将解码问题建模为:

其假设生成的目标句子的每个词都是完全独立的。但由于单词之间确实是存在着依赖关系,因此与AT模型相比,所学习的NAT模型只能获得较差的结果。为了缓解这种独立性假设过强的问题,一种方案是引入一个隐变量z来建模目标序列的相关性:我们首先从先验分布中采样z,然后对z进行条件化来非自回归地生成翻译:

隐变量提供一种声明性语言,用于指定复杂数据集中的先验知识和结构关系,能够轻松地通过条件独立性来指定模型约束。同时,深度学习可以使用功能强大的函数逼近器对这些条件概率进行参数化 ,可以天然的将两者结合起来。但条件概率的深度参数化通常使后验推断难以解决,而潜变量又会引入不可微点使反向传播复杂化。

另外,计算隐变量模型需要估计其后验分布,这个过程过于复杂因此无法计算。一个简单的方法是给隐变量赋予物理意义,为模型提供监督信号就可以直接拟合其先验分布而不用计算后验分布。例如下面的两种方法使用繁衍率或者语法树作为隐变量来解决这些问题。

NAT with Fertility

非自回归神经机器翻译的概念在ICLR18上首次被Gu [3]等人提出。与自回归模型相比,非自回归模型在实现上主要有以下两个区别:Decoder的输入和目标序列的长度。自回归模型每步的输入是上一步解码出的结果,当预测到EOS时序列的生成就自动停止了,然而非自回归模型却没有这样的特性。该工作采用Fertility Predictors的结果来作为隐变量,巧妙的解决了上面的两个问题。

模型细节

图1 NAT的模型结构图

由图1我们可以看出,NAT的Encoder与Transformer相比,多了一个Fertility Predictor,用来决定将源语的某个单词复制多少次来作为Decoder的输入。在上图的例子中,源语的单词”We”对应的fertility的值是1,因此将会作为输入出现在Decoder端一次,以此类推。因此,生成出fertility值以后,Decoder端的输入和句子的长度也就确定了,即所有fertility值的总和。

在训练时,使用外部的对齐工具(fast align)来生成fertility信息,从而将Fertility Predictor的训练转换成为一个监督问题。训练阶段的loss由两部分组成:translation loss 和 fertility loss。另外,尽管使用了fertility作为隐变量,但模型仍然不能很好应对训练中的multi-modality问题。例如,尽管英语的"Thank you"的每个词对应的fertility都是1,但却能得到两种不同的翻译:“Danke schon.”和“Vielen Dank.”。因此,该工作利用了Sequence-levelknowledge distillation的方式,解决了上述问题。具体做法是,首先训练一个AT模型作为teacher,然后解码整个训练集的句子作为NAT模型的ground truth来进行学习。

在推理时,由于fertility的存在,我们无法得到全局最优解。因此Gu等人提出了Noisy parallel decoding的方法,首先从fertility空间中采样多个样本并生成每个fertility序列对应的翻译结果,然后用训练好的AT模型来对这些句子做re-ranking,挑选出得分最高的句子。这个过程相当于对翻译结果进行强制解码,它可以并行的提供所有解码器输入,因此整个过程不会太慢。

该工作首次提出了非自回归神经机器翻译的概念,实现了推理过程的并行计算,取得了不错的加速效果。但也存在以下几个问题:1) 利用了外部对齐工具来获得 fertility信息,但对齐工具的误差可能会影响解码结果的质量。2)丢失了目标端的序列信息,造成大量重复翻译或者漏译的情况。3) 相比于AT模型,NAT模型的目标端直接copy源端的输入,使得解码器必须处理在更少的信息条件下的翻译任务,从而导致较差的准确度。

NAT with Syntactic Tree

上面说到,忽略了目标端序列信息的NAT模型,会使得解码出的目标序列存在大量重复翻译的情况。因此,将序列信息合理的融入到非自回归模型中是个非常关键的问题。这篇文章将句法树作为序列信息的抽象,把句法信息看作隐变量,首先自回归地预测出一个目标句的句法块序列,然后根据句法块序列非自回归地生成所有目标词。该工作由 Akoury[4]等人发表在ACL2019上。

模型细节

图2 NAT with syntactic tree的模型结构图

该方法的Encoder与Transformer的Encoder完全相同,但解码器分为两个部分。第一部分的Parse Decoder根据源语信息自回归的生成句法块序列,然后第二部分的Token Decoder根据源语信息和上一步的生成句法块信息来并行的生成整个目标序列。

在训练期间,该工作通过目标语言的外部解析器(Stanford CoreNLP)来将句法预测任务转换为有监督问题。值得注意的是,如果我们预测整个句法树,这种方法将极大地增加自回归步骤的数量,从而增大时间开销。因此,为了维持句法信息与解码时间的平衡,这里预测一些由句法类型和子树大小组成的块标识符(如VP3)而不是整个句法树。如图3所示,其中k表示我们需要预测第几层的句法信息,k越小我们所需要预测的句法信息越少,所蕴含的信息也越抽象,解码速度也会越快。

图3 块标识符示例

通过这样的操作,语法块词汇量非常小,因此自回归过程不会显著影响整体的解码速度。另外,他们发现Parse Decoder的层数变化并不会显著影响解码结果,因此为了进一步提升解码速度,将Parse Decoder的层数设置为1。

在解码的第二阶段,使用了一个完全的非自回归步骤,将第一个解码器的输出作为第二个解码器的输入,两个解码器的参数不共享。在训练过程中,使用真实的句法块序列作为输入,而在推断时,则使用预测的句法块。另外,为了确保第二个解码器中输入和输出单词的数量相等(为了套用Transformer的框架),Akoury等人将占位符<MASK>标记添加到块描述符后,其中添加的数量与块描述符的子树大小相同。

该工作在性能相当的情况下,提升的速度都优于之前的模型,在翻译质量上也取得了较好的效果。

总结和展望

自从NAT的概念被提出后,相关的论文层出不穷。但总得来说,可以分为以下三种方式:

  1. 基于latent variable的NAT,正如上面所示的两种方法,其主要问题在于怎么找到更好的隐变量能够充分表示NAT模型所丢失的序列信息。
  2. 基于Iterative Refinement的NAT, 具有代表性的是Jason Lee[5] 和Marjan Ghazvininejad[6] 等人的工作,其主要做法是将上一轮迭代生成的翻译结果和源语作为下一次迭代的输入,不断的迭代精化,相当于是句子级上的自回归模型。
  3. 基于knowledge distillation的NAT,具有代表性的是Zhuohan Li[7] 和 Wei B[8]等人的工作,由于AT模型和NAT模型的结构相差不大,因此我们完全可以将善于建模的AT模型作为老师,NAT模型可以逐块的学习前者的分布。这样,模型既可以获得NAT的高速性能,又不会遭受相对较低的翻译性能的困扰。

丢失了序列信息的非自回归模型如何取得与自回归模型相当的性能是目前研究的关键问题。引入额外信息的NAT模型可能会提升性能,但势必会减慢推理速度。第三种方法为解决这个两难问题提供了一个良好的思路,因此笔者认为,如何用一种更精细的方式来学习AT模型中所蕴含的序列信息将会是一个有潜力的研究方向。

参考文献

[1]JonasGehring, Michael Auli, David Grangier, Denis Yarats, and Yann N Dauphin. 2017.Convolutional sequence to sequence learning. arXiv preprint arXiv:1705.03122.

[2]Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, AidanN Gomez, Łukasz Kaiser, and Illia Polosukhin.2017. Attention is all you need. In Advances in Neural Information ProcessingSystems, pages 6000–6010.

[3]Jiatao Gu, James Bradbury, Caiming Xiong, Victor OK Li, and Richard Socher.Non-autoregressive neural machine translation. arXiv preprint arXiv:1711.02281,2017.

[4]Akoury, Nader, Kalpesh Krishna, and Mohit Iyyer. Syntactically SupervisedTransformers for Faster Neural Machine Translation. arXiv preprintarXiv:1906.02780 (2019).

[5]Jason Lee, Elman Mansimov, and Kyunghyun Cho. 2018. Deterministicnon-autoregressive neural sequence modeling by iterative refinement. arXiv preprintarXiv:1802.06901.

[6]Marjan Ghazvininejad, Omer Levy, Yinhan Liu, and Luke Zettlemoyer. 2019.Constant-time machine translation with conditional masked language models.CoRR, abs/1904.09324.

[7]ZhuohanLi, Zi Lin, Di He, Fei Tian, Tao Qin, Liwei Wang, and Tie-Yan Liu. Hint-based

trainingfor non-autoregressive translation. arXiv preprint arXiv:1909.06708, 2019.

[8]Wei B, Wang M, Zhou H, et al. Imitation Learning for Non-Autoregressive NeuralMachine Translation[J]. arXiv preprint arXiv:1906.02041, 2019.

0 人点赞