# Word-level Language Modeling using RNN and Transformer
使用 RNN 和 Transformer 的词级语言建模
This example trains a multi-layer RNN (Elman, GRU, or LSTM) or Transformer on a language modeling task. By default, the training script uses the Wikitext-2 dataset, provided.
The trained model can then be used by the generate script to generate new text.
此示例在语言建模任务上训练多层 RNN(Elman、GRU 或 LSTM)或 Transformer。默认情况下,训练脚本使用提供的 Wikitext-2 数据集。
然后,生成脚本可以使用经过训练的模型来生成新文本。
```bash
# 使用 CUDA 在 Wikitext-2 上训练 LSTM。
python main.py --cuda --epochs 6 # Train a LSTM on Wikitext-2 with CUDA.
# 使用 CUDA 在 Wikitext-2 上训练一个绑定的 LSTM。
python main.py --cuda --epochs 6 --tied # Train a tied LSTM on Wikitext-2 with CUDA.
#在 Wikitext-2 上使用 CUDA 训练一个绑定的 LSTM 40 个 epoch。
python main.py --cuda --tied # Train a tied LSTM on Wikitext-2 with CUDA for 40 epochs.
#使用 CUDA 在 Wikitext-2 上训练一个 Transformer 模型。
python main.py --cuda --epochs 6 --model Transformer --lr 5
# Train a Transformer model on Wikitext-2 with CUDA.
#从训练好的 LSTM 模型中生成样本。
python generate.py # Generate samples from the trained LSTM model.
#从训练好的 Transformer 模型中生成样本。
python generate.py --cuda --model Transformer
# Generate samples from the trained Transformer model.
```
The model uses the `nn.RNN` module (and its sister modules `nn.GRU` and `nn.LSTM`) or Transformer module (`nn.TransformerEncoder` and `nn.TransformerEncoderLayer`) which will automatically use the cuDNN backend if run on CUDA with cuDNN installed.
#该模型使用nn.RNN模块(及其姊妹模块nn.GRUand nn.LSTM)或 Transformer 模块(nn.TransformerEncoderand nn.TransformerEncoderLayer),如果在安装了 cuDNN 的 CUDA 上运行,它将自动使用 cuDNN 后端。
During training, if a keyboard interrupt (Ctrl-C) is received, training is stopped and the current model is evaluated against the test dataset.
#在训练期间,如果收到键盘中断 (Ctrl-C),则停止训练并根据测试数据集评估当前模型。
The `main.py` script accepts the following arguments:
```bash
optional arguments:
-h, --help show this help message and exit
--data DATA location of the data corpus
--model MODEL type of network (RNN_TANH, RNN_RELU, LSTM, GRU, Transformer)
--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)
--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
--onnx-export ONNX_EXPORT
path to export the final model in onnx format
--nhead NHEAD the number of heads in the encoder/decoder of the transformer model
--dry-run verify the code and the model
```
With these arguments, a variety of models can be tested.
As an example, the following arguments produce slower but better models:
#有了这些论据,就可以测试各种模型。例如,以下参数会产生更慢但更好的模型:
```bash
python main.py --cuda --emsize 650 --nhid 650 --dropout 0.5 --epochs 40
python main.py --cuda --emsize 650 --nhid 650 --dropout 0.5 --epochs 40 --tied
python main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --epochs 40
python main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --epochs 40 --tied
```