如何从输入ID获取填充掩码?

时间:2020-05-08 21:21:14

标签: pytorch huggingface-transformers torchtext

考虑如下所示的4个预处理句子(标记化,数字化和填充)的批处理:

batch = torch.tensor([
                      [1, 2, 0, 0],
                      [4, 0, 0, 0],
                      [3, 5, 6, 7]
])

其中0表示[PAD]令牌。

因此,一种有效的方法是生成与padding masking形状相同的batch张量,在[PAD]位置分配零,并将一个分配给其他输入数据(句子标记) )?

在上面的示例中,它将类似于:

padding_masking= 
tensor([
                      [1, 1, 0, 0],
                      [1, 0, 0, 0],
                      [1, 1, 1, 1]
])

2 个答案:

答案 0 :(得分:1)

您可以通过

获得所需的结果
ShutdownHookManager

如果您想要整数而不是布尔值,请使用

padding_masking = batch > 0

答案 1 :(得分:1)

以下内容已在pytorch 1.3.1上进行了测试。

pad_token_id = 0
batch = torch.tensor([
    [1, 2, 0, 0],
    [4, 0, 0, 0],
    [3, 5, 6, 7]
])
pad_mask = ~(batch == pad_token_id)
print(pad_mask)

输出

tensor([[1, 1, 0, 0],
        [1, 0, 0, 0],
        [1, 1, 1, 1]], dtype=torch.uint8)