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

How to get padding mask from input ids?

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

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

其中 0 表示 [PAD] 令牌。

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

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

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

您可以通过

获得您想要的结果
padding_masking = batch > 0

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

padding_masking.type(torch.int)

以下在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)