NJUNMT-pytorch是一个开源的神经机器翻译工具包。这个工具包主要是为了方便机器翻译的研究,其中包括了如下一些基线系统:
-
DL4MT-tutorial: 一个被广泛用作基于RNN的神经机器翻译模型的基线系统实现。据我们所指,这是目前唯一的和广为使用的的DL4MT系统相一致的pytorch实现。
-
Attention is all you need: 谷歌提出的一个强大的神经机器翻译模型。这个模型完全依赖于注意力机制构建。
- python 3.5+
- pytorch 0.4.0+
- tqdm
- tensorboardX
- sacrebleu
我们提供了一键在NIST中英数据集上训练和解码transformer模型的脚本(只在南京大学自然语言处理组的服务器上可用)。只需要在项目的根目录下执行
bash ./scripts/train.sh
来进行模型训练,以及执行
# 3 means decoding on NIST 2003. This value
# can also be 4,5,6, which represents NIST 2004, 2005, 2006 respectively.
bash ./scripts/translate.sh 3
在NIST 2003数据集上进行解码。下面我们将详细说明如何配置训练和解码。
首先我们需要为源端和目标端建立词表文件。我们提供了一个脚本./data/build_dictionary.py
来建立json格式的词表
请通过运行:
python ./scripts/build_dictionary.py --help
来查看该脚本的帮助文件。
我们强烈推荐不要在这里限制词表的大小,而是通过模型的配置文件在训练时来设定。
可以参考./configs
文件夹中的一些样例。我们提供了几种配置样例:
dl4mt_nist_zh2en.yaml
: 在NIST中英上训练一个DL4MT模型transformer_nist_zh2en.yaml
: 在NIST中英上训练一个词级别的transformer模型transformer_nist_zh2en_bpe.yaml
: 在NIST中英上训练一个使用BPE的transformer模型transformer_wmt14_en2de.yaml
: 在WMT14英德上训练一个transformer模型
了解更多关于如何配置一个神经机器翻译模型的训练任务,请参考 这里。
通过在项目的 根目录 运行如下脚本来启动一个训练任务
export CUDA_VISIBLE_DEVICES=0
python -m src.bin.train \
--model_name <your-model-name> \
--reload \
--config_path <your-config-path> \
--log_path <your-log-path> \
--saveto <path-to-save-checkpoints> \
--valid_path <path-to-save-validation-translation> \
--use_gpu
执行python -m src.bin.train --help
来查看更多的选项
训练期间,所有检查点和最好的模型都会被保存在--saveto
指定的文件夹下面。假设模型的名称被设定为"MyModel",那么这个文件夹下面会出现如下一些文件:
- MyModel.ckpt: 存放了所有保存的检查点名称的文本文件
- MyModel.ckpt.xxxx: 在第xxxx步保存的检查点文件
- MyModel.best: 存放了所有最好检查点名称的文本文件
- MyModel.best.xxxx: 在第xxxx步保存的检查点文件
- MyModel.best.final: 最终得到的最好模型文件, 即在验证集上取得最好效果的模型。其中只保留了模型参数
当训练结束时,最好的模型会被自动的保存。通常我们只需要用被命名为"xxxx.best.final"的最好模型文件来进行解码。如之前所说,这个模型能在验证集上取得最好的效果
我们可以通过在项目的 根目录 执行下列脚本来进行解码:
export CUDA_VISIBLE_DEVICES=0
python -m src.bin.translate \
--model_name <your-model-name> \
--source_path <path-to-source-text> \
--model_path <path-to-model> \
--config_path <path-to-configuration> \
--batch_size <your-batch-size> \
--beam_size <your-beam-size> \
--alpha <your-length-penalty> \
--use_gpu
通过运行python -m src.bin.translate --help
来查看更多的选项。
同样我们的代码支持集成解码。通过运行python -m src.bin.ensemble_translate --help
来查看更多的选项。
请查看BENCHMARK.md
如果你有任何问题,请联系[email protected]