Как получить маску заполнения из идентификаторов ввода? - PullRequest
0 голосов
/ 09 мая 2020

Принимая во внимание пакет из 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 ]

1 голос
/ 09 мая 2020

На 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)
1 голос
/ 09 мая 2020

Вы можете получить желаемый результат с помощью

padding_masking = batch > 0

Если вам нужны целые числа вместо логических, используйте

padding_masking.type(torch.int)
...