machine-learning - Seq2Seq模型中Bucketing的概念

标签 machine-learning deep-learning lstm machine-translation sequence-to-sequence

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

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

最佳答案

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

bucketing

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

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

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

关于machine-learning - Seq2Seq模型中Bucketing的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49367871/

相关文章:

java - 木槌主题建模

python - 为什么我会收到 NameError : name 'train_test_split' is not defined?

python - 从 lm_1b 训练模型中提取单词/句子概率

deep-learning - Keras 中的多维输入层

machine-learning - Capsule Networks - 面部表情识别

python - 当 LSTM 层的输入数量大于或小于该层中 LSTM 单元的数量时,Keras 会做什么?

python - 为什么我的循环神经网络的损失为零?

python - RNN 预测值在第一个 epoch 之后有所不同

python - Tensorflow 中 Theano 的 Theano.tensor.ivector 的等价性

python - RuntimeError : Input type (torch. FloatTensor)和权重类型(torch.cuda.FloatTensor)应该相同