pytorch attentive lm
1.0.0
此存儲庫是針對語言建模任務的細心RNN模型的實現。
語言建模均在Penntreebank和Wikitext-02數據集上完成。解析文件,以使每個培訓示例由一個句子組成,從語料庫中,最大批次長度為35。剪輯更長的句子。這樣做是為了管理注意力並僅在句子中註意單詞(如果在時間段t之前timestep t之前)。
A-RNN-LM(基於注意力的語言建模神經網絡)最初是在與基於注意力的語言模型(Hongyuan Mei等人,2016年,Link)和細心語言模型(Salton et al.2017,Link)中進行連貫的對話。
該模型包括在編碼器RNN層的先前隱藏狀態上運行傳統的注意機制,以編碼上下文向量,然後將其與最後一個編碼的隱藏狀態結合使用,以預測序列中的下一個單詞。
依賴性:
python=3.7torch>=1.0.0nltkmatplotlibtensorboardX安裝所有depepecties並運行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等,2017) | 786萬 | 66.77 | 64.96 |
| 細心的LM(Salton等,2017) | 7.06m | 79.09 | 76.56 |
| 位置專心LM | 6.9m | 72.69 | 70.92 |
| 模型 | 參數數 | 驗證困惑 | 測試困惑 |
|---|---|---|---|
| LSTM基線(Merity等,2017) | 786萬 | 72.43 | 68.50 |
| 細心的LM(Salton等,2017) | 7.06m | 78.43 | 74.37 |
| 位置專心LM | 6.9m | 74.39 | 70.73 |
您可以通過簡單地運行來重新運行所有生成上表的模型:
python test.py
但是,請注意,其中一些型號需要超過8小時的時間來收斂於單個1080 GPU,因此實驗的總運行時間可能約為2天。
默認情況下,多GPU支持將被禁用,因為它被證明對結果產生負面影響。最重要的是,由於批次在實踐中很小,因此實際上並不多,因為花了很多時間將張量發送到各自的GPU。
此處顯示了兩個注意分佈的並排比較:
x軸中的單詞是每個時間步驟的輸入,y軸中的單詞是目標。兩種模型均在Wikitext-02數據集上進行訓練,直到收斂為止。