이 repo는 언어 모델링 작업을위한 세심한 RNN 모델을 구현 한 것입니다.
언어 모델링은 Penntreebank 및 Wikitext-02 데이터 세트 모두에서 수행됩니다. 파일은 각 훈련 예제가 코퍼스에서 하나의 문장으로 구성되도록 구문 분석되며 최대 배치 길이 35로 패딩됩니다. 더 긴 문장이 잘립니다. 이것은주의를 관리하고 문장의 단어에만 참석하기 위해 수행됩니다 (타임 스텝 t에서 t 전).
A-RNN-LM (언어 모델링을위한주의 기반 재발 신경 네트워크)은 원래주의 기반 언어 모델 (Hongyuan Mei et al. 2016, Link)과 세심한 언어 모델과의 일관된 대화에서 제안되었습니다 (Salton et al. 2017, Link).
이 모델은 인코더 RNN 층의 이전 숨겨진 상태에서 전통적인주의 메커니즘을 실행하여 컨텍스트 벡터를 인코딩하여 서열에서 다음 단어를 예측하기 위해 마지막 인코딩 된 숨겨진 상태와 결합됩니다.
종속성 :
python=3.7torch>=1.0.0nltkmatplotlibtensorboardX 모든 피의를 설치하고 python main.py 실행하십시오.
데이터 세트는 자동으로 다운로드 및 사전 처리됩니다.
실행을위한 여러 옵션은 실행 가능 python main.py --help 전체 목록을 위해 가능합니다.
usage: main.py [-h] [--batch-size N] [--epochs N] [--lr LR] [--patience P]
[--seed S] [--log-interval N] [--dataset [{wiki-02,ptb}]]
[--embedding-size N] [--n-layers N] [--hidden-size N]
[--positioning-embedding N] [--input-dropout D]
[--rnn-dropout D] [--decoder-dropout D] [--clip N]
[--optim [{sgd,adam,asgd}]] [--salton-lr-schedule]
[--early-stopping-patience P] [--attention]
[--no-positional-attention] [--tie-weights]
[--file-name FILE_NAME] [--parallel]
PyTorch Attentive RNN Language Modeling
optional arguments:
-h, --help show this help message and exit
--batch-size N input batch size for training (default: 64)
--epochs N number of epochs to train (default: 40)
--lr LR learning rate (default: 30.0)
--patience P patience for lr decrease (default: 5)
--seed S random seed (default: 123)
--log-interval N how many batches to wait before logging training
status (default 10)
--dataset [{wiki-02,ptb}]
Select which dataset (default: ptb)
--embedding-size N embedding size for embedding layer (default: 20)
--n-layers N layer size for RNN encoder (default: 1)
--hidden-size N hidden size for RNN encoder (default: 20)
--positioning-embedding N
hidden size for positioning generator (default: 20)
--input-dropout D input dropout (default: 0.5)
--rnn-dropout D rnn dropout (default: 0.0)
--decoder-dropout D decoder dropout (default: 0.5)
--clip N value at which to clip the norm of gradients (default:
0.25)
--optim [{sgd,adam,asgd}]
Select which optimizer (default: sgd)
--salton-lr-schedule Enables same training schedule as Salton et al. 2017
(default: False)
--early-stopping-patience P
early stopping patience (default: 25)
--attention Enable standard attention (default: False)
--no-positional-attention
Disable positional attention (default: False)
--tie-weights Tie embedding and decoder weights (default: False)
--file-name FILE_NAME
Specific filename to save under (default: uses params
to generate)
--parallel Enable using GPUs in parallel (default: False)
| 모델 | 매개 변수 수 | 검증 당함 | 당혹감을 테스트하십시오 |
|---|---|---|---|
| LSTM 기준선 (Merity et al., 2017) | 7.86m | 66.77 | 64.96 |
| 세심한 LM (Salton et al. 2017) | 7.06m | 79.09 | 76.56 |
| 위치주의 LM | 6.9m | 72.69 | 70.92 |
| 모델 | 매개 변수 수 | 검증 당함 | 당혹감을 테스트하십시오 |
|---|---|---|---|
| LSTM 기준선 (Merity et al., 2017) | 7.86m | 72.43 | 68.50 |
| 세심한 LM (Salton et al. 2017) | 7.06m | 78.43 | 74.37 |
| 위치주의 LM | 6.9m | 74.39 | 70.73 |
단순히 실행하여 위의 테이블을 생성 한 모든 모델을 다시 실행할 수 있습니다.
python test.py
그러나 이러한 모델 중 일부는 단일 1080 GPU로 수렴하는 데 8 시간 이상이 걸리므로 실험의 총 런타임은 약 2 일이 될 수 있습니다.
결과에 부정적인 영향을 미치는 것으로 나타 났기 때문에 멀티 GPU 지원은 기본적으로 비활성화됩니다. 또한 배치는 실제로 작기 때문에 많은 시간이 각 GPU로 텐서를 보내는 데 소비되기 때문에 실제로 훨씬 빠르지는 않습니다.
다음은 예에서 두주의 분포의 나란히 비교됩니다.
x 축의 단어는 각 시간 단계의 입력이고 y 축의 단어는 대상입니다. 두 모델 모두 수렴 될 때까지 Wikitext-02 데이터 세트에서 교육을 받았습니다.