天天看点

Dual Learning for Machine Translation

源码:https://github.com/yistLin/pytorch-dual-learning

本文作者提出了对偶学习可以更高效的利用单语数据。利用这种对偶学习,单语数据可以扮演和平行语料一样的角色,同时减少训练阶段对平行语料的依赖。具体来说,翻译模型的对偶学习可以描述成以下两个agent的游戏。

  1. 第一个agent只会A语言,他把一个用A语言写的信息通过有噪声的通道传给第二个agent,这个通道用翻译模型把A语言转换成B语言。
  2. 第二个agent只会B语言,他收到了翻译成B语言的信息。接着他检查信息然后告知第一个agent这是否是B语言。最后他将收到的信息通过另一个带噪声的通道传回第二个agent,通道用翻译模型将B语言翻译成A语言。
  3. 在收到第二个agent的信息后,他首先检查信息然后告知第二个agent收到的信息是否和他原本的信息一致。通过这种反馈,两个agents都可以了解两个交流通道(和两个翻译模型)的表现情况,因此可以进一步提升它们。
  4. 这个游戏当然也可以从第二个agent开始,跟如上的过程对称。
  • NMT的对偶学习

    对于单语语料 D A D_A DA​ 包含 N A N_A NA​个句子,单语语料 D B D_B DB​ 包含 N B N_B NB​个句子,这两个语料可以没有任何关系。 P ( . ∣ s ; Θ A B ) P(.|s;\Theta_{AB}) P(.∣s;ΘAB​) 和 P ( . ∣ s ; Θ B A ) P(.|s;\Theta_{BA}) P(.∣s;ΘBA​) 是两个弱神经翻译模型。

    假设我们已经有两个训练好的语言模型 L M A ( . ) LM_A(.) LMA​(.) 和 L M B ( . ) LM_B(.) LMB​(.) (由于有单于语料,所以很容易得到,也可以用 D A D_A DA​, D B D_B DB​ 训练),每个语言模型将句子作为输入,输出一个实数代表句子属于当前语言的自信程度。

    开始时,将 D A D_A DA​中的句子 s s s 送入翻译模型中,得到 s m i d s_{mid} smid​ 作为中间翻译的输出。这个中间过程有一个及时的奖励(reward) r 1 = L M B ( s m i d ) r_1=LM_B(s_{mid}) r1​=LMB​(smid​) ,代表句子为语言B的自信程度。得到了 s m i d s_{mid} smid​ 以后,我们用 s s s可以从 s m i d s_{mid} smid​ 中recoverd的log probability作为communication奖励(we will use reconstruction and communication

    interchangeably)。数学表示为 r 2 = l o g ( P ( s ∣ s m i d ; Θ B A ) r_2=log(P(s|s_{mid};\Theta_{BA}) r2​=log(P(s∣smid​;ΘBA​) 。

    简单的将LM reward和communication reward做一个线性组合的到最终奖励,e.g. r = α r 1 + ( 1 − α ) r 2 r=\alpha r_1+(1-\alpha)r_2 r=αr1​+(1−α)r2​。然后用policy gradient methods 最大化奖励(强化学习中经常会用到)

    用下面两个公式计算 Θ A B \Theta_{AB} ΘAB​、 Θ B A \Theta_{BA} ΘBA​的梯度

    Dual Learning for Machine Translation
    算法流程
    Dual Learning for Machine Translation
  • 实验结果(略)
  • 讨论
    • 对偶训练不一定只用于nmt,有对偶性的任务都可以对偶训练。

      比如speech recognition versus text to speech

      image caption versus image generation,

      question answering versus question generation

      search (matching queries to documents) versus keyword extraction (extracting

      keywords/queries for documents)

    • 对偶训练不只限制两个任务。核心方法就是形成一个闭合的回路,通过比较最终的输出和输入的区别,捕捉反馈信号。

      比如对英语句子,首先将它翻译成中文,然后再翻译成法语,最后翻译回英文。两个英文之间的相似性表示了三个翻译模型的有效性。这个叫close-loop learning

继续阅读