背景:现有的神经机器翻译系统没有明确地模拟已经翻译的内容以及在解码阶段期间没有翻译的内容。
思路:将源信息分成两部分:翻译的PAST内容和未翻译的FUTURE内容,它们由两个额外循环层建模。 PAST和FUTURE内容被馈送到注意模型和解码器状态,这为神经机器翻译系统提供了翻译和未翻译内容的知识。
Past层从头开始并累积在每个解码步正在翻译的信息,对应着源内容已经被翻译的部分
Future层从整体源开始,每一步减去正在翻译的信息,对应着源内容未被翻译的部分
初始化:
Future层的初始化为一个源语句的总结,指示着所有内容都需要被翻译
Past层的初始化为一个零向量,指示着没有源内容已经被翻译。
更新:
Future层的更新为,把当前时刻从注意力机制获得的上下文向量从Future层中减去
Past层的更新为,把当前时刻从注意力机制获得的上下文向量添加到Past层中去。
源语句的总结:
Future层:
其中表示当前翻译的源内容,表示还未被翻译在future中的内容,是激活函数,有三种计算方法:
普通的GRU计算:
其中是重置门,决定了输入和之前状态的组合,是更新门,决定之前的状态有多少需要保留。
使用标准的GRU并没有明确的减法操作。
具有外部减法的GRU:
具有内部减法的GRU:
重置门用于控制输入的信息数量而不是之前的状态
Past层:
在NMT中使用Past层和Future层:
在Future层中,由于源端与目标端包含等量的语义信息,因此,所以直接计算和之间的距离,期望能和当前的单词区分开。
同理,在Past层中
因此训练目标为: