Artetxe - 2018ICLR - Unsupervised Neural Machine Translation

Unsupervised Neural Machine Translation

文章链接:

Unsupervised Neural Machine Translation

本文介绍无监督翻译的另一篇文章,其实这篇文章跟我介绍的《无监督机器翻译二》的那篇文章撞车了,两篇文章中的思路大体相同,只是具体的细节有些不同,两篇还都中了ICML,应该是不同的审稿人吧,不然这篇我估计会被pass掉。由于两篇的思想类似,很多地方我就不详细介绍了,仔细看前一篇文章就可以理解了,上一篇文章的链接为:

无监督机器翻译Unsupervised Machine Translation Using Monolingual Corpora Only

技术点

本文的关键技术主要由以下几点:

  1. 使用了预训练的跨语言词嵌入,并且后续不更新,跟普通的词嵌入不同。
  2. 不同语言共享编码器,但解码器不同。
  3. 同样分为原文重构和译文重构。
  4. 同样引入了噪声。

整体流程

在这里插入图片描述
整体流程很简单,两种语言共享一个encoder,每种语言都有各自的decoder。文中说encoder部分的词嵌入用的是已经训练好的跨语言词嵌入,没有说decoder部分的词嵌入,难道两部分的词嵌入不一样?还是我看花眼了没看到?有待考究。

文章做的实验都是基于英法或者英德的,都是比较接近的语言,在这些语言对之间共享 encoder 可能是合理的,因为可能存在一个统一的语义空间;对于差异较大的语言,比如说中阿翻译,这么做可能是不行的。从 GNMT 的经验来看,多对一翻译是没问题的,多对一可以训练出一个更好的目标语言的语言模型;但是一对多经常会损害翻译质量,因为每个语言对对 encoder 提特征的方式的要求会有一些冲突。这篇文章却对两种语言使用同一个 shared encoder,在相差较大的语言上可能会难以学习;

设计细节

原文重构

看过我介绍的上一篇无监督博文的应该应该已经了解具体流程,本文中原文重构也是用了自编码器,假设有L1、L2两个语种,从L1中随机取一个单词x1输入到编码器,编码器得到的结果再输入到L1 decoder,最后生成单词x1^ ,x1^也是L1语种中的单词,那么这就是原文重构。L2语种类似。

译文重构

还是上面的例子,有L1、L2两个语种,从L1中随机取一个单词x1,先用上一轮迭代生成的翻译器把X1翻译为X2(即利用共享编码器和另一种语言的解码器),X2为L2中的句子。然后将X2输入到编码器,编码器得到的结果再输入到L1 decoder,最后生成单词x1^ 。x1^是L1语种中的单词,那么这就是译文重构。简单的说就是先将原句子翻译为目标句子,然后再反向翻译回原句子。

加噪&降噪

跟另一篇文章类似,也加入了噪声,二者加噪声的目的应该是相同的,只是加噪声的方法略有不同,本文通过在连续单词之间进行随机交换来更改输入句子的单词顺序。对于一个长度为N的单词序列,共做N/2次交换。

原文重构过程中从噪声输入中回译为原单词即为降噪。

类比结果

由于两篇文章想法类似,那么可以做一下简单的比较:
上一篇博文为P1,这篇文章为P2。

  1. P1中使用了fastText来生成词嵌入,而且训练的过程中词嵌入不断的更新。P2中使用训练好的跨语言词嵌入,训练过程中词嵌入不更新。
  2. P1中M1(第一轮翻译模型)使用以前的工作中训练好的翻译模型(词级别的翻译模型),可以给模型一个好的起点,使模型更快收敛。而P2中整个过程中都使用论文中设计的翻译模型,模型学习时间更长且效果可能没有P1中的好,不过它固定了词向量,应该可以引导 shared encoder 快速构建语义空间。
  3. 两篇文章虽然都包括原文重构和译文重构,但具体的结构不同。P2直接让两种语言共用一个 encoder 和共享的词嵌入矩阵(不同语言所生成的词嵌入不同); 而P1是两种语言各有一个 encoder 和 decoder,两个 encoder 共享隐层参数,两个 decoder 共享隐层和 attention 参数,输入和输出层则不共享,但是用一个判别器分辨 encoder 编码的结果来自哪种语言,通过对抗的方法让两个 encoder 编码的语义空间重合到一块儿去,从而词向量不会在训练过程中跑偏。
  4. 两篇文章在输入数据中都加了噪声,但加噪声的方法不同,很明显P1中的方法更好些。
  5. 在训练的时候,P1是两个翻译方向的图中所有 loss 加起来训一个 batch,然后判别器 D 训一个 batch,这样交错下去,所有模块一起慢慢收敛。而P2是L1原文重构模块、L2原文重构模块、L1到L2的回译模块、L2到L1的回译模块、四个模块交替训练,每次只训练一个模块。
  6. 收敛条件,P1中让 s1 翻译到 s2 再翻译回 s1’,计算 s1 和 s1’ 的 BLEU 来做交叉验证,决定训练什么时候停止,并且说明这个指标跟真正平行语料上测出来的 BLEU 相关性很高。而P2文中没有讲,难道是看损失函数?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值