TF-NNLM-TK-это инструментарий, написанный в Python3 для моделирования языка нейронной сети с использованием TensorFlow. Он включает в себя основные модели, такие как RNNS и LSTMS, а также более продвинутые модели. Он обеспечивает функциональность для предварительной обработки данных, обучения моделей и их оценки. Toolkit находится с открытым исходным кодом по лицензии Apache 2.
В настоящее время поддерживаются следующие модели:
Сначала установите Python и Tensorflow. Код тестируется с помощью Python 3 и Tensorflow 1.8.
Для этого первого примера нам нужно загрузить инструментарий и некоторые учебные данные. Мы будем использовать набор данных 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Обучение занимает около 20 минут на графическом процессоре GTX 1050TI.
Обучающие сценарии уже вызывают код обработки данных. Если вы используете данные по умолчанию, вы, вероятно, можете пропустить этот раздел.
Toolkit включает в себя процессор данных, который считывает текстовый файл и создает из него два (Numpy) массивы, в которых хранятся партии входных слов (история) и целевые слова (прогноз). Код также предоставляет несколько полезных инструментов, таких как функциональность для создания и сохранения словарного запаса, для создания количества или картирования слов OOV в тестовых файлах в заданный неизвестный токен.
Эта часть кода не имеет основной функции. Вместо этого он напрямую называется в коде Python обучающих сценариев. Например, вы можете позвонить в Python
DataProcessor ( train_file , batch_size , seq_length , True , '<unk>' , history_size = history_size )Этот фрагмент кода будет принимать Train_file, выполнять преобразования, описанные выше, и создаст из него партии, используя заданные параметры.
TF-NNLM-TK предоставляет учебный код для следующих моделей нейронного языка:
Они обычно известны и используются. В частности, этот инструментарий реализует Vanilla-RNN, LSTM, LSTM с проекцией и GRU. Эти модели могут быть обучены с помощью Script Train_basic_rnn_models.py (см. Пример ниже).
Эти модели используют больше N слов из истории вместо последнего. Реализация предоставляет три модели: Word-зависимый SRNN (WD-SRNN), независимый от слов SRNN (WI-SRNN) и Fearting-Factor SRNN (FF-SRNN). Более подробную информацию об этих моделях можно найти здесь. Эти модели могут быть обучены с помощью Script Train_srnn.py
Эти модели используют два отдельных местных и глобальных состояния для изучения коротких и дальних зависимостей отдельно. Сегментарная реализация TF обратного распространения заставляет эту модель резко страдать от градиента исчезновения в местном состоянии, в котором используется модель ванили-RNN, поэтому последний заменяется (временно GRU). Более подробную информацию об этой модели можно найти здесь. Эта модель может быть обучена с помощью Script Train_lsrc.py
Каждый из этих тренировочных сценариев (Train_basic_rnn_models.py, train_srnn.py и train_lsrc.py) включает в себя большое количество параметров, каждый из них имеет описание, прикрепленное к нему. Чтобы получить это описание, например, в вашей командной строке:
python train_basic_rnn_models.py --helpПараметры по умолчанию всех моделей пытаются сопоставить небольшую конфигурацию, представленную в рецепте Tensorflow PTB-LM:
| конфигурация | эпохи | тренироваться | действительный | тест |
|---|---|---|---|---|
| маленький | 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Этот вызов будет обучать модель LSTM на данных PTB, используя ту же конфигурацию, используемую в рецепте TensorFlow. Если вы хотите запустить модель с конфигурацией 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.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 Сценарий также предлагает несколько других параметров для управления скоростью, если вы тестируете на очень большом корпусе.
Этот инструментарий был первоначально разработан Юссефом Уалилом во время его пребывания в LSV, Университет Саарланд. В настоящее время он расположен в группе LSV Майклом А. Хеддерихом с вкладом Адама Кусмирека. Эта работа была частично профинансирована SFB 1102.
Этот код лицензирован в Apache 2.0. Части этого кода основаны на рецепте Tensorflow PTB-LM, лицензированном по лицензии Apache, версии 2.0 авторами TensorFlow. Пожалуйста, смотрите файл лицензии для получения подробной информации.
Если вы используете этот инструментарий как часть публикации, пожалуйста, рассмотрите возможность ссылаться на нас:
@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}}
}