download.sh ) Pertama, siapkan data. Donwload Squad Data and Glove dan NLTK Corpus (~ 850 MB, ini akan mengunduh file ke $HOME/data ):
chmod +x download.sh; ./download.sh
Kedua, preprocess stanford qa dataset (bersama dengan vektor sarung tangan) dan menyimpannya dalam $PWD/data/squad (~ 5 menit):
python -m squad.prepro
Model ini memiliki parameter ~ 2,5m. Model ini dilatih dengan Nvidia Titan X (Pascal Architecture, 2016). Model ini membutuhkan setidaknya 12GB RAM GPU. Jika RAM GPU Anda lebih kecil dari 12GB, Anda dapat mengurangi ukuran batch (kinerja mungkin menurun), atau Anda dapat menggunakan multi GPU (lihat di bawah). Pelatihan itu menyatu pada langkah ~ 18k, dan butuh ~ 4s per langkah (yaitu ~ 20 jam).
Sebelum pelatihan, disarankan untuk terlebih dahulu mencoba kode berikut untuk memverifikasi semuanya baik -baik saja dan memori sudah cukup:
python -m basic.cli --mode train --noload --debug
Kemudian untuk melatih sepenuhnya, lari:
python -m basic.cli --mode train --noload
Anda dapat mempercepat proses pelatihan dengan bendera optimasi:
python -m basic.cli --mode train --noload --len_opt --cluster
Anda masih bisa menghilangkannya, tetapi pelatihan akan jauh lebih lambat.
Perhatikan bahwa selama pelatihan, skor EM dan F1 dari evaluasi sesekali tidak sama dengan skor dari skrip evaluasi pasukan resmi. Skor yang dicetak tidak resmi (skema penilaian kami sedikit lebih keras). Untuk mendapatkan nomor resmi, gunakan evaluator resmi (disalin dalam folder squad , squad/evaluate-v1.1.py ). Untuk informasi lebih lanjut lihat 3. Test.
Untuk menguji, jalankan:
python -m basic.cli
Demikian pula dengan pelatihan, Anda dapat memberikan bendera optimasi untuk mempercepat tes (5 menit pada data dev):
python -m basic.cli --len_opt --cluster
Perintah ini memuat model yang paling baru disimpan selama pelatihan dan mulai menguji pada data uji. Setelah proses berakhir, ia mencetak skor F1 dan EM, dan juga mengeluarkan file JSON ( $PWD/out/basic/00/answer/test-####.json , di mana #### adalah langkah#yang disimpan model). Perhatikan bahwa skor yang dicetak tidak resmi (skema penilaian kami sedikit lebih keras). Untuk mendapatkan nomor resmi, gunakan evaluator resmi (disalin dalam folder squad ) dan file output JSON:
python squad/evaluate-v1.1.py $HOME/data/squad/dev-v1.1.json out/basic/00/answer/test-####.json
Alih-alih melatih modelnya sendiri, Anda dapat memilih untuk menggunakan bobot pra-terlatih yang digunakan untuk penyerahan papan peringkat pasukan. Lihat lembar kerja ini di Codalab untuk mereproduksi hasilnya. Jika Anda tidak terbiasa dengan Codalab, ikuti langkah -langkah sederhana ini (mengingat bahwa Anda bertemu semua prereq di atas):
save.zip dari lembar kerja dan unzip di direktori saat ini.glove.6B.100d.txt dari folder data Glove Anda ( $HOME/data/glove/ ) ke direktori saat ini. basic/run_single.sh $HOME/data/squad/dev-v1.1.json single.json
Ini menulis jawaban untuk single.json di direktori saat ini. Anda kemudian dapat menggunakan evaluator resmi untuk mendapatkan skor EM dan F1. Jika Anda ingin menjalankan pada GPU (~ 5 menit), ubah nilai bendera Batch_Size dalam file shell ke angka yang lebih tinggi (60 untuk RAM GPU 12GB). 4. Demikian pula, untuk mereproduksi metode ensemble:
basic/run_ensemble.sh $HOME/data/squad/dev-v1.1.json ensemble.json
Jika Anda ingin menjalankan di GPU, Anda harus menjalankan skrip secara berurutan dengan menghapus '&' di forloop, atau Anda perlu menentukan GPU yang berbeda untuk setiap menjalankan loop untuk.
Perhatikan skor ini berasal dari evaluator resmi (disalin dalam folder squad , squad/evaluate-v1.1.py ). Untuk informasi lebih lanjut lihat 3. Test. Skor muncul selama pelatihan bisa lebih rendah dari skor dari evaluator resmi.
| Em (%) | F1 (%) | |
|---|---|---|
| lajang | 67.7 | 77.3 |
| ansambel | 72.6 | 80.7 |
| Em (%) | F1 (%) | |
|---|---|---|
| lajang | 68.0 | 77.3 |
| ansambel | 73.3 | 81.1 |
Lihat makalah kami untuk detail lebih lanjut. Lihat papan peringkat pasukan untuk dibandingkan dengan model lain.
Model kami mendukung pelatihan multi-GPU. Kami mengikuti paradigma paralelisasi yang dijelaskan dalam tutorial TensorFlow. Singkatnya, jika Anda ingin menggunakan ukuran batch 60 (default) tetapi jika Anda memiliki 3 GPU dengan 4GB RAM, maka Anda menginisialisasi setiap GPU dengan ukuran batch 20, dan gabungkan gradien pada CPU. Ini dapat dengan mudah dilakukan dengan menjalankan:
python -m basic.cli --mode train --noload --num_gpus 3 --batch_size 20
Demikian pula, Anda dapat mempercepat pengujian dengan:
python -m basic.cli --num_gpus 3 --batch_size 20
Untuk saat ini, silakan merujuk ke cabang demo dari repositori ini.