Comment fonctionnent les arguments max_length, padding et truncation dans HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ')?

Dec 11 2020

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:

  1. max_length=5 conservera strictement toutes les phrases à partir de la longueur 5
  2. padding=max_length ajoutera un remplissage de 1 à la troisième phrase
  3. truncate=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

1 AshwinGeetD'Sa Dec 11 2020 at 23:58

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 5après l'ajout [CLS]et les [SEP]jetons. Cependant, si vous avez un max_lengthde 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=Truegarantira que max_length est strictement respectée, c'est-à-dire que les phrases plus longues ne sont tronquées max_lengthque sitruncate=True