TF-NNLM-TK是用Python3編寫的工具包,用於使用TensorFlow進行神經網絡語言建模。它包括RNN和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.txt在GTX 1050TI GPU上,訓練大約需要20分鐘。
培訓腳本已經調用數據處理代碼。如果使用默認數據,則可以跳過本節。
該工具包包括一個數據處理器,該數據處理器讀取文本文件並從中創建兩個(numpy)數組,該數組存儲了輸入單詞(歷史記錄)和目標詞(預測)的批處理。該代碼還提供了一些有用的工具,例如功能,以創建和保存詞彙,創建計數或將測試文件中的OOV單詞映射到給定的未知令牌中。
代碼的這一部分沒有主要功能。相反,它是在訓練腳本的Python代碼中直接調用的。例如,您可以打電話給Python
DataProcessor ( train_file , batch_size , seq_length , True , '<unk>' , history_size = history_size )此代碼段將採用Train_file,進行上述轉換,並使用給定參數從中創建批處理。
TF-NNLM-TK為以下神經語言模型提供了培訓代碼:
這些是常見和使用的。特別是,該工具包通過投影和GRU實現Vanilla-RNN,LSTM,LSTM。可以使用腳本train_basic_rnn_models.py訓練這些模型(請參見下面的示例)。
這些模型的使用不僅僅是歷史中的n個單詞,而不是最後一個單詞。該實現提供了三個模型:依賴單詞的SRNN(WD-SRNN),獨立的SRNN(WI-SRNN)和忘記因子SRNN(FF-SRNN)。有關這些模型的更多信息,請參見此處。這些模型可以使用腳本train_srnn.py培訓
這些模型使用兩個獨立的本地和全球狀態分別學習短期和長期依賴性。反向傳播的分段TF實施使該模型在使用香草-RNN模型的局部狀態下急劇遭受了消失的梯度的影響,因此後者被替換(暫時由GRU)。有關此模型的更多信息,請參見此處。可以使用腳本train_lsrc.py訓練此模型
這些訓練腳本中的每一個(train_basic_rnn_models.py,train_srnn.py and 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 用默認配置訓練WISRNN模型,除了單詞嵌入掉落,該單詞設置為0.4(1-0.6)。這應該導致示例數據集的性能約為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 該腳本還允許通過設置相應的參數來修改訓練。使用 - 支持以獲取有關它們的更多信息。
所有模型的測試腳本都是相同的。您只需要指定要評估的模型的路徑以及測試文件的路徑。為了評估我們上面訓練的小型LSTM模型,我們只需要運行以下命令:
python test.py --model_file=small_lstm/model.ckpt --test_file=path/to/data/test.txt 該腳本還提供了其他一些參數,以控制您在非常大的語料庫上測試的速度。
該工具包最初是由Youssef Oualil在Saarland University的LSV期間開發的。目前,邁克爾·A·赫德里奇(Michael A.這項工作由SFB 1102部分資助。
此代碼在Apache 2.0下許可。該代碼的一部分基於tensorflow PTB-LM食譜,該配方是Apache許可證的許可,由Tensorflow作者版本2.0版。請參閱許可證文件以獲取詳細信息。
如果您將此工具包作為出版物的一部分,請考慮引用我們:
@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}}
}