1

考虑如下所示的一批 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]
])
4

2 回答 2

3

以下是在 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)
于 2020-05-09T07:46:38.680 回答
1

你可以得到你想要的结果

padding_masking = batch > 0

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

padding_masking.type(torch.int)
于 2020-05-08T21:33:36.140 回答