Как работает усечение при применении токенизатора BERT к пакету пар предложений в HuggingFace?

Скажем, у меня есть три примера предложений:

      s0 = "This model was pretrained using a specific normalization pipeline available here!"
s1 = "Thank to all the people around,"
s2 = "Bengali Mask Language Model for Bengali Language"

Я мог бы сделать партию, например:

      batch = [[s[0], s[1]], [s[1], s[2]]]

Теперь, если я применяю токенизатор BERT к парам предложений, он усекает пары предложений, если длина превышает таким образом, что окончательная сумма длин пар предложений соответствует max_lengthпараметр, который должен был быть сделан, хорошо. Вот что я имел в виду:

      tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModelForPreTraining.from_pretrained("bert-base-uncased")

encoded = tokenizer(batch, padding="max_length", truncation=True, max_length=10)["input_ids"]
decoded = tokenizer.batch_decode(encoded)
print(decoded)

>>>Output: ['[CLS] this model was pre [SEP] thank to all [SEP]', '[CLS] thank to all [SEP] bengali mask language model [SEP]']

Мой вопрос в том, как truncationработать здесь в паре предложений, где количество токенов из каждого предложения каждой пары не равно?

Например, в выводе первого примера '[CLS] this model was pre [SEP] thank to all [SEP]'количество токенов из двух предложений не одинаково, т.е. [CLS] 4 токена [SEP] 3 токена [SEP] .

1 ответ

Существуют различные стратегии усечения , которые вы можете выбрать:

  • True или 'longest_first': усекать до максимальной длины, указанной с помощью аргумента max_length, или до максимально допустимой входной длины для модели, если этот аргумент не указан. Это усекает токен за токеном, удаляя токен из самой длинной последовательности в паре, если предоставлена ​​пара последовательностей (или пакет пар).
  • 'only_first': усекать до максимальной длины, указанной с помощью аргумента max_length, или до максимально допустимой входной длины для модели, если этот аргумент не указан. Это усекает только первую последовательность пары, если предоставлена ​​пара последовательностей (или пакет пар).
  • 'only_second': усекать до максимальной длины, указанной с помощью аргумента max_length, или до максимально допустимой входной длины для модели, если этот аргумент не указан. Это усекает вторую последовательность пары только в том случае, если предоставлена ​​пара последовательностей (или пакет пар).
  • False или 'do_not_truncate' (по умолчанию): Без усечения (т. е. может выводить пакет с длиной последовательности, превышающей максимально допустимый входной размер модели).