Wie funktionieren die Argumente max_length, padding und truncation in HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ')?

Dec 11 2020

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:

  1. max_length=5 Alle Sätze ab Länge 5 werden streng eingehalten
  2. padding=max_length fügt dem dritten Satz eine Auffüllung von 1 hinzu
  3. truncate=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

1 AshwinGeetD'Sa Dec 11 2020 at 23:58

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 5nach dem Anhängen [CLS]und [SEP]Token überschritten wird . Wenn Sie jedoch eine max_lengthvon 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=Truewird sichergestellt, dass die max_length strikt eingehalten wird, dh längere Sätze werden max_lengthnur dann abgeschnitten, wenntruncate=True