Como os argumentos max_length, padding e truncation funcionam no HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ') ??

Dec 11 2020

Estou trabalhando com o problema de Classificação de Texto onde pretendo usar o modelo BERT como base seguido de camadas Densas. Eu quero saber como funcionam os 3 argumentos? Por exemplo, se eu tiver 3 frases como:

'My name is slim shade and I am an aspiring AI Engineer',
'I am an aspiring AI Engineer',
'My name is Slim'

ASSIM, o que esses 3 argumentos farão? O que eu acho é o seguinte:

  1. max_length=5 irá manter todas as frases de comprimento 5 estritamente
  2. padding=max_length irá adicionar um preenchimento de 1 à terceira frase
  3. truncate=True irá truncar a primeira e a segunda frases para que seu comprimento seja estritamente 5.

Por favor corrija-me se eu estiver errado.

Abaixo está o meu código que usei.

! 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'])

Respostas

1 AshwinGeetD'Sa Dec 11 2020 at 23:58

O que você presumiu é quase correto, no entanto, existem algumas diferenças.

max_length=5, o max_length especifica o comprimento do texto tokenizado . Por padrão, o BERT executa a tokenização de peças de palavras. Por exemplo, a palavra "jogando" pode ser dividida em "jogar" e "## ing" (Isso pode não ser muito preciso, mas apenas para ajudá-lo a entender sobre a tokenização de peças de palavras), seguido pela adição de [CLS]token no início do frase e [SEP]token no final da frase. Assim, primeiro tokeniza a frase, trunca-a para max_length-2(se truncation=True), em seguida, prefixa [CLS]no início e adiciona [SEP]no final. (Portanto, um comprimento total de max_length)

padding='max_length', Neste exemplo, não é muito evidente que o terceiro exemplo será preenchido, pois o comprimento excede 5após anexar [CLS]e [SEP]tokens. No entanto, se você tiver um max_lengthde 10. O texto tokenizado corresponde a [101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0], onde 101 é id de [CLS]e 102 é id de [SEP]tokens. Assim, preenchido por zeros para fazer todo o texto ter o comprimento demax_length

Da mesma forma, truncate=Trueirá garantir que max_length seja estritamente cumprido, ou seja, frases mais longas serão truncadas max_lengthapenas setruncate=True