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

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

原文发布于微信公众号 - 专知(Quan_Zhuanzhi)

原文发表时间:2017-12-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是极客人

图片去霾算法实践】NDK下二维数组的传递

最近看到了一篇关于图片“去霾算法”的文章,一下子就有了兴趣,所以想着能不能实现。由于数学能力捉急,无法理解文章的思想和相关论文。于是在Github上找到了相关的...

1163
来自专栏QQ音乐技术团队的专栏

Android 中图片压缩分析(上)

在 Android 中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种:其一是质量压缩,其二是下采样压缩。

1.4K2
来自专栏Gaussic

OpenBr快速入门 原

这篇教程旨在使用一些有趣的例子让你熟悉OpenBR背后的思想、对象以及动机。注意需要摄像头的支持。

2141
来自专栏钱坤的专栏

Akamai在内容分发网络中的算法研究(翻译总结)

原文是《Algorithmic Nuggets in Content Delivery》。这篇文章是akamai15年的文章,里面介绍了一些akamai在内容分...

3790
来自专栏宏伦工作室

深度有趣 | 01-02 前言和准备工作

用 Python 做一些有意思的案例和应用,内容和领域不限,可以包括数据分析、自然语言理解、计算机视觉,等等等等

1092
来自专栏cs

python统计一下自己的花费

1523
来自专栏Crossin的编程教室

【每周一坑】缩小图片尺寸

之前我们的题目大多偏向解决数学问题,今天来一道偏应用的: 我们知道,通常来说一张图片的分辨率越高,它就越清晰,但文件占用的空间就越大。有时候我们并不需要那么高的...

3107
来自专栏机器之心

TensorFlow初学者指南:如何为机器学习项目创建合适的文件架构

选自MetaFlow 作者:Morgan 机器之心编译 参与:李亚洲、蒋思源 在这篇文章中,作者根据自己的经验为 TensorFlow 初学者给出了设计文件、文...

3876
来自专栏机器之心

资源 | 神经网络框架Chainer发布2.0正式版:CuPy独立

选自GitHub 机器之心编译 参与:李泽南、吴攀 Chainer 是一个灵活的神经网络框架,它的一个主要目标就是展现灵活性,允许我们用简单直观的方式编写出复...

47813
来自专栏华章科技

利用R语言制作出漂亮的交互数据可视化

利用R语言也可以制作出漂亮的交互数据可视化,下面和大家分享一些常用的交互可视化的R包。

2461

扫码关注云+社区

领取腾讯云代金券