
Buat model suling dari setiap model bahasa bertopeng di hub Huggingface dengan hanya satu perintah bash.
Fitur:
Pertama, klon proyek dan pasang dependensi.
# clone project
git clone https://github.com/iPieter/universal-distillation
# install project
cd universal-distillation
pip install -e .
pip install -r requirements.txtDalam tutorial ini, kami akan menunjukkan kepada Anda cara mengatur tugas distilasi dari baris perintah. Anda akan membutuhkan dua hal:
bert-base-uncased standar.Kami akan menggunakan bagian bahasa Inggris dari Corpus Europarl. Ini adalah korpus paralel berkualitas tinggi dari parlement Eropa yang dibuat oleh penafsir dan penerjemah profesional. Ini juga cukup kecil untuk corpus bahasa saat ini, hanya 114 MB, tetapi untuk tutorial distilasi kami tidak apa -apa.
wget https://opus.nlpl.eu/download.php ? f = Europarl/v8/mono/en.txt.gz -O en.txt.gz
gunzip en.txt.gz Data sekarang dibatalkan dan disimpan dalam file en.txt .
Sekarang kami memiliki data, kami dapat memulai pelatihan. Mengunduh model guru akan terjadi secara otomatis, jadi tidak perlu melakukan ini secara manual. Jika Anda merasa ini memakan waktu terlalu lama dan Anda hanya ingin mencoba pelatihan, misalnya untuk mendapatkan rasa waktu, Anda dapat menambahkan --limit_train_batches N . Ini membatasi setiap zaman ke N batch selama pelatihan.
python universal_distillation/distillation.py
--batch_size 8
--gpus 1
--max_epochs 3
--save_dir my_distilled_model/
--teacher bert-base-uncased
--data en.txt Ada beberapa hal yang terjadi di latar belakang setelah Anda menjalankan perintah itu. Pertama, perpustakaan ini menciptakan model siswa dan guru. Guru itu bert-base-uncased dan siswa akan menggunakan arsitektur yang sama dengan guru secara default, hanya jumlah kepala yang lebih kecil: 6 bukan 12. Karena kami melatih domain tertentu (Europarl), ini sudah cukup. Tentu saja, Anda dapat mencampur dan mencocokkan guru yang berbeda dan lebih besar dengan siswa yang lebih kecil, tetapi kinerjanya akan sangat bervariasi.
Kedua, perpustakaan Huggingface mengunduh model guru dan tokenizer. Ketiga, dataset dimuat dari disk dan diinisialisasi dengan tokenizer, perhatikan bahwa tokenisasi itu sendiri terjadi kemudian secara default. Akhirnya, loop distilasi dimulai.
Akhirnya, Anda dapat menggunakan model dengan perpustakaan Huggingface! Semua file dari siswa (model Pytorch dan tokenizer) disimpan di folder yang kami tetapkan sebelumnya: my_distilled_model/ . Anda dapat mengimpor model dari folder ini secara langsung dan menguji tugas pemodelan bahasa bertopeng dengan hanya 3 baris:
from transformers import pipeline
p = pipeline ( "fill-mask" , model = "my_distilled_model/" )
p ( "This is a [MASK]." )Meskipun ini adalah contoh Straitforward, ini sering cukup untuk membuat model yang diadaptasi domain Anda sendiri. Dalam hal ini, itu
Anda juga dapat menjalankan evaluasi intrinsik menggunakan pseudo-perplexity. Anda perlu menentukan guru dan model suling, tetapi jika Anda hanya menjalankan evaluasi, Anda dapat memberikan model target untuk kedua argumen.
python universal_distillation/evaluation.py
--gpus=0
--limit_test_batches=500
--teacher=pdelobelle/robbert-v2-dutch-base
--data=data/oscar_dutch/nl_dedup_part_2.txt
--checkpoint=DTAI-KULeuven/robbertje-39-gb-non-shuffled Basis kode ini juga digunakan untuk makalah ECML-PKDD 2022 kami, di mana kami menggabungkan distilasi pengetahuan model bahasa dengan kendala keadilan. Kendala yang kami uji dalam makalah ini adalah substitusi yang kuat dari kata ganti gender, tetapi kode tersebut mendukung setiap substitusi tunggal. Ini dapat ditambahkan ke proses distilasi dengan mendefinisikan token mana yang ingin Anda menyamakan kedudukan. Misalnya, he dan she memiliki Token IDS 2016 dan 2002, sehingga kita dapat mendefinisikan pasangan substitusi dengan kedua token. Probabilitas atas kedua token menjadi lebih disamakan.
Anda dapat menambahkan token dengan memodifikasi universal-distillation/distillation.py di sekitar baris 90. Jangan lupa juga memasukkan kendala saat membuat model BaseTransformer .
constraints = [[ 2016 , 2002 ]] # she # he
model = BaseTransformer ( args . teacher , constraints = constraints , ** vars ( args ))