如何从输入 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)
考虑如下所示的一批 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)