Seq2Seq模型中的Bucketing概念

Shu*_*agi 3 machine-learning machine-translation deep-learning lstm sequence-to-sequence

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

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

Max*_*xim 10

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

分桶

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

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

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