为了处理不同长度的序列,我们使用bucketing和padding。在分组中我们为一些max_len制作不同的桶,我们这样做是为了减少填充量,在制作不同的桶之后我们在不同的桶上训练不同的模型。
这是我到目前为止所发现的。但我不明白的是,所有不同的模型如何训练以及如何使用它们来翻译新句子?
答案 0 :(得分:2)
在训练和推理时,算法都需要选择最适合当前输入句子(或批处理)的网络。通常,它只需要输入大小大于或等于句子长度的最小桶。
例如,假设只有两个存储分区[10, 16]
和[20, 32]
:第一个存储分区采用长度为10
的任何输入(填充到10
}并输出翻译的句子长度为16
(填充到16
)。同样,第二个桶处理长度为20
的输入。与这些桶对应的两个网络接受非交叉输入集。
然后,对于长度为8
的句子,最好选择第一个桶。请注意,如果这是一个测试句,第二个桶也可以处理它,但在这种情况下,它的神经网络已经训练了更大的句子,从11
到20
个词,所以很可能不是很好地认出这句话。与第一个存储桶对应的网络已经在输入1
到10
上进行了培训,因此是更好的选择。
如果测试句的长度25
比任何可用的存储桶长,则可能会遇到麻烦。这里没有通用的解决方案。这里最好的做法是将输入修剪为20
个单词并尝试翻译。