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 cffigit clone https://github.com/pytorch/pytorch.git
cd pytorch
git reset --hard a03e5cb40938b6b3f3e6dbddf9cff8afdff72d1b
git submodule update --init
pip install -r requirements.txtNO_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)
Facebook开源 PyTorch版 fairseq,准确性最高、速度比循环神经网络快9倍相关推荐
- PHP 7.3声称速度比PHP 5快3倍还多,值得更新了!
PHP 7.3声称速度比PHP 5快3倍还多,值得更新了! 作为PHP5的最后一个版本,也是目前使用最广泛的PHP版本,PHP 5.6始于公元2014年(不是1804年,嘿嘿),其第一个测试版PHP ...
- mysql 5.7 速度很快_MySQL5.7速度比MySQL5.6快3倍
ySQL 5.7 – 新版本,新功能网络研讨会 万众期待的新版本MySQL 5.7已经发布啦.它是目前世界上最受欢迎的开源数据库,MySQL5.7速度比MySQL5.6快3倍,并且改进了可管理性和安全 ...
- PHP 7.3声称速度比PHP 5快3倍还多,值得更新了! 1
PHP 7.3声称速度比PHP 5快3倍还多,值得更新了! 作为PHP5的最后一个版本,也是目前使用最广泛的PHP版本,PHP 5.6始于公元2014年(不是1804年,嘿嘿),其第一个测试版PHP ...
- Facebook 开源增强版 LASER,可使用90多种语言
为了加速将自然语言处理(NLP)应用到更多的语言,Facebook 开源了增强版 LASER 库,成为第一个成功地与 NLP 社区分享的大型多语种句子表示工具.该工具目前可以使用90多种语言,涉及28 ...
- Facebook 开源安卓版 React Native,开发者可将相同代码用于网页和 iOS 应用开发
转自:http://mt.sohu.com/20150915/n421177212.shtml Facebook 创建了React Java 库,这样,Facebook 的工程团队就可以用相同的代码给 ...
- Facebook 开源增强版 LASER 库:可实现 93 种语言的零样本迁移...
雷锋网 AI 科技评论按:去年 12 月份,Facebook 在论文中提出了一种可学习 93 种语言的联合多语言句子表示的架构,该架构仅使用一个编码器,就可以在不做任何修改的情况下实现跨语言迁移,为自 ...
- Facebook 开源增强版 LASER 库:可实现 93 种语言的零样本迁移
雷锋网 AI 科技评论按:去年 12 月份,Facebook 在论文中提出了一种可学习 93 种语言的联合多语言句子表示的架构,该架构仅使用一个编码器,就可以在不做任何修改的情况下实现跨语言迁移,为自 ...
- MySQL 8.0 正式版发布,比 MySQL 5.7 快 2 倍!
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL ...
- 中国天眼新发现登Nature封面:恒星形成速度比我们想象快10倍
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 好消息! "中国天眼"FAST又有新的重大发现,而且还登上了最新一期的Nature封面. 这一次,由国家天文台庆道冲.李 ...
最新文章
- 解决 Unable to get provider
- 安全狗:云时代的服务器安全守护者
- Python数据结构——array
- Topo系统的益处和帮助
- 互斥信号量和二进制信号量
- 我们一定要有自立的飞秋觉悟
- dom选择方法的区别
- python正则匹配11个数字_Python正则表达式匹配字符串中的数字
- Spring MVC请求-响应流
- 【转】kubernetes 中 deployment 支持哪些键值
- C语言函数调用的方式求两个数的大小
- 凉州馆中与诸判官夜集
- ChatGPT 会开源吗?
- Linux操作系统的基本命令
- redis入门到精通(一) - 编译与调试
- 嵌入式之linux入门篇
- java虚数复数计算_真实的虚数,不仅不是没用,而且还很实在
- 移动终端及常见的操作系统
- 头发为什么会从中间断掉_头发总是从中间断怎么办 几个妙招让你告别脱发问题...
- 0917 电容参数X5R,X7R,Y5V等代表什么意思呢?X5R的意思就是该电容的正常工作温度为-55°C~+85°C,对应的电容容量变化为±15%
热门文章
- Codechef January Challenge 2018 - Killjee and k-th letter
- 10、自学——Linux的学习进度与任务【用户和用户组相关操作】
- CocoaPods安装和使用及问题:Setting up CocoaPods master repo
- 代码命名,代码里的命名规则:错误的和正确的对比 命名方法总结 “自我描述的源代码”用代码表达出你的思想,让其他人通过代码能明白你的意图。...
- WHENEVER SQLERROR EXIT SQL.SQLCODE
- Http状态码完整说明
- IE6下div宽高设置
- 关于不同用户进入系统报错的请求
- 全国计算机等级考试题库二级C操作题100套(第81套)
- 服务器php 启动命令_服务端的cli方式运行