TF-NNLM-TK는 Tensorflow를 사용한 신경망 언어 모델링을 위해 Python3로 작성된 툴킷입니다. RNN 및 LSTM과 같은 기본 모델과 더 고급 모델이 포함됩니다. 데이터를 전처리하고 모델을 교육하고 평가하는 기능을 제공합니다. 툴킷은 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 단어를 주어진 미지의 토큰으로 매핑하는 것입니다.
코드 의이 부분에는 주요 기능이 없습니다. 대신 교육 스크립트의 파이썬 코드에서 직접 호출됩니다. 예를 들어, 파이썬으로 호출 할 수 있습니다
DataProcessor ( train_file , batch_size , seq_length , True , '<unk>' , history_size = history_size )이 코드 스 니펫은 Train_File을 사용하고 위에서 설명한 변환을 수행하며 주어진 매개 변수를 사용하여 배치를 생성합니다.
TF-NNLM-TK는 다음 신경 언어 모델에 대한 교육 코드를 제공합니다.
이들은 일반적으로 알려지고 사용됩니다. 특히,이 툴킷은 바닐라 -RNN, LSTM, LSTM을 투사 및 GRU로 구현합니다. 이 모델은 스크립트 TRAIN_BASIC_RNN_MODELS.PY 를 사용하여 교육을받을 수 있습니다 (아래 예제 참조).
이 모델은 마지막 모델 대신 역사에서 N 단어 이상을 사용합니다. 이 구현은 단어 의존적 SRNN (WD-SRNN), Word-MeNcENDENTENT SRNN (WI-SRNN) 및 잊어 버린 Factor SRNN (FF-SRNN)의 세 가지 모델을 제공합니다. 이 모델에 대한 자세한 내용은 여기를 참조하십시오. 이 모델은 스크립트 TRAIN_SRNN.PY를 사용하여 교육을받을 수 있습니다
이 모델은 두 개의 별도의 로컬 및 글로벌 상태를 사용하여 단기 및 장거리 종속성을 별도로 학습합니다. 역전화의 세그먼트 TF 구현은이 모델이 바닐라 -RNN 모델을 사용하는 로컬 상태의 사라지는 구배로 크게 어려움을 겪게하므로 후자는 (일시적으로 GRU로) 교체됩니다. 이 모델에 대한 자세한 내용은 여기를 참조하십시오. 이 모델은 스크립트 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이 호출은 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 이 스크립트는 또한 매우 큰 코퍼스에서 테스트하는 경우 속도를 제어하기위한 몇 가지 다른 매개 변수를 제공합니다.
이 툴킷은 원래 Saarland University의 LSV에서 Youssef Oualil에 의해 개발되었습니다. 현재 Michael A. Hedderich의 LSV Group에서 Adam Kusmirek의 공헌으로 가득 차 있습니다. 이 작업은 부분적으로 SFB 1102에 의해 자금을 지원 받았다.
이 코드는 Apache 2.0에 따라 라이센스가 부여됩니다. 이 코드의 일부는 Apache 라이센스에 따라 라이센스가 부여 된 Tensorflow PTB-LM 레시피, 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}}
}