Jak działają argumenty max_length, padding i truncation w HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ')?

Dec 11 2020

Pracuję z problemem klasyfikacji tekstu, w którym chcę użyć modelu BERT jako podstawy, a następnie warstw gęstych. Chcę wiedzieć, jak działają 3 argumenty? Na przykład, jeśli mam 3 zdania jako:

'My name is slim shade and I am an aspiring AI Engineer',
'I am an aspiring AI Engineer',
'My name is Slim'

Więc co zrobią te 3 argumenty? To, co myślę, jest następujące:

  1. max_length=5 będzie ściśle przestrzegać wszystkich zdań o długości 5
  2. padding=max_length doda dopełnienie 1 do trzeciego zdania
  3. truncate=True skrócą pierwsze i drugie zdanie tak, aby ich długość wynosiła ściśle 5.

Proszę, popraw mnie jeśli się mylę.

Poniżej znajduje się mój kod, którego użyłem.

! 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'])

Odpowiedzi

1 AshwinGeetD'Sa Dec 11 2020 at 23:58

To, co założyłeś, jest prawie poprawne, jest jednak kilka różnic.

max_length=5, max_length określa długość tokenizowanego tekstu . Domyślnie BERT przeprowadza tokenizację elementów słownych. Na przykład słowo „gra” można podzielić na „grać” i „## ing” (może to nie być zbyt precyzyjne, ale tylko po to, aby pomóc Ci zrozumieć tokenizację fragmentów słowa), a następnie dodać [CLS]token na początku zdanie i [SEP]symbol na końcu zdania. W ten sposób najpierw tokenizuje zdanie, obcina je do max_length-2(if truncation=True), a następnie [CLS]dodaje na początku przed i [SEP]na końcu (czyli całkowita długość max_length)

padding='max_length', W tym przykładzie nie jest zbyt oczywiste, że trzeci przykład zostanie wypełniony, ponieważ długość przekracza 5po dołączeniu [CLS]i [SEP]tokenach. Jeśli jednak masz max_length10, odpowiada tokenizowanemu tekstowi [101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0], gdzie 101 to id, [CLS]a 102 to id [SEP]tokenów. Tak więc, uzupełnione zerami, aby cały tekst miał długośćmax_length

Podobnie, truncate=Truezapewni ścisłe przestrzeganie wartości max_length, tj. Dłuższe zdania będą skracane max_lengthtylko wtedy, gdytruncate=True