神经翻译笔记5扩展b. 常用的机器翻译技巧
神经翻译笔记5扩展b. 常用的机器翻译技巧
本节介绍提升机器翻译系统效果的常见手段。这些手段有些实际上是深度学习的通用技巧,有些在神经翻译出现后不久就被人提出,经过若干发展沿用至今,有些甚至在统计翻译时代就已出现。无论如何,这些手段独立于模型架构存在,都不仅能够增强模型效果,还展现了顽强的生命力以及良好的通用性
本节参考了Koehn的NMT综述13.6.1、13.6.3、13.6.7三小节的内容,并根据个人喜好作了裁剪和偏重。一些近几年出现,尚未广泛应用但可能有良好前景的方法(例如与预训练模型的融合)在此先不介绍,后面可能再用单独文章总结
组合解码
组合解码的核心思想是先训练多个模型,然后将它们按照不同方式组合。大部分情况下,模型都是在正确的事情上取得一致,而很少一起犯同样的错误,因此模型组合可以起到匡正纠偏的效果
为了实现组合解码,首先要解决的问题是如何获得多个模型。方法通常有两种:
- 在单次训练过程中,每若干个batch或经过若干个epoch就保存一个中间检查点。在训练结束后,根据某一项评估指标(BLEU、损失值loss或者困惑度ppl),选取在该指标上效果最好的若干模型组合。这种方法称为检查点组合
- 使用不同的超参数(例如不同学习率、warmup step)甚至不同的随机数种子训练多个模型,将训练好的模型组合。这种方法称为多轮训练组合。注意这里随机数种子一般会影响两项随机性,其一是网络参数初始化的结果,其二是数据集被打乱重排的结果
笔者习惯于训练多个模型,将单次训练中得到的若干个检查点权重求平均(这种方法也能够带来提升,详见神经翻译笔记3扩展d. 神经网络的泛化参数平均部分的解释),然后将这些平均后得到的模型再做组合。训练多个模型时,观察到的现象是每次使用不同的随机数种子带来的训练结果波动更大。有同事反馈使用不同数据源训练模型然后组合效果更佳,可以参考
在获得了多个模型以后,接下来要解决的是如何将它们的结果组合起来。常见的方法是在每一步解码过程时,获得各个模型在这一步的softmax结果(也就是目标语言词表大小的概率向量),然后将得到的这些向量求平均,选出平均后概率最大的单词,用这个单词指导所有模型的下一步解码,示意图如下所示
在此之上一个显然的改进是对不同的模型赋予不同权重,从而让效果更好的模型在组合时话语权更大一些。笔者实验表明合适的权重分配可以额外带来0.1~0.3BLEU的提升,有时可能会更大一些(但是基本不会超过0.5)
单语数据应用
要想训练出良好的深度神经网络模型就需要大量的数据,这已经是一件人所共知的常识。机器翻译这一任务要训好模型,其瓶颈在于缺乏大量良好的双语平行语料,而且要想制作这样的语料需要花费大量的人力和财力。另一方面,对大部分主要国家的官方语言,却存在大量单语语料可以容易获取,那么应该如何利用这些海量单语语料,以提升机器翻译系统的效果呢?
对于这些语料,最直接也是最主流的想法是通过数据增强将其“补充”成双语语料。假设现在要训练一个从源语言到目标语言的模型,具体做法就是对可获得的全部双语数据,在其反向数据集上训练出一个反向的基线模型,然后利用这个反向基线模型将目标语言的单语数据翻译成人造的源语言,最后将人造双语语料与原始数据集合并,得到扩充的数据集,再在上训练新的正向模型。这种方法首先于[Sennrich2016]被提出,其中使用之前训好的模型翻译单语数据,扩充数据集的过程,称为回译(back-translation)
在刚刚被提出时,回译只进行一次操作。因此一个自然的扩展是反复回译多遍。[Hoang2018]系统讨论了这种方法,并进行了大量实验验证。其核心思路是通过迭代进行如下若干步训练两个模型和直至收敛(模型效果不再提升)
- 在上训练
- 使用回译,得到
- 令,在上训练
- 利用“回译”(即这时要利用源语言的单语语料),得到
- 令,在上训练新的
其中是正向模型(源语言到目标语言),而是反向模型(目标语言到源语言)
拥有大量目标语言的单语数据以后,还可以为目标语言训练一个语言模型。这个语言模型可以和解码器一起组合,根据已经产生的上文两者分别解码,然后将softmax的结果以一定比例加权求和,将加权后得分最高的标识符输出,再继续迭代。[Gulcehre2015]提出的另一种方法是将RNN语言模型的隐藏状态和RNN解码器的隐藏状态组合,在解码器上额外加一层,即在时刻产生的目标语言标识符由翻译模型的隐藏状态、语言模型的隐藏状态、源语言句子最终的向量和前一时刻的单词共同决定。训练该组合模型时,保持语言模型的参数不变,只更新翻译模型和组合层参数
重排序
在前一小节中,提到使用大量单语数据可以训练语言模型,并将其与翻译模型融合,提升模型效果。实际上,语言模型还有其余用途。由于一般使用集束搜索解码,对于宽度为的搜索过程,最后可以产生个结果。这些结果虽然已经被翻译模型隐含地打分排序,但是很可能出现翻译模型打分靠后的结果实际上更准确的情况,因此可以通过引入额外的“裁判”对这些结果打分,并根据综合打分重新将这些结果排序,让之前本来名落孙山的好结果有重新出人头地的机会
很自然地,语言模型本身可以作为一个重要的打分函数。此外,反向模型(即从目标语言到源语言的翻译模型)和小的正向模型也可以起到打分的功能。例如使用5个模型组合生成最后的结果,可以使用这5个模型各自对结果打分。使用翻译模型对结果打分的过程,是让翻译模型每一步先按正常的步骤进行解码,然后在softmax向量中找到结果中这一步标识符对应的概率,将其累乘(实际上就是累加概率的负对数值),然后强制将“真实”标识符输出,指导后面的解码过程
对正向、反向和语言模型,常见的一个扩展是再训练若干右到左模型打分,即将源语言句子和目标语言句子都完全颠倒顺序,再训练模型。此外,还有文献将句子长度或源句目标句长度比作为一个分数特征输出。
获得分数以后,有若干算法来调整各个分数的权重,其中以K-batched MIRA算法[Foster2012]最为经典(该算法问世于统计翻译时代,细节涉及到一些SMT的知识,这里先略过)。机器翻译的常用框架fairseq提供了近年比较新的一个重排序算法[Yee2019],其以噪声信道模型为出发点,核心实现其实就是随机各分数权重,随机足够多次来寻找最优权重组合。该算法思想更简单,但是原生只支持使用正向、反向和语言模型来做打分函数,无法加入更多特征
领域适配
文本可能会有各自的风格、主题等等。机器翻译系统开发的一个常见问题是,训练语料和上线后真正面对的用户输入之间可能存在偏差。训练系统时,最容易获得的是新闻语料,那么使用这样语料训练的模型如果用来翻译口语,可能就会力不从心。这种问题通常称为领域适配问题,即,如何将领域A数据训练的模型,应用在领域B上?
这个问题其实在前面关于迁移学习的文章中有所探讨,而机器翻译领域中最常见的解决方案正是前面提到的“顺序迁移学习”这一方法,即先在领域A上训练一个基模型,然后再使用少量领域B的数据做微调。微调时通常使用更小的学习率,同时降低迭代轮数,因为微调通常收敛很快,而且由于样本量很小,很容易过拟合
这种做法通常仍然会存在两个问题:
其一,因为样本量小而带来的过拟合风险仍然无法消除。一个常见的解决方案是使用某种方法,从源领域的数据中挑选与目标领域相近的句子,扩大适配所需要的数据量。最直观的做法是在目标领域数据上训练一个语言模型(可以不是神经语言模型,统计的即可),然后使用该语言模型对源领域数据打分,挑选出得分最高的若干数据。另外有一些做法是将目标领域数据均视为正样本,然后在原始平行语料中随机抽取大致等量的数据视为负样本,训练分类器。在分类器训好以后,对原始数据逐条打分,选出得分最高的数据。这种方法可以迭代:对原始数据打分后,选出得分最低的数据,作为新的负样本重新训练分类器,直到训练集不再发生变化。然而这种方法个人认为最大问题是耗时太长,如果原始数据量太大,会比较费时
其二,如果目标领域只有单语数据,如何解决?比较好的方法除了前述利用语言模型从原始数据中找相似句对,可能也就只有使用回译这样唯一的手段了
参考文献
- [Sennrich2016]: Sennrich, R., Haddow, B., & Birch, A. (2016, August). Improving Neural Machine Translation Models with Monolingual Data. In Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) (ACL 2016) (pp. 86-96).
- [Hoang2018]: Hoang, V. C. D., Koehn, P., Haffari, G., & Cohn, T. (2018, July). Iterative back-translation for neural machine translation. In Proceedings of the 2nd Workshop on Neural Machine Translation and Generation (WNMT2018) (pp. 18-24).
- [Gulcehre2015]: Gulcehre, C., Firat, O., Xu, K., Cho, K., Barrault, L., Lin, H. C., … & Bengio, Y. (2015). On using monolingual corpora in neural machine translation. arXiv preprint arXiv:1503.03535.
- [Foster2012]: Cherry, C., & Foster, G. (2012, June). Batch tuning strategies for statistical machine translation. In Proceedings of the 2012 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (NAACL-HLT) (pp. 427-436). Association for Computational Linguistics.
- [Yee2019]: Yee, K., Dauphin, Y., & Auli, M. (2019, November). Simple and Effective Noisy Channel Modeling for Neural Machine Translation. In Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing and the 9th International Joint Conference on Natural Language Processing (EMNLP-IJCNLP 2019) (pp. 5700-5705).