TF-NNLM-TK adalah toolkit yang ditulis dalam Python3 untuk pemodelan bahasa jaringan saraf menggunakan TensorFlow. Ini termasuk model dasar seperti RNNS dan LSTM serta model yang lebih canggih. Ini memberikan fungsionalitas untuk melakukan preprocess data, melatih model dan mengevaluasinya. Toolkit ini open-source di bawah lisensi Apache 2.
Saat ini, model berikut didukung:
Pertama instal Python dan TensorFlow. Kode diuji dengan Python 3 dan TensorFlow 1.8.
Untuk contoh pertama ini, kita perlu mengunduh toolkit dan beberapa data pelatihan. Kami akan menggunakan dataset PTB yang disediakan dalam tutorial Tomas Mikolov. Untuk ini, Anda dapat menjalankan kode berikut di baris perintah Anda:
git clone git clone https://github.com/uds-lsv/TF-NNLM-TK.git
cd TF-NNLM-TK
wget http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examples.tgz
tar -xzf simple-examples.tgzKemudian, untuk melatih dan mengevaluasi model bahasa saraf yang pertama dan sederhana, cukup jalankan kode berikut
python train_basic_rnn_models.py --save_dir=small_lstm --model=lstm --train_file=simple-examples/data/ptb.train.txt --test_file=simple-examples/data/ptb.test.txt
python test.py --model_file=small_lstm/model.ckpt --test_file=simple-examples/data/ptb.test.txtPelatihan ini memakan waktu sekitar 20 menit pada GPU GTX 1050TI.
Script pelatihan sudah memanggil kode pemrosesan data. Jika Anda menggunakan data default, Anda mungkin dapat melewatkan bagian ini.
Toolkit mencakup prosesor data, yang membaca file teks dan membuat dari itu dua array (numpy) yang menyimpan batch kata -kata input (riwayat) dan kata -kata target (prediksi). Kode ini juga menyediakan beberapa alat yang bermanfaat seperti fungsionalitas untuk membuat dan menyimpan kosa kata, untuk membuat jumlah atau untuk memetakan kata -kata OOV dalam file uji ke token yang tidak diketahui.
Bagian kode ini tidak memiliki fungsi utama. Sebaliknya, itu secara langsung dipanggil dalam kode Python dari skrip pelatihan. Misalnya, Anda dapat menelepon di Python
DataProcessor ( train_file , batch_size , seq_length , True , '<unk>' , history_size = history_size )Cuplikan kode ini akan mengambil train_file, melakukan transformasi yang dijelaskan di atas, dan membuat batch darinya menggunakan parameter yang diberikan.
TF-NNLM-TK menyediakan kode pelatihan untuk model bahasa saraf berikut:
Ini umum diketahui dan digunakan. Secara khusus, toolkit ini mengimplementasikan Vanilla-RNN, LSTM, LSTM dengan proyeksi dan GRU. Model -model ini dapat dilatih menggunakan skrip train_basic_rnn_models.py (lihat contoh di bawah).
Model -model ini menggunakan lebih dari n kata dari sejarah, bukan yang terakhir. Implementasi menyediakan tiga model: SRNN yang bergantung pada kata (WD-SRNN), SRNN (Wi-SRNN) yang independen-kata dan Forgetting-Factor SRNN (FF-SRNN). Informasi lebih lanjut tentang model ini dapat ditemukan di sini. Model -model ini dapat dilatih menggunakan skrip train_srnn.py
Model-model ini menggunakan dua negara bagian lokal dan global yang terpisah untuk mempelajari dependensi pendek dan jangka panjang secara terpisah. Implementasi TF segmental dari propagasi belakang menyebabkan model ini menderita secara drastis dari gradien menghilang di negara bagian setempat, yang menggunakan model vanilla-RNN, sehingga yang terakhir diganti (sementara oleh GRU). Informasi lebih lanjut tentang model ini dapat ditemukan di sini. Model ini dapat dilatih menggunakan skrip train_lsrc.py
Masing -masing skrip pelatihan ini (train_basic_rnn_models.py, train_srnn.py dan train_lsrc.py) mencakup sejumlah besar parameter, masing -masing memiliki deskripsi yang dilampirkan. Untuk mendapatkan deskripsi ini, misalnya, pada baris perintah Anda:
python train_basic_rnn_models.py --helpParameter default dari semua model mencoba mencocokkan konfigurasi kecil yang dilaporkan dalam resep TensorFlow PTB-LM:
| konfigurasi | zaman | kereta | sah | tes |
|---|---|---|---|---|
| kecil | 13 | 37.99 | 121.39 | 115.91 |
| sedang | 39 | 48.45 | 86.16 | 82.07 |
| besar | 55 | 37.87 | 82.62 | 78.29 |
Untuk mereproduksi angka -angka ini dengan model LSTM (sebenarnya angka yang lebih baik karena inisialisasi Xavier), jalankan (menyesuaikan jalur ke data ke pengaturan Anda):
python train_basic_rnn_models.py --save_dir=small_lstm --model=lstm --train_file=path/to/data/train.txt --test_file=path/to/data/test.txtPanggilan ini akan melatih model LSTM pada data PTB menggunakan konfigurasi yang sama persis yang digunakan dalam resep TensorFlow. Jika Anda ingin menjalankan model dengan konfigurasi medium, Anda hanya perlu mengatur parameter ke nilainya yang ditentukan dalam konfigurasi medium:
python train_basic_rnn_models.py --init_scale=0.05 --seq_length=35 --embed_size=650 --hidden_size=650 --max_epoch=6 --num_epochs=39 --decay_rate=0.8 --batch_size=20 --input_keep_prob=0.5 --output_keep_prob=0.5 --model=lstm --save_dir=medium_lstm --train_file=path/to/data/train.txt --test_file=path/to/data/test.txtGagasan yang sama berlaku untuk model yang lebih maju, kecuali bahwa Anda perlu memanggil skrip pelatihan yang sesuai dan bahwa Anda mungkin perlu sedikit menyesuaikan parameter. Coba misalnya:
python train_srnn.py --model=wi-srnn --input_keep_prob=0.6 --save_dir=wisrnn_small_5gram --train_file=path/to/data/train.txt --test_file=path/to/data/test.txt Untuk melatih model WISRNN dengan konfigurasi default kecuali untuk dropout embedding kata, yang diatur ke 0,4 (1-0,6). Ini harus mengarah pada kinerja ~ 109,5 pada contoh dataset dari atas.
Demikian pula, model LSRC dilatih menggunakan skrip yang sesuai:
python train_lsrc.py --save_dir=lsrc_small --train_file=path/to/data/train.txt --test_file=path/to/data/test.txt Script juga memungkinkan memodifikasi pelatihan dengan mengatur parameter yang sesuai. Gunakan --help untuk mendapatkan informasi lebih lanjut tentang mereka.
Script uji sama untuk semua model. Anda hanya perlu menentukan jalur ke model yang ingin Anda evaluasi dan jalur ke file uji Anda. Untuk mengevaluasi model LSTM kecil yang kami latih di atas, kami hanya perlu menjalankan perintah berikut:
python test.py --model_file=small_lstm/model.ckpt --test_file=path/to/data/test.txt Skrip ini juga menawarkan beberapa parameter lain untuk mengontrol kecepatan jika Anda menguji pada korpus yang sangat besar.
Toolkit ini awalnya dikembangkan oleh Youssef OUALIL, selama waktunya di LSV, Saarland University. Saat ini diatur di kelompok LSV oleh Michael A. Hedderich dengan kontribusi oleh Adam Kusmirek. Pekerjaan ini didanai sebagian oleh SFB 1102.
Kode ini dilisensikan di bawah Apache 2.0. Bagian dari kode ini didasarkan pada resep TensorFlow PTB-LM yang dilisensikan di bawah lisensi Apache, versi 2.0 oleh penulis TensorFlow. Silakan lihat file lisensi untuk detailnya.
Jika Anda menggunakan toolkit ini sebagai bagian dari publikasi, silakan pertimbangkan mengutip kami:
@inproceedings{oualil-singh-greenberg-klakow:EMNLP2016,
author = {Oualil, Youssef and Singh, Mittul and Greenberg, Clayton and Klakow, Dietrich},
title = {Long-Short Range Context Neural Networks for Language Modeling},
booktitle = {{EMNLP} 2016, Proceedings of the 2016 Conference on Empirical Methods in Natural Language Processing},
day = {3},
month = {November},
year = {2016},
address = {Austin, Texas},
publisher = {Association for Computational Linguistics},
pages = {1473--1481},
url = {http://aclweb.org/anthology/D16-1154.pdf},
poster = {http://coli.uni-saarland.de/~claytong/posters/EMNLP16_Poster.pdf}
}
atau
@inproceedings{oualil-greenberg-singh-klakow:2016:IS,
author = {Youssef Oualil and Clayton Greenberg and Mittul Singh and Dietrich Klakow},
title = {Sequential Recurrent Neural Networks for Language Modeling},
day = {12},
month = {September},
year = 2016,
address = {San Francisco, California, USA},
booktitle = {{INTERSPEECH} 2016, Proceedings of the 17th Annual Conference of the International Speech Communication Association},
doi = {10.21437/Interspeech.2016-422},
url = {http://www.isca-speech.org/archive/Interspeech_2016/pdfs/0422.PDF},
pages = {3509--3513},
publisher = {{ISCA}}
}