Этот пример обучает многослойному RNN (Elman, Gru или LSTM) в задаче языкового моделирования. По умолчанию, обучающий скрипт использует предоставленный набор данных PTB. Обученная модель может затем использоваться сценарием Generate для генерации нового текста. Это портирование pytorch/примеров/word_language_model, что делает его использованием на Floydhub.
Сценарий main.py принимает следующие аргументы:
optional arguments:
-h, --help show this help message and exit
--data DATA location of the data corpus
--model MODEL type of recurrent net (RNN_TANH, RNN_RELU, LSTM, GRU)
--emsize EMSIZE size of word embeddings
--nhid NHID number of hidden units per layer
--nlayers NLAYERS number of layers
--lr LR initial learning rate
--clip CLIP gradient clipping
--epochs EPOCHS upper epoch limit
--batch-size N batch size
--bptt BPTT sequence length
--dropout DROPOUT dropout applied to layers (0 = no dropout)
--decay DECAY learning rate decay per epoch
--tied tie the word embedding and softmax weights
--seed SEED random seed
--cuda use CUDA
--log-interval N report interval
--save SAVE path to save the final modelС этими аргументами можно проверить множество моделей. В качестве примера, следующие аргументы производят более медленные, но лучшие модели:
python main.py --cuda --emsize 650 --nhid 650 --dropout 0.5 --epochs 40 # Test perplexity of 80.97
python main.py --cuda --emsize 650 --nhid 650 --dropout 0.5 --epochs 40 --tied # Test perplexity of 75.96
python main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --epochs 40 # Test perplexity of 77.42
python main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --epochs 40 --tied # Test perplexity of 72.30Эти недоумения равны или лучше, чем регулярная регуляризация нейронной сети (Zaremba et al. 2014) и аналогичны использованию выходных данных для улучшения языковых моделей (Press & Wolf 2016 и связывания векторов слов и классификаторов слов: рамки потерь для языкового моделирования (Inan et al. 2016), хотя оба из этих статей имеют улучшенную избыточность с использованием формы для рецидивирования (ва -вареный).
Скоро.
Вот команды обучения, оценки и обслуживания вашей задачи по моделированию языка в Floydhub.
Прежде чем начать, войдите в Floydhub с командой Floyd Login, затем разветвляется и инициируйте проект:
$ git clone https://github.com/floydhub/word-language-model.git
$ cd word-language-model
$ floyd init word-language-modelПеред началом вам необходимо загрузить набор данных Penn Treebank-3 в качестве набора данных Floydhub, следуя этому руководству: Создайте и загрузите набор данных. Тогда вы будете готовы играть с разными языковыми моделями.
# Train a LSTM on PTB with CUDA, reaching perplexity of 114.22
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input " python main.py --cuda --epochs 7 "
# Train a tied LSTM on PTB with CUDA, reaching perplexity of 110.44
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input " python main.py --cuda --epochs 7 --tied "
# Train a tied LSTM on PTB with CUDA for 40 epochs, reaching perplexity of 87.17
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input " python main.py --cuda --tied "Примечание:
--gpu Запустите вашу работу в экземпляре GPU Floydhub.--env pytorch-0.2 готовит среду Pytorch для Python 3.--data <USERNAME>/dataset/<PENN-TB3>/<VERSION>:input набор данных Previus загруженный набор данных Penn Treebank-3 в папке /input в контейнер для нашего задания. Модель использует модуль nn.RNN (и его родственные модули nn.GRU и nn.LSTM ), который автоматически использует бэкэнд Cudnn, если вы работаете на CUDA с установленным CUDNN.
Во время обучения, если получено прерывание клавиатуры (CTRL-C), обучение останавливается, и текущая модель оценивается с набором данных.
Вы можете следить за прогрессом, используя команду журналов. Первые 2 примера обучения должны быть завершены примерно через 5 минут на экземпляре GPU и 40 'на процессоре. Последний пример должен занять около 30 'на экземпляре GPU и более 3 часов на инстанции процессора.
Пришло время оценить нашу модель, генерирующую некоторый текст:
# Generate samples from the trained LSTM model.
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input --data < REPLACE_WITH_JOB_OUTPUT_NAME > :model " python generate.py --cuda "Мы предоставили вам предварительно обученную модель, обученную для 40 эпох, достигнув смущения 87,17:
# Generate samples from the trained LSTM model.
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input --data < REPLACE_WITH_JOB_OUTPUT_NAME > :model " python generate.py --cuda " Floydhub поддерживает режим сериала для демонстрации и целей тестирования. Прежде чем служить вашей модели через API REST, вам необходимо создать floyd_requirements.txt и объявить в ней требование колбы. Если вы запустите задание с флагом --mode serve , Floydhub запустит файл app.py в вашем проекте и прикрепит его к конечной точке динамической службы:
floyd run --gpu --mode serve --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input --data < REPLACE_WITH_JOB_OUTPUT_NAME > :modelПриведенная выше команда распечатает конечную точку службы для этой работы в вашей терминальной консоли.
Конечная точка обслуживания займет пару минут, чтобы стать готовым. Как только он встанет, вы можете взаимодействовать с моделью, отправив запрос POST с количеством слов и температурой, которую модель будет использовать для генерации текста:
# Template
# curl -X POST -o <NAME_&_PATH_DOWNLOADED_GENERATED_TEXT> -F "words=<NUMBER_OF_WORDS_TO_GENERATE>" -F "temperature=<TEMPERATURE>" <SERVICE_ENDPOINT>
curl -X POST -o generated.txt -F " words=100 " -F " temperature=3 " https://www.floydlabs.com/expose/vk47ixT8NeYBTFeMavbWtaЛюбая работа, работающая в режиме обслуживания, будет оставаться до тех пор, пока не достигнет максимального времени выполнения. Так что, как только вы закончите тестирование, не забудьте закрыть работу!
Обратите внимание, что эта функция находится в режиме предварительного просмотра и еще не готова к производству
Некоторые полезные ресурсы на НЛП для задачи глубокого обучения и языкового моделирования:
Для любых вопросов ошибка (даже опечатки) и/или запросы функций, не стесняйтесь обращаться ко мне или открыть проблему!