Comment fonctionnent les arguments max_length, padding et truncation dans HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ')?
Je travaille avec un problème de classification de texte où je veux utiliser le modèle BERT comme base suivi de couches denses. Je veux savoir comment fonctionnent les 3 arguments? Par exemple, si j'ai 3 phrases comme:
'My name is slim shade and I am an aspiring AI Engineer',
'I am an aspiring AI Engineer',
'My name is Slim'
Alors que vont faire ces 3 arguments? Ce que je pense est le suivant:
max_length=5
conservera strictement toutes les phrases à partir de la longueur 5padding=max_length
ajoutera un remplissage de 1 à la troisième phrasetruncate=True
tronquera la première et la deuxième phrase afin que leur longueur soit strictement de 5.
S'il vous plait corrigez moi si je me trompe.
Voici mon code que j'ai utilisé.
! 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'])
Réponses
Ce que vous avez supposé est presque correct, cependant, il y a peu de différences.
max_length=5
, le max_length
spécifie la longueur du texte tokenisé . Par défaut, BERT effectue la tokenisation des morceaux de mots. Par exemple, le mot «jouer» peut être divisé en «jouer» et «## ing» (ce n'est peut-être pas très précis, mais juste pour vous aider à comprendre la tokenisation des morceaux de mots), suivi de l'ajout d'un [CLS]
jeton au début de la phrase et [SEP]
jeton à la fin de la phrase. Ainsi, il tokenise d'abord la phrase, la tronque en max_length-2
(if truncation=True
), puis en préfixe [CLS]
au début et en [SEP]
jeton à la fin (donc une longueur totale de max_length
)
padding='max_length'
, Dans cet exemple, il n'est pas très évident que le troisième exemple sera rembourré, car la longueur dépasse 5
après l'ajout [CLS]
et les [SEP]
jetons. Cependant, si vous avez un max_length
de 10. Le texte tokenisé correspond à [101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0]
, où 101 est id of [CLS]
et 102 est id of [SEP]
tokens. Ainsi, complété par des zéros pour rendre tout le texte à la longueur demax_length
De même, truncate=True
garantira que max_length est strictement respectée, c'est-à-dire que les phrases plus longues ne sont tronquées max_length
que sitruncate=True