3

为了处理不同长度的序列,我们使用分桶和填充。在分桶中,我们为一些 max_len 制作不同的桶,我们这样做是为了减少填充量,在制作不同的桶之后,我们在不同的桶上训练不同的模型。

这是我到目前为止发现的。但我不明白的是,所有不同的模型是如何训练的,以及它们是如何用于翻译新句子的?

4

1 回答 1

11

在训练和推理时,算法都需要选择最适合当前输入句子(或批次)的网络。通常,它只取输入大小大于或等于句子长度的最小桶。

分桶

例如,假设只有两个桶[10, 16][20, 32]:第一个桶接受任何输入到长度10(填充到恰好10)并输出翻译后的句子到长度16(填充到16)。同样,第二个存储桶处理最大长度的输入20。这些桶对应的两个网络接受不相交的输入集。

那么对于length这个句子,8最好选择第一个bucket。请注意,如果这是一个测试句子,第二个存储桶也可以处理它,但在这种情况下,它的神经网络已经在更大的句子上训练,从1120单词,所以它可能不能很好地识别这个句子。对应于第一个存储桶的网络已经接受了输入1的训练10,因此是一个更好的选择。

25如果测试句子的长度超过任何可用的桶,您可能会遇到麻烦。这里没有通用的解决方案。这里最好的做法是修剪20单词的输入并尝试翻译。

于 2018-04-13T19:07:09.690 回答