Как аргументы max_length, padding и truncation работают в HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ') ??

Dec 11 2020

Я работаю с проблемой классификации текста, где хочу использовать модель 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 аргумента? Я думаю следующее:

  1. max_length=5 будет строго соблюдать все предложения длины 5
  2. padding=max_length добавит отступ 1 к третьему предложению
  3. 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'])

Ответы

1 AshwinGeetD'Sa Dec 11 2020 at 23:58

То, что вы предположили, почти верно, однако есть несколько отличий.

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