天天看点

face - Unsupervised Machine Translation Using Monolingual Corpora Only

无监督神经机器翻译二

    • 技术点
    • 神经机器翻译模型
    • 模型整体架构
    • 算法流程
    • 设计细节
      • 去噪自编码器
      • 噪音模型
      • 译文重构
      • 对抗训练
      • 无监督模型选择标准

本文继续上一篇博文来总结facebook小哥哥的第二篇文章 《Unsupervised Machine Translation Using Monolingual Corpora Only》,上一篇是词级别的翻译,这篇是句子级别的翻译。

这一篇是在上一篇的基础上继续做的工作,里面用到了上一篇的方法,所以没有看上一篇的建议先看一下上一篇文章的介绍。

技术点

首先介绍一下本文所用到的关键技术:

  1. 输入数据都加了噪声,以提高模型泛化性能。
  2. 初始(第一轮)翻译模型用的是上一篇中的模型,后面迭代用的是本模型的翻译结果。
  3. 用了原文重构和译文重构两种重构方法。
  4. 两种语言各有一个 encoder 和 decoder,两个 encoder 共享隐层参数,两个 decoder 共享隐层和 attention 参数,输入和输出层则不共享。
  5. encoder后面加了判别器,通过这种对抗的方法让两个 encoder 编码的语义空间重合。
  6. 提出了无监督翻译度量标准。

神经机器翻译模型

神经机器翻译模型主要使用了seq2seq的方法,文中介绍了Encoder和Decoder的一些知识,这些都很基础,怀疑作者是在凑字数(哈哈哈,这么帅气并且得到EMNLP best paper的facebook小哥哥怎么能凑字数呢)。

如果读者没有这方面的基础,也不要担心,鄙人早已将其总结在了博客seq2seq模型及Attention机制中,欢迎阅读。

模型整体架构

face - Unsupervised Machine Translation Using Monolingual Corpora Only

上面的图炸一看感觉很复杂,不知道作者想干嘛,其实仔细分析发觉原理很简单。

首先我们来弄懂图中的符号,D是句子组成的数据集,src代表源语言,tgt代表目标语言,x是来自于句子集的句子,C是给输入加噪声,z是encoder的输出,M是第一篇博客中设计的翻译模型,L是损失计算公式。

模型主要包含原文重建和译文重建两个部分。图中上面是原文重建部分,使用的是自编码器,输入源语言最后的输出仍然是源语言。下面是译文重建部分,给定源语言之后,先经过M模型翻译为对应的译文,然后经过encoder-decoder模型翻译回原文。

算法流程

face - Unsupervised Machine Translation Using Monolingual Corpora Only

可以看出作者通过不断地迭代来更新翻译模型。

下面介绍模型设计细节

设计细节

去噪自编码器

自编码器文中没有做过多解释,只是说构造自编码器非常简单。

总体流程为:首先输入句子x,然后给句子加噪声生成噪声数据C(x),然后经过encoder编码为中间结果(隐向量)z,z再通过decoder解码为x_,通过x 和x_做对比来更新模型参数。

face - Unsupervised Machine Translation Using Monolingual Corpora Only

自编码器结构如下所示(便于大家理解,并不一定是文中所用的自编码器):

face - Unsupervised Machine Translation Using Monolingual Corpora Only

自编码器的目标函数为:

face - Unsupervised Machine Translation Using Monolingual Corpora Only

l是语言(按其设置,应该有两种可能的语言),x 是输入,C(x) 是将噪声加到 x 之后的结果。e() 是编码器,d() 是解码器。等式末尾的 Δ(x_hat ,x) 项是 token 级别的交叉熵误差总和。

自编码器模型用了Pascal Vincent在2008年发表的文章Extracting and

composing robust features with denoising autoencoders中的模型。

噪音模型

C(x)是句子x随机采样的噪声,文中主要加入了两种噪声,一种是P_wd 的概率从输入中随机删除一个单词,第二种是打乱单词的顺序,即每个单词以下式中的约束从初始位置偏移:

face - Unsupervised Machine Translation Using Monolingual Corpora Only

这里,σ是第 i 个 token 偏移后的位置。因此,上式的含义是:一个 token 最多可以偏离原来位置 k 个 token 的距离。

不管是原文还是译文都加入了噪声。实验结果表明,同时加入这两种噪声能取得更好的效果。作者还通过实验证实了 k 取 3,P_wd 取 0.1时能得到很好的结果。

其实加噪声是为了提高模型的识别能力。数据好比人脸,噪声就好比人化了妆,不管人怎么化妆,我们还是能够认出来。之所以我们不被噪声干扰,是因为我们在成长的过程中学习了这种抗干扰的能力,我相信刚生下的婴儿是没有这种能力的。如果我们的训练数据中没有噪声,那我们的模型就好比刚出生的婴儿,只要有干扰就很容易做出错误的判断。加入噪声就是为了让我们所设计的模型同样拥有抗干扰能力。

译文重构

face - Unsupervised Machine Translation Using Monolingual Corpora Only

文中所谓的跨领域训练就是译文重构,具体流程为:

首先,采样一个输入语句 x,然后使用前一次迭代后的模型 M() 生成翻译后的输出 y,即 y=M(x)。然后给译文y加随机噪声生成噪声数据C(y),接着通过encoder生成中间结果z,最后通过decoder将加噪声的译文回译为原语言句子x_^ ,通过x和x_^的对比来更新模型参数。

译文重构部分的目标函数为:

face - Unsupervised Machine Translation Using Monolingual Corpora Only

译文重构模型用了2015年Improving neural machine translation models

with monolingual data文章中的方法。

对抗训练

其实对抗训练就是在encoder后面加一个分类器,以鉴别输出结果属于哪种语言。文中用了一个具有三个隐藏层的多层感知机,预测结果为0代表源语言,结果为1代表目标语言。encoder的输出结果(隐向量z组成的序列)就是分类器的输入。

本文的关键是在两种语言(或域)之间建立一个共同的潜在空间。

encoder后加分类器类似于GAN,encoder部分相当于生成器,用于生成两种语言的共同空间,分类器相当于鉴别器,用于从共同空间中区分两种语言。生成器的作用是使所生成的空间为两种语言所共有,分类器无法辨别语种,这样的话不论输入是哪种语言,都能够准确的翻译为目标语言。

对抗训练的目标函数为:

face - Unsupervised Machine Translation Using Monolingual Corpora Only

整个系统最终的目标函数为:

face - Unsupervised Machine Translation Using Monolingual Corpora Only

无监督模型选择标准

度量标准:

先把源语言L1翻译为目标语言,然后再反向翻译回源语言L2,然后计算L1和L2的BLEU得分,两种语言都翻译一遍取平均值。

计算公式为:

face - Unsupervised Machine Translation Using Monolingual Corpora Only

下图将本文的度量标准所得到的BLEU和有监督方法所得到的BLEU做了对比,可以看出他们的趋势相同,说明本文所设计的无监督度量方法是正确的且合理的。

face - Unsupervised Machine Translation Using Monolingual Corpora Only

继续阅读