當前位置:
首頁 > 新聞 > Facebook開源 PyTorch版 fairseq,準確性最高、速度比循環神經網路快9倍

Facebook開源 PyTorch版 fairseq,準確性最高、速度比循環神經網路快9倍

雷鋒網 AI科技評論按:今年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)。在開源的數據中,他們提供了英譯法和英譯德的預訓練模型。

GIF/2.5M

引用

如果你的論文中用了FAIR的相關代碼,可以這樣引用:

@inproceedings,

title     = "",

booktitle = ,

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)

via:GitHub(https://github.com/facebookresearch/fairseq-py)

雷鋒網AI科技評論編譯整理。雷鋒網

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

谷歌欲拿出 10 億美元投資美國第二大出行平台 Lyft,Uber 再受阻擊
基於ARKit開發的首款遊戲便登上蘋果發布會,Directive Games是怎麼做到的?
格力給洛陽砸了150億,我們瞄到了更深刻的「原因」
買買買!英特爾拿出10億美元投資AI初創公司
一文讀懂iPhone X 的Face ID臉部辨識技術

TAG:雷鋒網 |