本文为计算所邵晨泽向雷锋网AI科技评论投稿,未经允许禁止转载。
本文是对计算所冯洋组和腾讯微信AI团队共同完成,被 AAAI2020 录用的论文《Minimizing the Bag-of-Ngrams Difference for Non-Autoregressive Neural Machine Translation》进行解读,相关工作已开源。
论文:https://arxiv.org/pdf/1911.09320.pdf
代码:https://github.com/ictnlp/BoN-NAT
目前主流的神经机器翻译模型为自回归模型,每一步的译文单词的生成都依赖于之前的翻译结果,因此模型只能逐词生成译文,翻译速度较慢。Gu等人[1]提出的非自回归神经机器翻译模型(NAT)对目标词的生成进行独立的建模,因此能够并行解码出整句译文,显著地提升了模型的翻译速度。
然而,非自回归模型在翻译质量上与自回归模型有较大差距,主要表现为模型在长句上的翻译效果较差,译文中包含较多的重复词和漏译错误等,如图一所示:
图一:NAT译文中的重复词和漏译错误。NAT:非自回归模型,AR:自回归模型
造成非自回归模型翻译效果较差的一个主要原因为其训练时所用的交叉熵损失函数不准确。一方面,词级别的交叉熵损失对每个位置的预测结果进行独立评估,难以建模序列依赖关系;另一方面,交叉熵损失要求模型的预测结果与参考译文严格对齐,否则就难以评估模型的翻译质量。如图二所示,
图二:不对齐时,交叉熵损失无法给出准确的指导
当预测结果未与参考译文对齐时,尽管两者语义很相近,交叉熵损失还是会变得非常大,对模型给出错误的指导。
针对上述的交叉熵损失函数不准确的问题,Gu等人[1]将其归因为译文的“多峰性”,即一个句子可能有多种正确的译文,并提出引入隐变量来减小译文的不确定性。随后,离散隐变量[2,3]、变分自编码器[4,5]、基于位置信息的隐变量[6,7]被引入到非自回归模型中,均取得了明显的效果提升。
隐变量的方法也有一定缺陷,即对隐变量的建模会降低非自回归模型的翻译速度,且隐变量难以完全消除译文的不确定性,交叉熵损失不准确的问题仍然存在。
另一个思路为对非自回归模型的训练目标做改进,本文也是基于这个思路。Wang等人[8]直接在训练目标中加入正则化项,以此来抑制模型的重复翻译和漏译错误。Shao等人[9]在模型中融入序列信息,改进强化学习算法来进行序列级训练,用更准确的序列级指标来训练模型。
上述方法的好处是能在不影响翻译速度的前提下提升模型的翻译质量。然而,[8]仅针对在译文中观察到的问题做优化,并未从根本上解决问题。由于序列级指标的离散性,[9]无法准确求得损失函数的梯度,需要使用强化学习算法来做梯度估计。另外,[9]所用的强化学习算法速度较慢,仅能用于模型的微调阶段。
针对交叉熵损失不准确的问题,本文为非自回归模型提出了一种基于n元组袋(Bag-of-Ngrams, BoN)的训练目标,希望能最小化模型与参考译文间n元组袋的差异。该训练目标在n元组的层面上评估预测结果,因此能够建模序列依赖关系;直接对n元组袋做优化,对绝对位置不敏感,不受对齐约束的限制。如图三所示,在预测结果未与参考译文对齐时,该训练目标也能准确地评估翻译质量。
图三:基于n元组袋的训练目标
本文提出的BoN训练目标对模型与参考译文间的n元组袋差异做定量评估,从而鼓励模型生成更接近参考译文的翻译结果,下面对其做具体描述,主要分为三个步骤:BoN的定义和计算、BoN距离的定义和计算和训练方法。
BoN的定义和计算 假设词表大小为V,对于一个长度为T的句子Y=(y1,……,yn),一般都将它的n元组袋定义为一个长度为V^n的向量,记为BoNY,它的每一维代表某一n元组g=(g1,……,gn)的出现次数,如下所示:
其中,1{}为指示函数,若条件成立则取值为1,否则为0。对神经机器翻译模型来说,由于其建模了译文在整个译文空间上的概率分布,上面的定义并不直接适用。因此,我们考虑所有可能的译文,将每个译文的BoN按概率加权,用BoN的期望值来定义模型的BoN。假设模型参数为θ,从原文X到译文Y的翻译概率为P(Y|X, θ),则模型的BoNθ定义如下:
(2)式中对模型BoN的定义方法非常自然,但它也存在一个很大的问题:搜索空间是指数大小的,难以对其进行计算。我们利用非自回归模型独立预测各位置翻译概率的特性,对(2)式做如下变换:
注意到,(3)式中2到3行的变换利用到了非自回归模型独立建模概率的特性,因此(3)式的推导仅对非自回归模型有效。通过(3)式的变换,我们就不再需要遍历所有可能译文,汇总所有位置上n元组g的概率就能求得g的期望出现次数BoNθ(g)。下图以二元组g=(‘get’,‘up’)为例,展示了模型BoNθ的计算方法。
图四:对2元组(‘get’, ‘up’) 的期望出现次数的计算
BoN距离的定义和计算 在完成对参考译文和模型的BoN定义后,我们可以选择一种距离指标来衡量两者BoN的差距,常用的距离指标有L1距离、L2距离、余弦距离等。注意到,n元组袋的长度为V^n,尽管我们在上文中对其每一维BoNθ(g)的计算做了简化,但若要进行V^n次的计算来求得整个BoN向量,所需的计算量和存储空间也是非常巨大的。因此,我们希望选择一种合适的距离指标,使我们不需要计算整个BoNθ向量,进一步简化计算。从上文(1)、(2)式的定义看,模型的BoNθ向量是稠密的,每个位置均为非零值;句子的BoNY向量是稀疏的,仅有几个位置为非零值。利用这个性质,我们可以对两个向量间L1距离的计算做简化。首先,假设译文长度为T,则两个BoN向量的L1模长均为T-n+1:
基于此,两个BoN向量间的L1距离如下所示:
直观上看,(6)式中的min部分代表了模型与参考译文在n元组层面上的匹配数,匹配数越大,则两者BoN向量间的L1距离越小。利用BoNY向量的稀疏性,min函数的大部分取值均为0,我们只需考虑BoNY非零的几处位置,计算模型与参考译文中n元组的匹配总数,从而计算出两者n元组袋的距离BoN-L1。训练方法 上文中,我们给出了BoN的定义和快速计算BoN间L1距离的方法。在本节,我们将对用BoN距离训练非自回归模型的方法做具体介绍。首先,为了保证训练过程的稳定性,我们将BoN距离归一化后作为损失函数:
与基于强化学习的序列级训练方法[9]类似,我们可以先用交叉熵损失预训练非自回归模型,再用BoN损失对模型进行微调,我们将这种方法命名为BoN-FT。
另外,由于本文提出的BoN损失在计算上非常快速且直接可导,我们也可以将BoN损失与交叉熵损失加权来联合训练非自回归模型,这种方法被命名为BoN-Joint。
结合上面两种方法,我们可以先对模型进行联合训练,再单独用BoN损失微调模型,这种方法被命名为BoN-Joint+FT。
本文在WMT14 En-de、WMT16 En-Ro、IWSLT16 En-de三个数据集、五个翻译方向上进行了实验,结果如图五所示。
图五:三个数据集上的实验,所提方法相对基线模型和强化学习方法均有明显提升
对比BoN-FT与Reinforce-NAT[9],可以看到本文提出的BoN损失在序列级训练上效果更好、速度更快。BoN-Joint方法相对BoN-FT也有明显提升,表明让BoN损失全程参与训练的必要性,这也是BoN损失相对强化学习方法的优势:强化学习方法训练速度过慢,一般只能用于微调模型。效果最好的为BoN-Joint+FT,该方法通过在最后阶段的微调,相对BoN-Joint也有微小提升,在WMT14 En-de数据集上达到了约5个BLEU值的提升。
本文还对BoN损失和交叉熵损失与翻译质量的相关性做了实验验证。我们在WMT14 En->De的开发集上进行实验,将开发集的3000个句子随机分为100组,每组30句。我们粗略地认为BLEU值能够表示模型的翻译质量,计算模型在各组上的BoN损失、交叉熵损失和翻译结果的BLEU值,并分别求出BoN损失、交叉熵损失与BLEU值的相关系数,如表一所示。
表一:交叉熵损失和BoN损失与翻译质量的相关系数
表一显示,在n=2的情况下,BoN损失与翻译质量的相关性最好,且显著强于交叉熵损失。因此,BoN损失能更准确地评估模型的输出结果,适用于非自回归模型的训练。我们也在不同句长情况下对相关性进行了分析,将开发集按句长分为两组,每组包含1500个句子,并按上述方法计算BoN损失、交叉熵损失在长句组和短句组上的相关性,如表二所示。
表二:在不同句长下,交叉熵损失和BoN损失与翻译质量的相关系数
表二显示,交叉熵损失在句长增大时,与翻译质量的相关性迅速下降,而BoN损失在长句下仍能保持较高的相关性。这种现象与我们的预期完全相符,在长句情况下,类似图二的不对齐现象更加容易发生,因此交叉熵损失的准确性会进一步下降。BoN损失基于n元组袋来评估模型输出,因此不受不对齐现象的影响。
本文针对非自回归模型中交叉熵损失不准确的问题,提出了基于n元组袋的BoN损失。实验显示,BoN损失与翻译质量的相关性更强,用其对非自回归模型进行训练,能显著提升模型的翻译效果。在未来的工作中,一方面,我们希望能更进一步地对非自回归模型的训练方法进行探究;另一方面,我们希望能不局限于非自回归模型,将本文所提的BoN损失应用到自然语言处理的更多任务中。
雷锋网报道。
更多AAAI 2020解读论文请参阅雷锋网其他文章:https://www.leiphone.com/special/custom/meetingVideo.html?from=SY