前言
代码链接:https://github.com/facebookresearch/UnsupervisedMT
引言
背景:monolingual data很多。
前人工作:
- 拥有部分的parallel data
- back-translation(data argumentation)
- 加强target端的decoder(language model)
- auto-encoding task,即:A先被翻译到B,B作为输入,训练目标是重构到A
- zero-shot NMT
- 利用其它language pair、或者是其它形态(modalities)的语料(transfer learning)
- 将NMT归纳为一个解码(deciphering)问题?
本文贡献:
- 提出了一种无监督的NMT方法,在低资源的情况下和有监督方法comparative
方法
模型
模型由三大训练目标组成:
-
denoising auto-encoding:
对于l1和l2的每一个句子(x),都可以先进行扰乱(C(x)),然后送入编码器得到表征向量(e(C(x), l)),再用解码器来重构(d(e(C(x), l), l))。损失函数计算的是原句子和重构句子所有单词的交叉熵之和,在所有句子上的均值。而C(x)这个加噪声模型考虑了两种:1. 以一定概率剔除(drop)x中的词; 2. 重新排列。其中第二种方法具体为:考虑第i个位置的单词,它重排后的位置是i+U(0,α),其中U是均匀分布,α=k+1则能够满足所有位置重排之后和原来的位置间距不超过k。 -
cross-domain auto-encoding:
个人认为这部分也是一个auto-encoding的过程,即先将l1中的句子(x),通过一个预训练好的NMT得到其l2的翻译(M(x)),然后和denoising auto-encoding一样,进行打乱(C(M(x))),然后送入编码器得到表征向量(e(C(M(x)), l2)),再用编码器来重新翻译回x(d((e(C(M(x)), l2)), l1))。 -
adversarial training
denoising auto-encoding同等对待不同语言,使得encoder能将不同语言编码到统一向量空间。采用对抗学习能进一步完成对齐,discriminator希望正确分类编码器所编码的语种,而让encoder的参数欺骗(fool)discriminator。其中,P的计算是encoder产生了向量序列,再通过一层线性映射,给每一个向量(单词)预测类别,一个句子的P就是它所包含单词的概率的连乘。
最终的训练目标如下:
训练
早停的评估指标:
由于没有平行的语料,所以没有ground truth来计算Belu指导训练。文章提出了无监督的评估指标,即对于source句子(视作ground truth),先翻译成target,再翻译回source,来计算单侧的Belu。结合相反侧,得到以上评估指标。
总结
cross-domain部分的训练还是使用了并行语料,由作者之前的工作产生的unsupervised word by word translation得到(《WORD TRANSLATION WITHOUT PARALLEL DATA》)。这部分一方面:当target先翻译成source输入,加噪,重新翻译成target训练时,是一个传统的机器翻译训练目标,只不过让encoder更具有了去噪的能力;另一方面:当source先翻译成target,加噪,模型将其重新翻译成source时,encoder将两种语言编码到了相同的向量空间。decoder对于不同的输入,也能够去除噪声、清晰地得到不同语种的翻译(这里需要显式地进行look-up table的选择)。
denosing部分的训练就是让encoder能够去噪,同时因为输入的是真实的句子,也能够加强decoder翻译的流利度?
最后是对抗训练,能够进一步加强encoder,将两种语言编码到相同的向量空间。
另外,在对抗学习部分,作者说只是将不同语种映射到同一空间,并没有蕴含一个严格的、语种之间的关联?(理解为,完全是一样的分布了,那这两种语言一点区别也没有了?),而不管是cross-domain部分的训练,还是对抗训练,都在映射到同一空间的基础上,让不同语种的分布产生关联?这样即可以让不同语种联系更加紧密,又可以对它们有所区分?(个人理解…)