Implementasi model generator dialog saraf dengan XLNet
Yang et al. (2019) dan arsitektur GPT2
Radford dkk. (2019) pada tiga kumpulan data saat ini: DailyDialog
Li dkk. (2017) , PersonaChat
Zhang dkk. (2018) dan TopicalChat
baru Gopalakrishnan dkk. (2019) dari Alexa Prize Socialbot Grand Challenge 3. Top-k sampling Fan dkk. (2018) dan decoding inti Holtzman dkk. (2019) tersedia sebagai teknik decoding. Tujuan pelatihannya adalah pemodelan bahasa autoregresif pada ujaran dan sejarah dialog.
Model ini dapat memanfaatkan pelatihan presisi campuran dari nvidia/apex. Perhatikan bahwa apex tidak diperlukan dan hanya digunakan jika tersedia. Untuk panduan instalasi lihat instruksi resmi. Penggunaan modul ini tidak berguna untuk semua GPU (hanya Volta dan Turing) dan Anda harus memeriksa terlebih dahulu apakah instance Anda mendukung pelatihan presisi campuran.
Untuk melatih model, kloning repositori ini dan instal dependensi. Proyek ini menggunakan cython untuk merakit batch agar saluran input lebih cepat. Ia juga lebih suka menggunakan python virtualenv.
git clone https://github.com/bme-chatbots/dialogue-generation.git
cd dialogue-generation
pip install -r requirements.txt
python setup.py build_ext --inplace
Perintah berikut akan memulai pelatihan pada satu GPU/CPU dengan model gpt2-medium
di PersonaChat
. --name
adalah nama subdirektori di folder model, tempat log dan pos pemeriksaan disimpan.
python -m src.train --model gpt2-medium --data personachat --name my_test_run
Untuk pelatihan multi-gpu terdistribusi, skrip kereta harus diberi nama seperti ini.
python -m torch.distributed.launch --nproc_per_node=NUM_GPUS src/train.py --model gpt2
Anda juga dapat menggunakan konfigurasi yang telah ditentukan sebelumnya dengan meneruskan jalur file config json sebagai argumen --config
. Ini tersedia di folder src/configs
dan hasil pelatihannya dapat dilihat di bawah bagian hasil.
python -m src.train --config src/configs/xlnet-dailydialog.json
Melatih modelnya cepat dan mudah di Google Colaboratory atau kernel Kaggle . Penting untuk mengatur jenis runtime ke GPU dengan unit Tesla P100 atau Tesla T4 yang baru karena unit ini dapat sepenuhnya memanfaatkan pelatihan presisi campuran dan jauh lebih cepat daripada versi Tesla K80 yang lebih lama. Anda dapat memeriksa jenis saat ini dengan menjalankan !nvidia-smi
di sel colab Anda.
Sebagai pintasan, berikut adalah contoh inti lengkap, yang dapat Anda impor ke Google Drive sebagai file kolaborasi.
Salin dan jalankan kode berikut di sel file colab (atau kernel Kaggle) Anda untuk menginstal model. Jika Anda menggunakan kernel Kaggle Anda juga harus mengaktifkan akses internet.
! git clone https://github.com/bme-chatbots/dialogue-generation.git
! python -m pip install --upgrade pip
# installing apex is optional and is only useful if Colab's Tesla P100 or T4 is used
# !git clone https://github.com/NVIDIA/apex
# !cd apex; pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" .
# building the cython code and installing the required packages
! cd dialogue-generation ; pip install -r requirements.txt ; python setup.py build_ext --inplace
Metrik pelatihan dan validasi dicatat ke Tensorboard, yang juga dapat dilacak dalam file colab jika kode di bawah ini dijalankan sebelum sel pelatihan.
%load_ext tensorboard
%tensorboard --logdir " dialogue-generation/model "
Model tersebut kemudian dapat dilatih hanya dengan menjalankan skrip train
dengan flag default. Anda dapat melihat semua tanda yang diterima oleh skrip train.py
dengan memberikan tanda -h
.
! cd dialogue-generation ; python -m src.train
Setelah pelatihan, model dapat diunduh dengan mengatur tautan unduhan di cuplikan berikut ke yang dicatat oleh skrip setelah evaluasi. ( Saving model to dialogue-generation/src/../model/gpt2/19.11.03-12:59:47/model.pt
)
from IPython . display import FileLink
# note that in case of kaggle kernel you have to give path
# relative to your working directory
FileLink ( r'dialogue-generation/src/../model/gpt2/19.11.03-12:59:47/model.pt' )
Mode evaluasi interaktif tersedia pada model terlatih dengan menjalankan skrip interact
dan menyediakan jalur model terlatih dengan --model_file
. Anda juga dapat memberikan file --config
atau cukup memberikan argumen --model
dan --name
yang sama, yang digunakan selama pelatihan.
python -m src.interact --model gpt2-medium --name my_test_run
python -m src.interact --config src/configs/xlnet-dailydialog.json
Untuk melatih model apa pun pada kumpulan data Anda sendiri, Anda cukup membuat subkelas dari DialogDataset
dan mengimplementasikan pembuatan data dari file mentah. Mengingat train.txt
, valid.txt
dan test.txt
ditempatkan di data<name of your data>
, di mana setiap belokan dalam dialog berada di baris baru dan dialog terpisah dibagi dengan baris kosong tambahan.
├── data
| ├── dailydialog
| └── custom_dataset # name of your data ( custom_dataset by default )
| ├── train.txt # the correctly formated train, valid and test files
| ├── valid.txt
| └── test.txt
├── src
Hello how are you?
Hi I'm fine thanks. And you?
Me too thanks for asking.
Hi my name Peter.
Nice to meet you I am Eric.
Contoh kelas himpunan data khusus bernama CustomDataset
diimplementasikan di data.py
yang membaca himpunan data dengan properti ini.
Dialog di bawah ini diambil sampelnya dari gpt2
yang dilatih dengan parameter default untuk 7 epoch (149051 langkah) dan --max_hist 3
pada kumpulan data PersonaChat
.
User: hi
Bot: greetings, i'm gerald.
User: how are you ?
Bot: good, thanks. getting ready for another hike, i love hiking!
User: oh realy? where are you going?
Bot: pikes peak. i am curently exploring famous mountains when i have time.
User: that is cool are you going alone?
Bot: my brother is in the us, we go hiking with him every month.
User: how old are you by the way?
Bot: a little under 46 years old
User: are you in a relationship?
Bot: yes i am married, 3 boys, i am pregnant again. i am too busy to focus
Dialog di bawah ini diambil sampelnya dari gpt2
yang dilatih dengan parameter default selama 8 epoch (48824 langkah) dan --max_hist 3
pada dataset DailyDialog
.
User: hi how are you ?
Bot: fine. i got a promotion at work earlier this week.
User: where do you work ?
Bot: I work at the polling place.
User: where is that ?
Bot: I live in the dorms across the street.
User: do you like it ?
Bot: it's great. I heard it is far from here.
User: are you a student ?
Bot: yes. I am a student too.