Implementasi TensorFlow dari QANET Google (sebelumnya Cepat Membaca Bacaan (FRC)) dari ICLR2018. (Catatan: Ini bukan implementasi resmi dari penulis makalah)
Saya menulis posting blog tentang mengimplementasikan Qanet. Lihat di sini untuk informasi lebih lanjut!
Pipa pelatihan dan preprocessing telah diadopsi dari R-NET oleh HKust-KnowComp. Mode demo berfungsi. Setelah pelatihan, cukup gunakan python config.py --mode demo untuk menjalankan server demo interaktif.
Karena masalah memori, satu-satunya perhatian produk utama digunakan sebagai lawan dari perhatian multi-head 8 kepala seperti di koran asli. Ukuran tersembunyi juga dikurangi menjadi 96 dari 128 karena penggunaan GTX1080 dibandingkan dengan P100 yang digunakan di koran. (8GB memori GPU tidak cukup. Jika Anda memiliki GPU memori 12GB, silakan bagikan hasil pelatihan Anda dengan kami.)
Saat ini, model terbaik mencapai EM/F1 = 70.8/80.1 dalam langkah 60k (6 ~ 8 jam). Hasil terperinci tercantum di bawah ini.

Dataset yang digunakan untuk tugas ini adalah Stanford Question menjawab dataset. Embeddings sarung tangan pretrained yang diperoleh dari perayapan umum dengan token 840B yang digunakan untuk kata -kata.
Untuk mengunduh dan melakukan preprocess data, jalankan
# download SQuAD and Glove
sh download.sh
# preprocess the data
python config.py --mode preproSama seperti R-NET oleh HKust-KnowComp, parameter hiper disimpan dalam config.py. Untuk men -debug/kereta/tes/demo, lari
python config.py --mode debug/train/test/demoUntuk mengevaluasi model dengan kode resmi, jalankan
python evaluate-v1.1.py ~ /data/squad/dev-v1.1.json train/{model_name}/answer/answer.json Direktori default untuk file log Tensorboard adalah train/{model_name}/event
Untuk membangun gambar Docker (membutuhkan nvidia-docker), jalankan
nvidia-docker build -t tensorflow/qanet .
Setel jalur pemasangan volume dan pemetaan port (untuk mode demo)
export QANETPATH={/path/to/cloned/QANet}
export CONTAINERWORKDIR=/home/QANet
export HOSTPORT=8080
export CONTAINERPORT=8080
bash ke dalam wadah
nvidia-docker run -v $QANETPATH:$CONTAINERWORKDIR -p $HOSTPORT:$CONTAINERPORT -it --rm tensorflow/qanet bash
Setelah berada di dalam wadah, ikuti perintah yang disediakan di atas dimulai dengan mengunduh skuad dan kumpulan data sarung tangan.
Bobot model pretrained untuk sementara tidak tersedia.
Berikut adalah hasil yang dikumpulkan dari repositori ini dan kertas asli.
| Model | Langkah pelatihan | Ukuran | Kepala perhatian | Ukuran Data (AUG) | Em | F1 |
|---|---|---|---|---|---|---|
| Model saya | 35.000 | 96 | 1 | 87k (tidak ada Agustus) | 69.0 | 78.6 |
| Model saya | 60.000 | 96 | 1 | 87k (tidak ada Agustus) | 70.4 | 79.6 |
| Model saya (dilaporkan oleh @jasonbw) | 60.000 | 128 | 1 | 87k (tidak ada Agustus) | 70.7 | 79.8 |
| Model saya (dilaporkan oleh @chesterkuo) | 60.000 | 128 | 8 | 87k (tidak ada Agustus) | 70.8 | 80.1 |
| Kertas asli | 35.000 | 128 | 8 | 87k (tidak ada Agustus) | Na | 77.0 |
| Kertas asli | 150.000 | 128 | 8 | 87k (tidak ada Agustus) | 73.6 | 82.7 |
| Kertas asli | 340.000 | 128 | 8 | 240k (Agustus) | 75.1 | 83.8 |
Jalankan Tensorboard untuk Visualisasi.
$ tensorboard --logdir=./