이 예제는 언어 모델링 작업에 대해 다층 RNN (Elman, Gru 또는 LSTM)을 훈련시킵니다. 기본적으로 교육 스크립트는 제공된 PTB 데이터 세트를 사용합니다. 그런 다음 숙련 된 모델을 생성 스크립트에서 새 텍스트를 생성하기 위해 사용할 수 있습니다. 이것은 pytorch/examples/word_language_model의 포팅으로 Floydhub에서 usables를 만듭니다.
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) (Zaremba et al. 2014), 출력 임베딩을 사용하여 언어 모델을 개선하고 단어 분류기를 묶는 것과 유사합니다. 단어 분류기 : 언어 모델링을위한 손실 프레임 워크 (inan et al. 2016)는 두 가지 중심의 추방을 통해 개선되었습니다.
곧.
다음은 Floydhub에서 언어 모델링 작업 교육, 평가 및 서비스에 대한 명령입니다.
시작하기 전에 Floyd 로그인 명령으로 Floydhub에 로그인 한 다음 Fork 및 Project를 시작하십시오.
$ 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 Floydhub GPU 인스턴스에서 작업을 실행하십시오.--env pytorch-0.2 Python 3을위한 Pytorch 환경을 준비합니다.--data <USERNAME>/dataset/<PENN-TB3>/<VERSION>:input 마운트 작업을 위해 컨테이너 내부의 /input 폴더에 Previus를 업로드 한 Penn TreeBank-3 데이터 세트. 이 모델은 nn.RNN 모듈 (및 자매 모듈 nn.GRU 및 nn.LSTM )을 사용하여 CUDNN이 설치된 CUDA에서 실행되면 CUDNN 백엔드를 자동으로 사용합니다.
훈련 중에 키보드 인터럽트 (CTRL-C)가 수신되면 훈련이 중지되고 현재 모델은 테스트 데이터 세트에 대해 평가됩니다.
로그 명령을 사용하여 진행 상황을 따라갈 수 있습니다. 교육의 첫 2 가지 예는 GPU 인스턴스에서 약 5 분 안에, CPU 1에서 40 '을 완료해야합니다. 마지막 예제는 GPU 인스턴스에서 약 30 '를, CPU 인스테이스에서 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 "우리는 당신에게 87.17의 당황에 도달하는 40 개의 에포크를 위해 훈련 된 미리 훈련 된 모델을 제공했습니다.
# 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는 데모 및 테스트 목적으로 Seving 모드를 지원합니다. REST API를 통해 모델을 제공하기 전에 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위의 명령은 터미널 콘솔 에서이 작업에 대한 서비스 엔드 포인트를 인쇄합니다.
서비스 엔드 포인트는 준비되는 데 몇 분이 걸립니다. 일단 올라 오면, 텍스트를 생성하는 데 사용될 단어 수와 온도를 wih로 보내는 게시물 요청을 보내서 모델과 상호 작용할 수 있습니다.
# 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서빙 모드에서 실행되는 작업은 최대 런타임에 도달 할 때까지 계속 유지됩니다. 테스트를 마치면 작업을 종료해야합니다!
이 기능은 미리보기 모드에 있으며 아직 생산 준비가되어 있지 않습니다.
딥 러닝 및 언어 모델링 작업을위한 NLP의 유용한 리소스 :
질문이 있으시면 버그 (오타) 및/또는 기능 요청은 저에게 연락하거나 문제를 열는 것을 망설이지 않습니다!