Bagaimana cara kerja argumen max_length, padding, dan truncation di HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ') ??
Saya bekerja dengan masalah Klasifikasi Teks di mana saya ingin menggunakan model BERT sebagai basis diikuti oleh lapisan Dense. Saya ingin tahu bagaimana cara kerja 3 argumen? Misalnya, jika saya memiliki 3 kalimat sebagai:
'My name is slim shade and I am an aspiring AI Engineer',
'I am an aspiring AI Engineer',
'My name is Slim'
JADI apa yang akan dilakukan 3 argumen ini? Apa yang saya pikirkan adalah sebagai berikut:
max_length=5
akan menyimpan semua kalimat dengan panjang 5 secara ketatpadding=max_length
akan menambahkan padding 1 ke kalimat ketigatruncate=True
akan memotong kalimat pertama dan kedua sehingga panjangnya tepat 5.
Tolong koreksi saya jika saya salah.
Di bawah ini adalah kode saya yang telah saya gunakan.
! 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'])
Jawaban
Apa yang Anda asumsikan hampir benar, namun hanya ada sedikit perbedaan.
max_length=5
, max_length
menentukan panjang teks yang di-tokenized . Secara default, BERT melakukan tokenisasi potongan kata. Misalnya, kata "playing" dapat dibagi menjadi "play" dan "## ing" (Ini mungkin tidak terlalu tepat, tetapi hanya untuk membantu Anda memahami tentang tokenisasi potongan kata), diikuti dengan menambahkan [CLS]
token di awal kalimat, dan [SEP]
tanda di akhir kalimat. Jadi, ini pertama-tama menandai kalimat, memotongnya menjadi max_length-2
(jika truncation=True
), lalu menambahkan [CLS]
di awal dan [SEP]
menandai di akhir. (Jadi total panjang max_length
)
padding='max_length'
, Dalam contoh ini tidak terlalu jelas bahwa contoh ke-3 akan diisi, karena panjangnya melebihi 5
setelah penambahan [CLS]
dan [SEP]
token. Namun, jika Anda memiliki max_length
10. Teks yang diberi token sesuai dengan [101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0]
, di mana 101 adalah id dari [CLS]
dan 102 adalah id dari [SEP]
token. Jadi, diisi dengan nol untuk membuat semua teks menjadi panjangmax_length
Demikian juga, truncate=True
akan memastikan bahwa max_length dipatuhi dengan ketat, yaitu kalimat yang lebih panjang dipotong max_length
hanya jikatruncate=True