Como os argumentos max_length, padding e truncation funcionam no HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ') ??
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:
max_length=5
irá manter todas as frases de comprimento 5 estritamentepadding=max_length
irá adicionar um preenchimento de 1 à terceira frasetruncate=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
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 5
após anexar [CLS]
e [SEP]
tokens. No entanto, se você tiver um max_length
de 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=True
irá garantir que max_length seja estritamente cumprido, ou seja, frases mais longas serão truncadas max_length
apenas setruncate=True