如何使用Attention掩盖Tensorflow编解码器RNN中的零填充值?

时间:2019-04-24 09:03:36

标签: tensorflow

在正式的Tensorflow神经机器翻译示例(https://www.tensorflow.org/alpha/tutorials/text/nmt_with_attention)中,在Encoder模型中,定义了GRU层。

但是,由于未应用屏蔽,因此GRU将正常处理零填充值。而且在解码器中,我认为情况甚至更糟,因为对填充值的关注将在上下文向量的最终计算中发挥重要作用。我认为在下面的损失函数的定义中,零被掩盖了,但是现在为时已晚,编码器和注意解码器的输出都将“断开”。

在整个过程中我是否缺少某些东西?正常的实现方式不是应该通过屏蔽填充值来实现吗?

1 个答案:

答案 0 :(得分:0)

是的,您可以看到,当打印从编码器返回的张量时,尽管右边的数字大部分来自填充,但右边的数字却有所不同: enter image description here

通常的实现确实包括屏蔽。然后,您将使用掩码来计算下一个单元格中的注意力权重。最简单的方法是将(1 - mask) * 1e9之类的东西添加到score张量中的关注日志中。本教程是非常基础的。例如,文本预处理非常简单(删除所有非ASCII字符),或者标记化与机器翻译中的常用标记不同。