其他

【下载】PyTorch实现的神经网络翻译框架——机器翻译工具包 nmtpytorch

2017-12-21 专知

【导读】机器翻译是自然语言处理的重要组成部分,其目的是使用计算机自动将文本翻译成其他语言的形式。近年来,端到端的神经机器翻译发展迅速,已经成为机器翻译系统的新主流。近日,法国勒芒大学发布了基于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),加入专知主题人工智能群交流!

点击“阅读原文”,使用专知!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存