Как аргументы 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_length10. Токенизированный текст соответствует [101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0], где 101 - это идентификатор, [CLS]а 102 - идентификатор [SEP]токенов. Таким образом, дополняем нулями, чтобы весь текст имел длинуmax_length
Точно так же truncate=Trueбудет гарантировать, что max_length строго соблюдается, т. Е. Более длинные предложения усекаются max_lengthтолько в том случае, еслиtruncate=True