Repo ini adalah implementasi model RNN yang penuh perhatian untuk tugas pemodelan bahasa.
Pemodelan bahasa dilakukan pada dataset Penntreebank dan Wikuxt-02. File -file tersebut diuraikan sedemikian rupa sehingga setiap contoh pelatihan terdiri dari satu kalimat dari korpus, empuk hingga panjang batch maks 35. Kalimat yang lebih panjang terpotong. Ini dilakukan untuk mengelola perhatian dan memperhatikan hanya kata -kata dalam kalimat (sebelum waktu jika pada timestep t).
A-RNN-LM (jaringan saraf berulang berbasis perhatian untuk pemodelan bahasa) pada awalnya diusulkan dalam dialog yang koheren dengan model bahasa berbasis perhatian (Hongyuan Mei et al. 2016, tautan), dan dalam model bahasa yang penuh perhatian (Salton et al. 2017, tautan).
Model ini terdiri dari menjalankan mekanisme perhatian tradisional pada keadaan tersembunyi sebelumnya dari lapisan RNN enkoder untuk mengkodekan vektor konteks yang kemudian dikombinasikan dengan keadaan tersembunyi yang dikodekan terakhir untuk memprediksi kata berikutnya dalam urutan.
Ketergantungan:
python=3.7torch>=1.0.0nltkmatplotlibtensorboardX Instal semua depedensi dan jalankan python main.py
Dataset akan diunduh dan diproses secara otomatis.
Beberapa opsi untuk berjalan adalah kemungkinan menjalankan python main.py --help untuk daftar lengkap.
usage: main.py [-h] [--batch-size N] [--epochs N] [--lr LR] [--patience P]
[--seed S] [--log-interval N] [--dataset [{wiki-02,ptb}]]
[--embedding-size N] [--n-layers N] [--hidden-size N]
[--positioning-embedding N] [--input-dropout D]
[--rnn-dropout D] [--decoder-dropout D] [--clip N]
[--optim [{sgd,adam,asgd}]] [--salton-lr-schedule]
[--early-stopping-patience P] [--attention]
[--no-positional-attention] [--tie-weights]
[--file-name FILE_NAME] [--parallel]
PyTorch Attentive RNN Language Modeling
optional arguments:
-h, --help show this help message and exit
--batch-size N input batch size for training (default: 64)
--epochs N number of epochs to train (default: 40)
--lr LR learning rate (default: 30.0)
--patience P patience for lr decrease (default: 5)
--seed S random seed (default: 123)
--log-interval N how many batches to wait before logging training
status (default 10)
--dataset [{wiki-02,ptb}]
Select which dataset (default: ptb)
--embedding-size N embedding size for embedding layer (default: 20)
--n-layers N layer size for RNN encoder (default: 1)
--hidden-size N hidden size for RNN encoder (default: 20)
--positioning-embedding N
hidden size for positioning generator (default: 20)
--input-dropout D input dropout (default: 0.5)
--rnn-dropout D rnn dropout (default: 0.0)
--decoder-dropout D decoder dropout (default: 0.5)
--clip N value at which to clip the norm of gradients (default:
0.25)
--optim [{sgd,adam,asgd}]
Select which optimizer (default: sgd)
--salton-lr-schedule Enables same training schedule as Salton et al. 2017
(default: False)
--early-stopping-patience P
early stopping patience (default: 25)
--attention Enable standard attention (default: False)
--no-positional-attention
Disable positional attention (default: False)
--tie-weights Tie embedding and decoder weights (default: False)
--file-name FILE_NAME
Specific filename to save under (default: uses params
to generate)
--parallel Enable using GPUs in parallel (default: False)
| Model | Jumlah parameter | Validasi kebingungan | Uji kebingungan |
|---|---|---|---|
| LSTM Baseline (Merity et al., 2017) | 7.86m | 66.77 | 64.96 |
| LM yang penuh perhatian (Salton et al. 2017) | 7.06m | 79.09 | 76.56 |
| LM Posisi Perhatian | 6.9m | 72.69 | 70.92 |
| Model | Jumlah parameter | Validasi kebingungan | Uji kebingungan |
|---|---|---|---|
| LSTM Baseline (Merity et al., 2017) | 7.86m | 72.43 | 68.50 |
| LM yang penuh perhatian (Salton et al. 2017) | 7.06m | 78.43 | 74.37 |
| LM Posisi Perhatian | 6.9m | 74.39 | 70.73 |
Anda dapat menjalankan kembali semua model yang menghasilkan tabel di atas hanya dengan menjalankan:
python test.py
Namun harap dicatat bahwa beberapa model ini memakan waktu lebih dari 8 jam untuk menyatu pada GPU 1080 tunggal, sehingga total run-time dari percobaan bisa sekitar 2 hari.
Dukungan multi-GPU dinonaktifkan secara default karena terbukti memiliki dampak negatif pada hasil. Selain itu, karena batch kecil dalam praktiknya sebenarnya tidak jauh lebih cepat karena banyak waktu dihabiskan untuk mengirim tensor ke GPU masing -masing.
Berikut ini ditampilkan perbandingan berdampingan dari dua distribusi perhatian pada contoh:
Kata-kata dalam sumbu x adalah input pada setiap langkah waktu dan kata-kata dalam sumbu y adalah target. Kedua model dilatih pada dataset Wikuxt-02 hingga konvergensi.