机器翻译 讨论区

http://zh.diveintodeeplearning.org/chapter_natural-language-processing/machine-translation.html

俩问题哈:
1.直播教程里面的做法padding是不是也算了loss,然后求梯度反传了?

2.beam search里面,是不是每个时间戳需要对beam width个候选分别输入到decoder中?

  1. 对,也可以在预测的时候padding 0张量,不训练也行
  2. 其实使用beam width个decoder来track

对于一个样本,解码器的输出是最可能的翻译结果吗(1*time)?不是像图像分类任务中,是所有类别的维度(n)

你好,在构造编码器解码器中似乎没有batch size的设定,是默认且必须为1吗?

为了demo的简易,这里是1。实际上当然可以增加,不过代码需要改一下,特别是decoder那部分。

不一定,因为是greedy search。详细请参见教程里的束搜索部分。19课视频里也详细解释了。

这里扩展了batch_size

谢谢,
另外有一个问题是,encoder,decoder虽然是两个网络,在教程代码里是两个optimizer。但是他们可以放在一个class里吗?然后用一个Trainer去训练。

1赞

可以,不过需要定义一个class,把所有模型逻辑放在forward函数里,会特别大

你好。样例代码中,encoder的输入是encoder_outputs,不应该是 encoder_state吗?按照我的理解,encoder_state才是所有输入的“压缩”?

嗯,具体在哪一行

encoder_outputs, encoder_state = encoder(x, encoder_state)

encoder_outputs = encoder_outputs.flatten()

decoder_output, decoder_state = decoder(
decoder_input, decoder_state, encoder_outputs)

按照我的理解,decoder 的第三个参数应该是encoder_state? 然后encoder_outputs[0]用来初始化decoder_init_state

另外,注意力机制里“我们需要对解码器中不同时刻的隐含层变量求加权平均”这句,应该是编码器不同时刻的隐含层变量吧?还是我理解错了 :sweat_smile:

  1. decoder的第三个参数应该是encoder_outputs,就是编码器各个时刻的隐含状态。你可以打印出来看看形状。

  2. 对,应该是编码器,typo改掉了 :grinning:

各个时刻的隐含状态是 encoder_state吧?或者参照一下 TensorFlow 的实现

这里的encoder_outputs是每个时刻encoder的隐含状态

TF那个例子用attention了吗?如果不用,就不需要encoder_outputs

用到的fr-en-small.txt文件在哪里可以找到?