このレポは、言語モデリングのタスクに注意深いRNNモデルの実装です。
言語モデリングは、PenntreebankとWikitext-02データセットの両方で行われます。ファイルは、各トレーニングの例がコーパスからの1つの文で構成され、最大バッチ長35にパッドで構成されているように解析されます。長い文が切り取られます。これは、注意を管理し、文の単語のみに注意を払うために行われます(Timestep tの場合はTimestep tの前)。
A-RNN-LM(言語モデリング用の注意ベースの再発性ニューラルネットワーク)は、当初、注意ベースの言語モデル(Hongyuan Mei etal。2016、Link)との一貫した対話で提案されていました。
このモデルは、エンコーダRNNレイヤーの前の非表示状態で従来の注意メカニズムを実行して、コンテキストベクトルをエンコードすることで構成されており、その後、シーケンスの次の単語を予測するために、最後のエンコードされた非表示状態と組み合わされます。
依存関係:
python=3.7torch>=1.0.0nltkmatplotlibtensorboardXすべてのdepedenciesをインストールし、 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 etal。2017) | 7.06m | 79.09 | 76.56 |
| 位置注意lm | 69m | 72.69 | 70.92 |
| モデル | パラメーターの数 | 検証困惑 | 困惑をテストします |
|---|---|---|---|
| LSTMベースライン(Merity et al。、2017) | 7.86m | 72.43 | 68.50 |
| 丁寧なLM(Salton etal。2017) | 7.06m | 78.43 | 74.37 |
| 位置注意lm | 69m | 74.39 | 70.73 |
単に実行するだけで、上記のテーブルを生成したすべてのモデルを再実行できます。
python test.py
ただし、これらのモデルの一部は、単一の1080 GPUに収束するために8時間以上かかるため、実験の合計実行時間は約2日間になる可能性があります。
マルチGPUサポートは、結果にマイナスの影響を与えることが示されたため、デフォルトでは無効になります。それに加えて、実際にはバッチが小さいため、それぞれのGPUにテンソルを送信するのに多くの時間が費やされるため、実際にはそれほど高速ではありません。
例には、2つの注意分布の並んで比較されています。
X軸の単語は、各タイムステップの入力であり、y軸の単語はターゲットです。両方のモデルは、収束までwikitext-02データセットでトレーニングされました。