Wie funktionieren die Argumente max_length, padding und truncation in HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ')?
Ich arbeite mit dem Problem der Textklassifizierung, bei dem ich das BERT-Modell als Basis verwenden möchte, gefolgt von dichten Ebenen. Ich möchte wissen, wie die 3 Argumente funktionieren. Zum Beispiel, wenn ich 3 Sätze habe als:
'My name is slim shade and I am an aspiring AI Engineer',
'I am an aspiring AI Engineer',
'My name is Slim'
Also, was werden diese 3 Argumente tun? Was ich denke ist wie folgt:
max_length=5
Alle Sätze ab Länge 5 werden streng eingehaltenpadding=max_length
fügt dem dritten Satz eine Auffüllung von 1 hinzutruncate=True
schneidet den ersten und zweiten Satz so ab, dass ihre Länge streng 5 beträgt.
Bitte korrigieren Sie mich, wenn ich falsch liege.
Unten ist mein Code, den ich verwendet habe.
! 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'])
Antworten
Was Sie angenommen haben, ist fast richtig, es gibt jedoch nur wenige Unterschiede.
max_length=5
, max_length
gibt die Länge des tokenisierten Textes an . Standardmäßig führt BERT eine Wortstück-Tokenisierung durch. Zum Beispiel kann das Wort "Spielen" in "Spielen" und "## ing" unterteilt werden (dies ist möglicherweise nicht sehr genau, dient jedoch nur zum besseren Verständnis der Tokenisierung von Wortstücken), gefolgt vom Hinzufügen eines [CLS]
Tokens am Anfang des Satz und [SEP]
Token am Ende des Satzes. Daher wird der Satz zuerst mit einem Token versehen, auf max_length-2
(if truncation=True
) abgeschnitten , dann [CLS]
am Anfang vorangestellt und [SEP]
am Ende mit einem Token versehen. (Also eine Gesamtlänge von max_length
)
padding='max_length'
In diesem Beispiel ist es nicht sehr offensichtlich, dass das dritte Beispiel aufgefüllt wird, da die Länge 5
nach dem Anhängen [CLS]
und [SEP]
Token überschritten wird . Wenn Sie jedoch eine max_length
von 10 haben, entspricht der tokenisierte Text [101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0]
, wobei 101 die ID von [CLS]
und 102 die ID von [SEP]
Token ist. Somit mit Nullen aufgefüllt, um den gesamten Text auf die Länge von zu bringenmax_length
Ebenso truncate=True
wird sichergestellt, dass die max_length strikt eingehalten wird, dh längere Sätze werden max_length
nur dann abgeschnitten, wenntruncate=True