我们需要在Bert中使用填充参数进行推理吗?



我正在尝试通过Bert模型进行推理。在训练期间,我使用padding参数对输入进行了标记,如下所示。

encoding = tokenizer.batch_encode_plus(data,padding="max_length", truncation=True, max_length=150, return_tensors="pt">

然而,在推理过程中,我在没有填充参数的情况下对输入进行了标记,它仍然适用于我。我注意到的唯一变化是推理所花费的时间减少了。

因此,我需要知道Bert如何能够在没有填充的情况下进行预测,因为所有数据点的输入长度都不一致。

这方面的任何信息都会很有帮助。

如果没有填充参数,我预计Bert会抛出错误,但它成功运行了。

我需要知道这是怎么发生的。

除了生成标记的填充矩阵外,标记器还提供具有相同形状的输入注意图(只有0和1)。所有填充的标记都没有得到任何关注,因此填充的嵌入被屏蔽(乘以零),因此它们对输出没有影响。

当你在一个批次中有不同长度的输入序列时,你需要填充。如果您可以使用批大小= 1运行,则不需要填充。

batch_size=2:

示例
batch_sents = [
["[CLS]", "It", "rains",   "[SEP]", "[PAD]"],
["[CLS]", "It",    "is", "raining", "[SEP]"],
]
attentions = [
[1,1,1,1,0],
[1,1,1,1,1],
]

相关内容

  • 没有找到相关文章

最新更新