【导读】机器翻译是自然语言处理的重要组成部分,其目的是使用计算机自动将文本翻译成其他语言的形式。近年来,端到端的神经机器翻译发展迅速,已经成为机器翻译系统的新主流。近日,法国勒芒大学发布了基于pytorch的机器翻译工具包 nmtpytorch,为业内人士的研究和开发工作提供了便利。
Neural Machine Translation Framework in PyTorch
nmtpytorch是nmtpy的一个PyTorch分支,而起初是dl4mt-tutorial的一个分支。它基于序列到序列的框架(sequence-to-sequence framework)的神经网络翻译模型。
Nmtpy:https://github.com/lium-lst/nmtpy
dl4mt-tutorial:https://github.com/nyu-dl/dl4mt-tutorial
nmtpytorch的核心部分依赖numpy, torch 和 tqdm。Nmtpytorch依赖Python 3.6,目前并不支持Python 2.x。
安装
我们将subword-nmt和METEOR作为子模块,以便根据需要进行跟踪更新。另外,METEOR v1.5 JAR、multi-bleu.perl以及COCO评价工具cocoeval都直接包含在源文件中。
运行以下命令以获取包含这些子模块的代码仓库:
git clone --recursive https://github.com/lium-lst/nmtpytorch.git
安装develop模块:
python setup.py develop
使用案例
用一个英文-德文的Multi30k示例,来演示NMT的配置,其中涵盖了NMT中[train]和[model]的具体选项配置。
当你为你的数据集创建一个配置文件之后,你可以使用下面的命令开始训练:
nmtpy train -C <config file>
可以通过命令行来覆盖所有的配置选项:
nmtpy train -C <config file> train.<opt>:<val> model.<opt>:<val> ...
版本注释
安装版本v1.0(18/12/2017)
最初的版本旨在(尽可能)与最新的nmtpy兼容,并做出一些重要的变化。
新的TensorBoard支持
如果你想监控训练过程,你可以先安装tensorboard-pytorch。请注意,你还需要安装Tensorflow中的实际TensorBoard服务器以启动可视化服务器。
tensorboard-pytorch:https://github.com/lanpa/tensorboard-pytorch
当依赖项安装完成之后,你需要在实验的配置文件中为TensorBoard定义一个日志目录,以记录TensorBoard日志。记录频率与终端记录频率相同,其由train.disp_freq选项定义(默认为30个批次)。
[train]
..
tensorboard_dir: ~/tb_dir
一个统一的命令行接口
我们提供了一个统一的命令行接口——nmtpy,它实现了三个子命令包括:训练,翻译和重新开始。而不是先前的使用多个命令来实现训练,重新评分,翻译等。
nmtpy train
usage: nmtpy train [-h] -C CONFIG [-s SUFFIX] [overrides [overrides ...]]
positional arguments:
overrides (section).key:value overrides for config
optional arguments:
-h, --help show this help message and exit
-C CONFIG, --config CONFIG
Experiment configuration file
-s SUFFIX, --suffix SUFFIX
Optional experiment suffix.
nmtpy translate
usage: nmtpy translate [-h] [-n] -s SPLITS [-b BATCH_SIZE] [-k BEAM_SIZE]
[-m MAX_LEN] [-p] [-u] [-d DEVICE] [-e]
models [models ...]
positional arguments:
models Saved model/checkpoint file(s)
optional arguments:
-h, --help show this help message and exit
-n, --disable-filters
Disable text filters given in config.
-s SPLITS, --splits SPLITS
Comma separated splits to translate
-b BATCH_SIZE, --batch-size BATCH_SIZE
Batch size for beam-search
-k BEAM_SIZE, --beam-size BEAM_SIZE
Beam size for beam-search
-m MAX_LEN, --max-len MAX_LEN
Maximum sequence length
-p, --avoid-double Suppress previous token probs
-u, --avoid-unk Suppress <unk> generation
-d DEVICE, --device DEVICE
Select GPU device(s)
-e, --ensemble Enable ensembling for multiple models.
实验配置
对INI风格(INI-style)的实验配置文件格式稍作更新,以便根据数据描述在将来进行多任务、多语言设置。
模型未知的选项在[train]部分中定义,而模型本身使用的选项在[model]中定义。
可以在[data]中定义任意数量的且多种语言的并行语料库。请注意,您至少需要在本节中定义train_set和val_set数据集,以便训练和提前停止。
我们建议您查看我们提供的示例配置,以便了解文件格式。
训练一个模型
我们仍然提供一个单一的、模型未知的mainloop,以便处理模型中一切必要的训练,验证和提前停止操作。
定义一个模型
你需要在nmtpytorch/models目录下创建一个新文件,定义一个从nn.Module派生出的类。新的class的名字是model_type,需要写在你的配置文件中。接下来的步骤是:
从配置文件中解析模型的选项__init__();
在setup()中定义层:每一个nn.Module对象应该是模型的一个属性(例如,self.encoder = …),以确保PyTorch正确的工作;
在load_data()中创建和存储相关的数据集对象;
定义一个get_iterator()方法,以获取数据迭代器并计算它的损失。这个方法被用于dev设置的困惑度;
当你想增加一个额外的loss项的时候就定义一个aux_loss(),如果不想使用这个方法就return 0;
定义forward()方法,以带有键的字典作为数据源,并返回批量训练损失。这是mainloop在训练中调用的方法。
定义beam_search()方法,它使用定向搜索来获取数据迭代器和生成假设。NMT中的默认实现是GPU的批量(batched)版本。
如果您不需要做修改,可以随意复制NMT中的方法。
提出的模型
我们现在旨在解码器中提供一个Bahdanau风格注意力(Bahdanau-style attention)的条件GRU NMT (Conditional GRU NMT)的实现。
注意:我们建议通过在配置文件的[model]中定义max_trg_len来限制目标词汇表中tokens的数量,以避免在处理超大型词汇表出现GPU out of memory errors。这是由于在计算梯度的时候占用大量的内存造成的,如果要避免该错误,除非loss层的实现不同。
参考文献:
https://github.com//lium-lst/nmtpytorch
-END-
专 · 知
人工智能领域主题知识资料查看获取:【专知荟萃】人工智能领域25个主题知识资料全集(入门/进阶/论文/综述/视频/专家等)
同时欢迎各位用户进行专知投稿,详情请点击:
【诚邀】专知诚挚邀请各位专业者加入AI创作者计划!了解使用专知!
请PC登录www.zhuanzhi.ai或者点击阅读原文,注册登录专知,获取更多AI知识资料!
请扫一扫如下二维码关注我们的公众号,获取人工智能的专业知识!
请加专知小助手微信(Rancho_Fang),加入专知主题人工智能群交流!
点击“阅读原文”,使用专知!