Как аргументы max_length, padding и truncation работают в HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ') ??
Я работаю с проблемой классификации текста, где хочу использовать модель BERT в качестве основы, за которой следуют плотные слои. Я хочу знать, как работают 3 аргумента? Например, если у меня есть 3 предложения:
'My name is slim shade and I am an aspiring AI Engineer',
'I am an aspiring AI Engineer',
'My name is Slim'
Итак, что будут делать эти 3 аргумента? Я думаю следующее:
max_length=5
будет строго соблюдать все предложения длины 5padding=max_length
добавит отступ 1 к третьему предложениюtruncate=True
обрежет первое и второе предложение, так что их длина будет строго 5.
Пожалуйста, поправьте меня, если я ошибаюсь.
Ниже мой код, который я использовал.
! pip install transformers==3.5.1
from transformers import BertTokenizerFast
tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased')
tokens = tokenizer.batch_encode_plus(text,max_length=5,padding='max_length', truncation=True)
text_seq = torch.tensor(tokens['input_ids'])
text_mask = torch.tensor(tokens['attention_mask'])
Ответы
То, что вы предположили, почти верно, однако есть несколько отличий.
max_length=5
, max_length
указывает длину токенизированного текста . По умолчанию BERT выполняет токенизацию словесных фрагментов. Например, слово «игра» можно разделить на «играть» и «## ing» (это может быть не очень точно, но просто для того, чтобы помочь вам понять токенизацию отрывка слова), а затем добавить [CLS]
токен в начале предложение и [SEP]
знак в конце предложения. Таким образом, он сначала токенизирует предложение, обрезает его до max_length-2
(если truncation=True
), затем добавляет [CLS]
в начало и [SEP]
маркер в конце (итого общая длина max_length
).
padding='max_length'
, В этом примере не очень очевидно, что 3-й пример будет дополнен, так как длина превышает 5
после добавления [CLS]
и [SEP]
токенов. Однако, если у вас есть max_length
10. Токенизированный текст соответствует [101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0]
, где 101 - это идентификатор, [CLS]
а 102 - идентификатор [SEP]
токенов. Таким образом, дополняем нулями, чтобы весь текст имел длинуmax_length
Точно так же truncate=True
будет гарантировать, что max_length строго соблюдается, т. Е. Более длинные предложения усекаются max_length
только в том случае, еслиtruncate=True