Jak działają argumenty max_length, padding i truncation w HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ')?
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:
max_length=5
będzie ściśle przestrzegać wszystkich zdań o długości 5padding=max_length
doda dopełnienie 1 do trzeciego zdaniatruncate=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
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 5
po dołączeniu [CLS]
i [SEP]
tokenach. Jeśli jednak masz max_length
10, 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=True
zapewni ścisłe przestrzeganie wartości max_length, tj. Dłuższe zdania będą skracane max_length
tylko wtedy, gdytruncate=True