Bagaimana cara kerja argumen max_length, padding, dan truncation di HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ') ??

Dec 11 2020

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:

  1. max_length=5 akan menyimpan semua kalimat dengan panjang 5 secara ketat
  2. padding=max_length akan menambahkan padding 1 ke kalimat ketiga
  3. truncate=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

1 AshwinGeetD'Sa Dec 11 2020 at 23:58

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 5setelah penambahan [CLS]dan [SEP]token. Namun, jika Anda memiliki max_length10. 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=Trueakan memastikan bahwa max_length dipatuhi dengan ketat, yaitu kalimat yang lebih panjang dipotong max_lengthhanya jikatruncate=True