Facebook开源 PyTorch版 fairseq,准确性最高、速度比循环神经网络快9倍

今年5月,Facebook AI研究院(FAIR)发表了他们的研究成果fairseq,在fairseq中,他们使用了一种新型的卷积神经网络来做语言翻译,比循环神经网络的速度快了9倍,而且准确性也是现有模型中最高的。此外,他们在GitHub公布了fair序列建模工具包的源代码和训练好的系统,其他的研究者可以在此基础上建立自己的关于翻译、文本总结和其他任务的模型。

详情可参见快9倍!Facebook开源机器学习翻译项目fairseq一文。

日前,Facebook AI研究团队又在GitHub上开源了fairseq PyTorch版本。

相关介绍

fairseq是Facebook AI研究院发布的一个序列到序列的学习工具,它的原作者(排名不分先后)是Sergey Edunov、Myle Ott和Sam Gross。该工具包能实现 Convolutional Sequence to Sequence Learning(地址:https://arxiv.org/abs/1705.03122)中描述的全卷积模型,并能在一台机器上进行多GPU训练,也能在CPU和GPU上快速产生束搜索(beam search)。在开源的数据中,他们提供了英译法和英译德的预训练模型。

引用

如果你的论文中用了FAIR的相关代码,可以这样引用:

@inproceedings{gehring2017convs2s,
 author    = {Gehring, Jonas, and Auli, Michael and Grangier, David and Yarats, Denis and Dauphin, Yann N},
 title     = "{Convolutional Sequence to Sequence Learning}",
 booktitle = {Proc. of ICML},
 year      = 2017,
}

工具和安装

  • macOS或是Linux系统的电脑
  • 要是想训练新的模型,需要用到NVIDIA GPU和NCCL(https://github.com/NVIDIA/nccl)
  • Python 3.6
  • 安装PyTorch(http://pytorch.org/)

目前的fairseq-py需要从GitHub库中获得PyTorch,有多种方式安装它。我们建议利用Miniconda3,执行如下的步骤。

1、安装Miniconda3(https://conda.io/miniconda.html);激活 Python 3环境

2、安装PyTorch

conda install gcc numpy cudnn nccl
conda install magma-cuda80 -c soumith
pip install cmake
pip install cffi

git clone https://github.com/pytorch/pytorch.git
cd pytorch
git reset --hard a03e5cb40938b6b3f3e6dbddf9cff8afdff72d1b
git submodule update --init
pip install -r requirements.txt

NO_DISTRIBUTED=1 python setup.py install

3、在GitHub中复制和执行如下代码来安装fairseq-py

pip install -r requirements.txt
python setup.py build
python setup.py develop

快速开始

你将需要使用到如下的命令:

  • python preprocess.py: 数据预处理: 构造词汇和二进制训练数据
  • python train.py: 在一个或多个GPU上训练新的模型
  • python generate.py: 用训练好的模型翻译预处理之后的数据
  • python generate.py -i:用训练好的模型翻译新的文本
  • python score.py: 通过与参考译文对比,给出生成译文的BLEU分数

评估预训练模型:

首先,下载预训练好的模型和词汇:

$ curl https://s3.amazonaws.com/fairseq-py/models/wmt14.en-fr.fconv-py.tar.bz2 | tar xvjf -

模型中用的是BPE词汇(https://arxiv.org/abs/1508.07909),用户必须在翻译之前将编码应用到源文本。可以用apply_bpe.py 脚本中的wmt14.en-fr.fconv-cuda/bpecodes文件。@@是延续标记,原始文本可以通过sed s/@@ //g来恢复,此外把 --remove-bpe 标记传递到generate.py也有同样的作用。在生成BPE词汇之前。输入文本需要用mosesdecoder中的tokenizer.perl来标记。

下面是利用python generate.py -i产生翻译的例子, beam size为5:

$ MODEL_DIR=wmt14.en-fr.fconv-py
$ python generate.py -i \
--path $MODEL_DIR/model.pt $MODEL_DIR \
--beam 5
| [en] dictionary: 44206 types
| [fr] dictionary: 44463 types
| model fconv_wmt_en_fr
| loaded checkpoint /private/home/edunov/wmt14.en-fr.fconv-py/model.pt (epoch 37)
> Why is it rare to discover new marine mam@@ mal species ?
S       Why is it rare to discover new marine mam@@ mal species ?
O       Why is it rare to discover new marine mam@@ mal species ?
H       -0.08662842959165573    Pourquoi est-il rare de découvrir de nouvelles espèces de mammifères marins ?
A       0 1 3 3 5 6 6 10 8 8 8 11 12

训练新模型

数据预处理

fairseq-py工具包中包含用于IWSLT 2014德转英语料库的一个预处理脚本样例。先将数据进行预处理和二进制编码:

$ cd data/
$ bash prepare-iwslt14.sh
$ cd ..
$ TEXT=data/iwslt14.tokenized.de-en
$ python preprocess.py --source-lang de --target-lang en \
 --trainpref $TEXT/train --validpref $TEXT/valid --testpref $TEXT/test \
 --thresholdtgt 3 --thresholdsrc 3 --destdir data-bin/iwslt14.tokenized.de-en

这将会得到能够用于训练模型的二进制数据。

训练

用python train.py来训练新的模型,下面是能很好的适于 IWSLT 2014数据集中的一些样例设置。

$ mkdir -p checkpoints/fconv
$ CUDA_VISIBLE_DEVICES=0 python train.py data-bin/iwslt14.tokenized.de-en \
 --lr 0.25 --clip-norm 0.1 --dropout 0.2 --max-tokens 4000 \
 --arch fconv_iwslt_de_en --save-dir checkpoints/fconv

默认情况下,python train.py会占用电脑中所有可用的GPU,可以用CUDA_VISIBLE_DEVICES环境来选择特定的GPU,或者改变使用的GPU数目。

有一点需要注意,batch大小是基于每个batch的最大token数来设置的,你需要基于系统中可用的GPU内存,选取一个稍小的值。

生成翻译

模型训练好之后就能利用python generate.py(用于二进制数据)或python generate.py -i(用于未处理文本)生成翻译了。

$ python generate.py data-bin/iwslt14.tokenized.de-en \
 --path checkpoints/fconv/checkpoint_best.pt \
 --batch-size 128 --beam 5
 | [de] dictionary: 35475 types
 | [en] dictionary: 24739 types
 | data-bin/iwslt14.tokenized.de-en test 6750 examples
 | model fconv
 | loaded checkpoint trainings/fconv/checkpoint_best.pt
 S-721   danke .
 T-721   thank you .
 ...

如果只想用一个CPU,加入--cpu标记。可以通过--remove-bpe移除掉BPE标记。

训练好的模型

目前开源的全卷积序列到序列模型如下:

  • wmt14.en-fr.fconv-py.tar.bz2(https://s3.amazonaws.com/fairseq-py/models/wmt14.en-fr.fconv-py.tar.bz2): 用于WMT14英译法的模型,包含词汇
  • wmt14.en-de.fconv-py.tar.bz2(https://s3.amazonaws.com/fairseq-py/models/wmt14.en-de.fconv-py.tar.bz2): 用于WMT14英译德的模型,包含词汇

针对以上模型,已经预处理和编码过的测试集如下:

  • wmt14.en-fr.newstest2014.tar.bz2(https://s3.amazonaws.com/fairseq-py/data/wmt14.en-fr.newstest2014.tar.bz2): 用于WMT14英译法的newstest2014测试集
  • wmt14.en-fr.ntst1213.tar.bz2(https://s3.amazonaws.com/fairseq-py/data/wmt14.en-fr.ntst1213.tar.bz2): 用于WMT14英译法的newstest2012和newstest2013测试集
  • wmt14.en-de.newstest2014.tar.bz2(https://s3.amazonaws.com/fairseq-py/data/wmt14.en-de.newstest2014.tar.bz2): 用于WMT14英译德的newstest2014测试集

下面是在一块GTX-1080ti上利用测试集产生结果的样例(英译德),运行在batch模式下:

$ curl https://s3.amazonaws.com/fairseq-py/models/wmt14.en-fr.fconv-py.tar.bz2 | tar xvjf - -C data-bin
$ curl https://s3.amazonaws.com/fairseq-py/data/wmt14.en-fr.newstest2014.tar.bz2 | tar xvjf - -C data-bin
$ python generate.py data-bin/wmt14.en-fr.newstest2014  \
 --path data-bin/wmt14.en-fr.fconv-py/model.pt \
 --beam 5 --batch-size 128 --remove-bpe | tee /tmp/gen.out
...
| Translated 3003 sentences (95451 tokens) in 81.3s (1174.33 tokens/s)
| Generate test with beam=5: BLEU4 = 40.23, 67.5/46.4/33.8/25.0 (BP=0.997, ratio=1.003, syslen=80963, reflen=81194)

# Scoring with score.py:
$ grep ^H /tmp/gen.out | cut -f3- > /tmp/gen.out.sys
$ grep ^T /tmp/gen.out | cut -f2- > /tmp/gen.out.ref
$ python score.py --sys /tmp/gen.out.sys --ref /tmp/gen.out.ref
BLEU4 = 40.23, 67.5/46.4/33.8/25.0 (BP=0.997, ratio=1.003, syslen=80963, reflen=81194)

本文作者:Non

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-12-02 06:51:09

Facebook开源 PyTorch版 fairseq,准确性最高、速度比循环神经网络快9倍的相关文章

Facebook开源PyTorch版本fairseq翻译模型,训练速度提高50%

今年5月10日,Facebook AI 研究实验室(FAIR)发布了一项使用创新性的.基于卷积神经网络的方法来进行语言翻译的最新成果.Facebook 称,该研究取得了截止目前最高准确度,并且速度是基于循环神经网络(RNN)系统的9倍(谷歌的机器翻译系统使用的就是这一技术). 今天开源的是一个PyTorch版本的fairseq.这个重新实现的原作者是Sergey Edunov,Myle Ott和Sam Gross.该工具包实现了 Convolutional Sequence to Sequenc

测试显示三星Galaxy S4运算速度比iPhone 5快一倍

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 标准测试显示GS4运算速度比iPhone 5快一倍(腾讯科技配图) 腾讯科技讯(林靖东)北京时间3月21日消息,据国外媒体报道,据标准测试显示,三星新旗舰Galaxy S4在今年春季发布时将配备目前世界上速度最快的处理器. 科技网Android Authority上周在三星Galaxy S4的发布会上对该产品进行了标准测试,随后专业测试网站P

火狐3.5速度比火狐2快10倍允许秘密浏览

7月1日消息,Mozilla基金会周二发布了火狐3.5浏览器,并表示其速度比火狐3.0快2倍,比火狐2快10倍. 据国外媒体报道称,火狐3.5的JavaScript性能更好:增添了更多隐私保护功能,其中包括一个新的秘密浏览模式:支持开放的视频.音频. Mozilla表示,火狐3.5浏览器将面向逾3亿活跃火狐用户,支持70多种语言:可以在Windows.Linux和Mac OS X操作系统上运行.按常理,新版本应该被称为火狐3.1,但Mozilla认为3.5更能表明其性能和功能得到了强化.Mozi

Mozilla公布火狐3.5浏览器速度比火狐2快10倍

7月1日消息,Mozilla基金会周二发布了火狐3.5浏览器,并表示其速度比火狐3.0快2倍,比火狐2快10倍. 据国外媒体报道称,火狐3.5的JavaScript性能更好:增添了更多隐私保护功能,其中包括一个新的秘密浏览模式:支持开放的视频.音频. Mozilla表示,火狐3.5浏览器将面向逾3亿活跃火狐用户,支持70多种语言:可以在Windows.Linux和Mac OS X操作系统上运行.按常理,新版本应该被称为火狐3.1,但Mozilla认为3.5更能表明其性能和功能得到了强化.Mozi

快9倍!Facebook开源机器学习翻译项目fairseq

Facebook的使命是让世界变得更加开放,让每个人都能以最高的准确性和最快的速度使用自己喜欢的语言来发帖子和视频进行互动,语言翻译对此十分重要. 雷锋网了解到,今天,Facebook的人工智能研究团队发表了他们的研究成果Fairseq,他们使用了一种新型的卷积神经网络来做语言翻译,比循环神经网络的速度快了9倍,而且准确性也是现有模型中最高的.此外,FAIR序列建模工具包的源代码和训练好的系统都已经在开源平台GitHub上公布,其他的研究者可以在此基础上建立自己的关于翻译.文本总结和其他任务的模

DT科技评论第36期:Facebook开源Caffe2深度学习框架

DT科技评论 Data Technology Review 第 36 期           阿里云研究中心,人民网研究院,DeepTech深科技 本期目录 谷歌斥资2910万美元建数据中心 Facebook推出AR新应用 Facebook开源Caffe2深度学习框架 Facebook研发"意念打字" IBM Security App Exchange平台上的应用程序突破90个 谷歌发布新版谷歌地球 谷歌正在开发招聘App Malwarebytes实验室介绍:网络犯罪战术与技术报告 英

CNN提速23.5倍!Facebook开源DL模块带给我们什么?

Geoffrey Hinton的努力,使得深度学习(Deep Learning,DL)成为实现机器智能的核心技术.然而,深度学习的一些坑,如大型神经网络的计算负载.训练性能,并不那么容易克服.现在,深度学习的爱好者可以通过Facebook的福利消除这一障碍:日前, Facebook人工智能研究院 (FAIR)宣布开源了一组深度学习软件库,是针对Torch机器学习框架的插件,基于NVIDIA的GPU,大大提升了神经网络的性能,可以用于计算机视觉和自然语言处理(NLP)等场景. 那么,具体而言,Fa

Facebook开源闪存数据库RocksDB

本周四http://www.aliyun.com/zixun/aggregation/1560.html">Facebook宣布开源其嵌入式数据库RocksDB(一种嵌入式Key-value存储系统),该数据库能够充分利用闪存的性能,大大提升应用服务器的速度. Facebook用RocksDB来驱动一些面向用户的应用,这些应用由于需要通过网络访问外部存储而性能低下,此外Facebook还用RocksDB来解决固态硬盘IO利用率不高相关的一些问题.Facebook的数据库工程师Dhruba

使用Facebook开源代码FBShimmering封装进度显示的ShimmeCircleView

使用Facebook开源代码FBShimmering封装进度显示的ShimmeCircleView 效果图: 静态图: 源码: ShimmeCircleView.h 与 ShimmeCircleView.m // // ShimmeCircleView.h // YouXianMingClock // // Created by YouXianMing on 14-10-13. // Copyright (c) 2014年 YouXianMing. All rights reserved. //