前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【下载】PyTorch实现的神经网络翻译框架——机器翻译工具包 nmtpytorch

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

作者头像
WZEARW
发布2018-04-12 11:11:19
1.4K0
发布2018-04-12 11:11:19
举报
文章被收录于专栏:专知专知

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

运行以下命令以获取包含这些子模块的代码仓库:

代码语言:javascript
复制
git clone --recursive https://github.com/lium-lst/nmtpytorch.git

安装develop模块:

代码语言:javascript
复制
python setup.py develop
  • 使用案例

用一个英文-德文的Multi30k示例,来演示NMT的配置,其中涵盖了NMT中[train]和[model]的具体选项配置。

当你为你的数据集创建一个配置文件之后,你可以使用下面的命令开始训练:

代码语言:javascript
复制
nmtpy train -C <config file>

可以通过命令行来覆盖所有的配置选项:

代码语言:javascript
复制
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个批次)。

代码语言:javascript
复制
[train]
..
tensorboard_dir: ~/tb_dir
  • 一个统一的命令行接口

我们提供了一个统一的命令行接口——nmtpy,它实现了三个子命令包括:训练,翻译和重新开始。而不是先前的使用多个命令来实现训练,重新评分,翻译等。

nmtpy train

代码语言:javascript
复制
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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 专知 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档