Skip to content

Latest commit

 

History

History
136 lines (96 loc) · 5.22 KB

README-zh.md

File metadata and controls

136 lines (96 loc) · 5.22 KB

NJUNMT-pytorch


License: MIT Build Status

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数据集上进行解码。下面我们将详细说明如何配置训练和解码。

1. 建立词表

首先我们需要为源端和目标端建立词表文件。我们提供了一个脚本./data/build_dictionary.py来建立json格式的词表

请通过运行:

python ./scripts/build_dictionary.py --help

来查看该脚本的帮助文件。

我们强烈推荐不要在这里限制词表的大小,而是通过模型的配置文件在训练时来设定。

2. 修改配置文件

可以参考./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模型

了解更多关于如何配置一个神经机器翻译模型的训练任务,请参考 这里

3. 训练

通过在项目的 根目录 运行如下脚本来启动一个训练任务

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: 最终得到的最好模型文件, 即在验证集上取得最好效果的模型。其中只保留了模型参数

4. 解码

当训练结束时,最好的模型会被自动的保存。通常我们只需要用被命名为"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

请查看BENCHMARK.md

和我们联系

如果你有任何问题,请联系[email protected]