TF-NNLM-TK ist ein Toolkit, das in Python3 für die Modellierung neuronaler Netzwerksprachen unter Verwendung von TensorFlow geschrieben wurde. Es enthält Basismodelle wie RNNs und LSTMS sowie fortschrittlichere Modelle. Es bietet Funktionen, um die Daten vorzubereiten, die Modelle auszubilden und zu bewerten. Das Toolkit ist Open-Source unter der Apache 2-Lizenz.
Derzeit werden die folgenden Modelle unterstützt:
Installieren Sie zuerst Python und Tensorflow. Der Code wird mit Python 3 und TensorFlow 1.8 getestet.
Für dieses erste Beispiel müssen wir das Toolkit und einige Trainingsdaten herunterladen. Wir werden den PTB -Datensatz verwenden, der in Tomas Mikolovs Tutorial bereitgestellt wird. Dafür können Sie den folgenden Code in Ihrer Befehlszeile ausführen:
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.tgzDann führen Sie einfach den folgenden Code aus, um ein erstes, einfaches, einfaches Modell mit neuronaler Sprache zu trainieren und zu bewerten
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.txtDas Training dauert ungefähr 20 Minuten bei einer GTX 1050TI -GPU.
Die Trainingsskripte rufen den Datenverarbeitungscode bereits auf. Wenn Sie die Standarddaten verwenden, können Sie diesen Abschnitt wahrscheinlich überspringen.
Das Toolkit enthält einen Datenprozessor, der eine Textdatei liest und zwei (Numpy-) Arrays erstellt, die die Stapel von Eingabedwörtern (Verlauf) und Zielwörtern (Vorhersage) speichern. Der Code bietet auch einige hilfreiche Tools wie Funktionen zum Erstellen und Speichern des Wortschatzes, zum Erstellen von Zählungen oder zum Zuordnen von OOV -Wörtern in Testdateien in ein bestimmtes unbekanntes Token.
Dieser Teil des Codes hat keine Hauptfunktion. Stattdessen wird es direkt im Python -Code der Trainingsskripte aufgerufen. Zum Beispiel können Sie Python anrufen
DataProcessor ( train_file , batch_size , seq_length , True , '<unk>' , history_size = history_size )Dieser Code -Snippet nimmt das Train_file, führt die oben beschriebenen Transformationen durch und erstellt mit den angegebenen Parametern Stapel daraus.
Der TF-NNLM-TK bietet den Trainingscode für die folgenden Modelle der neuronalen Sprache:
Diese sind allgemein bekannt und verwendet. Insbesondere dieses Toolkit implementiert Vanilla-RNN, LSTM, LSTM mit Projektion und Gru. Diese Modelle können mit dem Skript -Train_Basic_Rnn_Models.py trainiert werden (siehe Beispiel unten).
Diese Modelle verwenden mehr als N -Wörter aus der Geschichte anstelle der letzten. Die Implementierung enthält drei Modelle: wortabhängige SRNN (WD-SRNN), wortunabhängiges SRNN (WI-SRNN) und Vergessen-Faktor SRNN (FF-SRNN). Weitere Informationen zu diesen Modellen finden Sie hier. Diese Modelle können mit dem Script Train_srnn.py trainiert werden
Diese Modelle verwenden zwei separate lokale und globale Zustände, um kurze und langfristige Abhängigkeiten separat zu lernen. Die segmentale TF-Implementierung der Rückausdauer führt dazu, dass dieses Modell drastisch unter dem verschwindenden Gradienten im örtlichen Zustand leidet, der ein Vanilla-RNN-Modell verwendet, weshalb letzteres (vorübergehend durch eine Gru) ersetzt wird. Weitere Informationen zu diesem Modell finden Sie hier. Dieses Modell kann mit dem script train_lsrc.py trainiert werden
Jedes dieser Trainingsskripte (train_basic_rnn_models.py, train_srnn.py und train_lsrc.py) enthält eine große Anzahl von Parametern. Jedes von ihnen hat eine Beschreibung, die angehängt ist. Um diese Beschreibung zu erhalten, führen Sie beispielsweise in Ihrer Befehlszeile aus:
python train_basic_rnn_models.py --helpDie Standardparameter aller Modelle versuchen, der kleinen Konfiguration übereinstimmen, die im TensorFlow PTB-LM-Rezept angegeben wurde:
| Konfiguration | Epochen | Zug | gültig | prüfen |
|---|---|---|---|---|
| klein | 13 | 37.99 | 121.39 | 115.91 |
| Medium | 39 | 48.45 | 86.16 | 82.07 |
| groß | 55 | 37,87 | 82.62 | 78,29 |
Um diese Zahlen mit dem LSTM -Modell zu reproduzieren (tatsächlich bessere Zahlen aufgrund der Xavier -Initialisierung), laufen Sie aus (Anpassen des Pfades an die Daten an Ihre Einstellung):
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.txtDieser Aufruf trainiert das LSTM -Modell auf den PTB -Daten unter Verwendung der genauen Konfiguration, die im TensorFlow -Rezept verwendet wird. Wenn Sie das Modell mit der mittleren Konfiguration ausführen möchten, müssen Sie lediglich die Parameter auf die in der Medium -Konfiguration angegebenen Werte einstellen:
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.txtDie gleiche Idee gilt für die fortgeschritteneren Modelle, außer dass Sie die entsprechenden Trainingsskripte aufrufen müssen und möglicherweise die Parameter geringfügig einstellen müssen. Versuchen Sie zum Beispiel:
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 Um das WISRNN-Modell mit der Standardkonfiguration mit Ausnahme des Wortbettausfalls zu trainieren, das auf 0,4 (1-0,6) eingestellt ist. Dies sollte zu einer Leistung von ~ 109,5 im Beispiel -Datensatz von oben führen.
In ähnlicher Weise wird das LSRC -Modell mit dem entsprechenden Skript trainiert:
python train_lsrc.py --save_dir=lsrc_small --train_file=path/to/data/train.txt --test_file=path/to/data/test.txt Das Skript ermöglicht auch das Ändern des Trainings, indem die entsprechenden Parameter festgelegt werden. Verwenden Sie -Help, um weitere Informationen dazu zu erhalten.
Das Testskript ist für alle Modelle gleich. Sie müssen nur den Pfad zu dem Modell angeben, den Sie bewerten möchten, und den Pfad zu Ihrer Testdatei. Um das oben geschulte kleine LSTM -Modell zu bewerten, müssen wir nur den folgenden Befehl ausführen:
python test.py --model_file=small_lstm/model.ckpt --test_file=path/to/data/test.txt Das Skript bietet auch einige andere Parameter, um die Geschwindigkeit zu steuern, falls Sie auf einem sehr großen Korpus testen.
Dieses Toolkit wurde ursprünglich von Youssef Oualil während seiner Zeit an der LSV, Saarland University, entwickelt. Es wird derzeit in der LSV -Gruppe von Michael A. Hedderich mit Beiträgen von Adam Kusmirek mantiniert. Diese Arbeit wurde teilweise von SFB 1102 finanziert.
Dieser Code ist unter Apache 2.0 lizenziert. Teile dieses Codes basieren auf dem TensorFlow PTB-LM-Rezept, das unter der APache-Lizenz, Version 2.0, von den TensorFlow-Autoren lizenziert. Weitere Informationen finden Sie in der Lizenzdatei.
Wenn Sie dieses Toolkit im Rahmen einer Veröffentlichung verwenden, sollten Sie uns angeben:
@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}
}
oder
@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}}
}