Как работает усечение при применении токенизатора 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' (по умолчанию): Без усечения (т. е. может выводить пакет с длиной последовательности, превышающей максимально допустимый входной размер модели).