Garpu dari https://github.com/huggingface/transformers/tree/86d5fb0b360e68de46d40265e7c707fe68c8015b/examples/pytorch/bahasa-modeling pada 17.05.2021.
Menyempurnakan (atau melatih dari awal) model perpustakaan untuk pemodelan bahasa pada kumpulan data teks untuk GPT, GPT-2, ALBERT, BERT, DistilBERT, RoBERTa, XLNet... GPT dan GPT-2 dilatih atau disempurnakan menggunakan kerugian pemodelan bahasa kausal (CLM) sementara ALBERT, BERT, DistilBERT dan RoBERTa dilatih atau disempurnakan menggunakan kerugian pemodelan bahasa bertopeng (MLM). XLNet menggunakan pemodelan bahasa permutasi (PLM), Anda dapat menemukan informasi lebih lanjut tentang perbedaan antara tujuan-tujuan tersebut di ringkasan model kami.
Ada dua set skrip yang disediakan. Set pertama memanfaatkan Trainer API. Set kedua dengan no_trainer
di akhiran menggunakan loop pelatihan khusus dan memanfaatkan ? Mempercepat perpustakaan. Kedua set menggunakan ? Pustaka kumpulan data. Anda dapat dengan mudah menyesuaikannya dengan kebutuhan Anda jika Anda memerlukan pemrosesan tambahan pada kumpulan data Anda.
Catatan: Skrip lama run_language_modeling.py
masih tersedia di sini.
Contoh berikut, akan dijalankan pada kumpulan data yang dihosting di hub kami atau dengan file teks Anda sendiri untuk pelatihan dan validasi. Kami memberikan contoh keduanya di bawah ini.
Contoh berikut menyempurnakan GPT-2 di WikiText-2. Kami menggunakan WikiText-2 mentah (tidak ada token yang diganti sebelum tokenisasi). Kerugian di sini adalah pemodelan bahasa kausal.
python run_clm.py
--model_name_or_path gpt2
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-clm
Ini memerlukan waktu sekitar setengah jam untuk melatih satu GPU K80 dan sekitar satu menit untuk menjalankan evaluasi. Ini mencapai skor ~20 kebingungan setelah menyempurnakan kumpulan data.
Untuk menjalankan file pelatihan dan validasi Anda sendiri, gunakan perintah berikut:
python run_clm.py
--model_name_or_path gpt2
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-clm
Ini menggunakan Trainer
HuggingFace bawaan untuk pelatihan. Jika Anda ingin menggunakan loop pelatihan khusus, Anda dapat memanfaatkan atau mengadaptasi skrip run_clm_no_trainer.py
. Lihatlah skrip untuk daftar argumen yang didukung. Contohnya ditunjukkan di bawah ini:
python run_clm_no_trainer.py
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--model_name_or_path gpt2
--output_dir /tmp/test-clm
Contoh berikut menyempurnakan RoBERTa di WikiText-2. Di sini juga, kami menggunakan WikiText-2 mentah. Kerugiannya berbeda karena BERT/RoBERTa memiliki mekanisme dua arah; oleh karena itu kami menggunakan kerugian yang sama yang digunakan selama pra-pelatihan mereka: pemodelan bahasa bertopeng.
Sesuai dengan makalah RoBERTa, kami menggunakan masking dinamis daripada masking statis. Oleh karena itu, model mungkin akan menyatu sedikit lebih lambat (over-fitting memerlukan waktu yang lebih lama).
python run_mlm.py
--model_name_or_path roberta-base
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-mlm
Untuk menjalankan file pelatihan dan validasi Anda sendiri, gunakan perintah berikut:
python run_mlm.py
--model_name_or_path roberta-base
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-mlm
Jika kumpulan data Anda disusun dengan satu sampel per baris, Anda dapat menggunakan tanda --line_by_line
(jika tidak, skrip akan menggabungkan semua teks dan kemudian membaginya menjadi blok dengan panjang yang sama).
Ini menggunakan Trainer
HuggingFace bawaan untuk pelatihan. Jika Anda ingin menggunakan loop pelatihan khusus, Anda dapat memanfaatkan atau mengadaptasi skrip run_mlm_no_trainer.py
. Lihatlah skrip untuk daftar argumen yang didukung. Contohnya ditunjukkan di bawah ini:
python run_mlm_no_trainer.py
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--model_name_or_path roberta-base
--output_dir /tmp/test-mlm
Catatan: Di TPU, Anda harus menggunakan tanda --pad_to_max_length
bersama dengan tanda --line_by_line
untuk memastikan semua kumpulan Anda memiliki panjang yang sama.
Bagian ini dipindahkan ke examples/research_projects/mlm_wwm
.
XLNet menggunakan tujuan pelatihan yang berbeda, yaitu pemodelan bahasa permutasi. Ini adalah metode autoregresif untuk mempelajari konteks dua arah dengan memaksimalkan kemungkinan yang diharapkan atas semua permutasi urutan faktorisasi urutan masukan.
Kami menggunakan tanda --plm_probability
untuk menentukan rasio panjang rentang token bertopeng terhadap panjang konteks sekitarnya untuk pemodelan bahasa permutasi.
Bendera --max_span_length
juga dapat digunakan untuk membatasi panjang rentang token bertopeng yang digunakan untuk pemodelan bahasa permutasi.
Berikut ini cara menyempurnakan XLNet di wikitext-2:
python run_plm.py
--model_name_or_path=xlnet-base-cased
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-plm
Untuk menyempurnakannya pada file pelatihan dan validasi Anda sendiri, jalankan:
python run_plm.py
--model_name_or_path=xlnet-base-cased
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-plm
Jika kumpulan data Anda disusun dengan satu sampel per baris, Anda dapat menggunakan tanda --line_by_line
(jika tidak, skrip akan menggabungkan semua teks dan kemudian membaginya menjadi blok dengan panjang yang sama).
Catatan: Di TPU, Anda harus menggunakan tanda --pad_to_max_length
bersama dengan tanda --line_by_line
untuk memastikan semua kumpulan Anda memiliki panjang yang sama.