TF-NNLM-TKは、Tensorflowを使用したニューラルネットワーク言語モデリングのためにPython3で記述されたツールキットです。 RNNSやLSTMSなどの基本モデル、およびより高度なモデルが含まれます。データを前処理し、モデルをトレーニングし、評価する機能を提供します。ツールキットは、Apache 2ライセンスの下でオープンソースです。
現在、次のモデルがサポートされています。
最初にPythonとTensorflowをインストールします。コードは、Python 3とTensorflow 1.8でテストされています。
この最初の例では、ツールキットといくつかのトレーニングデータをダウンロードする必要があります。 Tomas Mikolovのチュートリアルで提供されるPTBデータセットを使用します。このため、コマンドラインで次のコードを実行できます。
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.tgz次に、最初の単純な神経言語モデルをトレーニングして評価するには、次のコードを実行するだけです
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.txtGTX 1050TI GPUでは、トレーニングには約20分かかります。
トレーニングスクリプトはすでにデータ処理コードを呼び出しています。デフォルトのデータを使用する場合は、おそらくこのセクションをスキップできます。
ツールキットには、テキストファイルを読み取り、入力単語のバッチ(履歴)とターゲット単語(予測)のバッチを保存する2つの(numpy)配列を作成するデータプロセッサが含まれています。また、このコードは、語彙を作成および保存したり、カウントを作成したり、テストファイルのOOVワードを特定の不明なトークンにマッピングする機能など、いくつかの役立つツールを提供します。
コードのこの部分には主な機能がありません。代わりに、トレーニングスクリプトのPythonコードで直接呼び出されます。たとえば、Pythonを呼び出すことができます
DataProcessor ( train_file , batch_size , seq_length , True , '<unk>' , history_size = history_size )このコードスニペットは、train_fileを取り、上記の変換を実行し、指定されたパラメーターを使用してそこからバッチを作成します。
TF-NNLM-TKは、次の神経言語モデルのトレーニングコードを提供します。
これらは一般的に既知で使用されています。特に、このツールキットは、ProjectionとGruを使用してVanilla-RNN、LSTM、LSTMを実装しています。これらのモデルは、スクリプトtrain_basic_rnn_models.pyを使用してトレーニングできます(以下の例を参照)。
これらのモデルは、最後のモデルの代わりに歴史の単語よりも多くを使用しています。実装では、単語依存のSRNN(WD-SRNN)、単語に依存しないSRNN(Wi-SRNN)、および忘却ファクターSRNN(FF-SRNN)の3つのモデルが提供されます。これらのモデルの詳細については、こちらをご覧ください。これらのモデルは、スクリプトtrain_srnn.pyを使用してトレーニングできます
これらのモデルは、2つの独立したローカルおよびグローバルな状態を使用して、短距離および長距離の依存関係を個別に学習します。バックプロパゲーションの分節性TF実装により、このモデルは、バニラRNNモデルを使用するローカル状態の消失勾配に劇的に苦しみます。したがって、後者は(一時的にGRUに置き換えられます)。このモデルの詳細については、こちらをご覧ください。このモデルは、スクリプトtrain_lsrc.pyを使用してトレーニングできます
これらの各トレーニングスクリプト(train_basic_rnn_models.py、train_srnn.py、train_lsrc.py)には多数のパラメーターが含まれており、それぞれに説明が付いています。この説明を取得するには、たとえばコマンドラインで実行されます。
python train_basic_rnn_models.py --helpすべてのモデルのデフォルトパラメーターは、TensorFlow PTB-LMレシピで報告されている小さな構成と一致させようとします。
| config | エポック | 電車 | 有効 | テスト |
|---|---|---|---|---|
| 小さい | 13 | 37.99 | 121.39 | 115.91 |
| 中くらい | 39 | 48.45 | 86.16 | 82.07 |
| 大きい | 55 | 37.87 | 82.62 | 78.29 |
これらの数値をLSTMモデル(Xavier初期化により実際にはより良い数字)で再現するには、実行(設定へのデータへのパスを調整):
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.txtこの呼び出しは、Tensorflowレシピで使用されているまったく同じ構成を使用して、PTBデータのLSTMモデルをトレーニングします。ミディアム構成でモデルを実行する場合は、パラメーターを中程度の構成で指定された値に設定する必要があります。
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.txt同じアイデアは、対応するトレーニングスクリプトを呼び出す必要があり、パラメーターをわずかに調整する必要がある場合を除き、より高度なモデルにも当てはまります。例:
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 0.4(1-0.6)に設定されているドロップアウトという単語を除き、デフォルトの構成でWISRNNモデルをトレーニングするため。これにより、上からのデータセットの例で〜109.5のパフォーマンスが発生するはずです。
同様に、LSRCモデルは、対応するスクリプトを使用してトレーニングされます。
python train_lsrc.py --save_dir=lsrc_small --train_file=path/to/data/train.txt --test_file=path/to/data/test.txt このスクリプトは、対応するパラメーターを設定することにより、トレーニングを変更することもできます。 -HELPを使用して、それらに関する詳細情報を取得します。
テストスクリプトは、すべてのモデルで同じです。評価するモデルへのパスと、テストファイルへのパスを指定する必要があります。上記でトレーニングした小さなLSTMモデルを評価するには、次のコマンドを実行する必要があります。
python test.py --model_file=small_lstm/model.ckpt --test_file=path/to/data/test.txt このスクリプトは、非常に大きなコーパスでテストしている場合に備えて、速度を制御するための他のいくつかのパラメーターも提供します。
このツールキットは、Saarland UniversityのLSVに在籍中にYoussef Oualilによって開発されました。現在、Michael A. HedderichがAdam Kusmirekの貢献をしてLSVグループでマントされています。この作業は、一部がSFB 1102によって資金提供されました。
このコードは、Apache 2.0でライセンスされています。このコードの一部は、Tensorflowの著者によってApacheライセンス、バージョン2.0に基づいてライセンスされているTensorflow PTB-LMレシピに基づいています。詳細については、ライセンスファイルをご覧ください。
このツールキットを出版物の一部として使用する場合は、私たちを引用することを検討してください。
@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}
}
または
@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}}
}