【问题标题】:Concept of Bucketing in Seq2Seq modelSeq2Seq 模型中的 Bucket 概念
【发布时间】:2018-08-28 07:15:50
【问题描述】:
为了处理不同长度的序列,我们使用分桶和填充。在分桶中,我们为一些 max_len 制作不同的桶,我们这样做是为了减少填充量,在制作不同的桶之后,我们在不同的桶上训练不同的模型。
这是我目前发现的。但我不明白的是,所有不同的模型是如何训练的,以及它们是如何用于翻译新句子的?
【问题讨论】:
标签:
machine-learning
deep-learning
lstm
machine-translation
sequence-to-sequence
【解决方案1】:
无论是在训练时还是推理时,算法都需要选择最适合当前输入句子(或批次)的网络。通常,它只是取输入大小大于或等于句子长度的最小桶。
例如,假设只有两个桶 [10, 16] 和 [20, 32]:第一个桶接受长度为 10 的任何输入(填充到正好 10)并输出翻译后的句子长度为 @987654327 @(填充到 16)。同样,第二个桶处理长度为20 的输入。这些桶对应的两个网络接受不相交的输入集。
那么,对于长度为8的句子,最好选择第一个bucket。请注意,如果这是一个测试句子,第二个存储桶也可以处理它,但在这种情况下,它的神经网络已经训练了更大的句子,从 11 到 20 单词,所以它很可能无法识别这个句子好吧。对应于第一个桶的网络已经在输入 1 到 10 上进行了训练,因此是一个更好的选择。
如果测试句子的长度为25,比任何可用的存储桶都长,您可能会遇到麻烦。这里没有通用的解决方案。这里最好的做法是将输入修剪为20 单词并尝试翻译。