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)。在開源的數據中,他們提供了英譯法和英譯德的預訓練模型。

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

引用

如果你的論文中用了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

  • 安裝PyTorchhttp://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
本文轉自雷鋒網禁止二次轉載,原文鏈接

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280055.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280055.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280055.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

推薦一個開源的現代化的 PDF 生成組件

你好,這里是 Dotnet 工具箱,定期分享 Dotnet 有趣,實用的工具和組件,希望對您有用!前言QuestPDF 是一個開源免費的 .NET 組件庫,可以用來生成 PDF 文檔。在 Github 上有4千多的 Star。項目充分考慮了 PDF 文…

小程序調用阿里云身份證識別OCR(附帶七牛云上傳圖片)

寫在前面&#xff1a;實現的邏輯是拍照上傳調用后端封裝好的身份證接口&#xff0c;然后同時調用七牛云接口把照片傳過去以便后臺管理系統審核看1:首選需要這么一張頁面接下來就寫我是怎么做的首先是布局&#xff08;以下是wxml&#xff09; <view><view classidcard&…

windows 安裝yaml支持和pytest支持等

打開cmd 輸入pip install pyyaml #yaml文件支持 輸入pip install pytest #pytest框架支持 輸入pip install requests #requests接口測試支持 輸入pip install pyopenssl #openssl支持 前提是電腦上的python已經配置好了轉載于:https://www.cnblogs.com/mghhzAnne/p/92…

史上最好記的神經網絡結構速記表(上)

本文講的是史上最好記的神經網絡結構速記表&#xff08;上&#xff09;&#xff0c;新的神經網絡結構不斷涌現&#xff0c;我們很難一一掌握。哪怕一開始只是記住所有的簡稱&#xff08; DCIGN&#xff0c;BiLSTM&#xff0c;DCGAN &#xff09;&#xff0c;也會讓同學們吃不消…

厚積薄發,微軟OFFICE云時代宏腳本來臨,Excel Srcipt已經推進到桌面端可用

前一陣子&#xff0c;已經發現微軟在Excel上發布了Office Script For Excel&#xff0c;當時只能在網頁端的Excel上使用&#xff0c;今天打開桌面端的Excel&#xff0c;發現多了一個【自動執行】選項卡。再一次看了下&#xff0c;比起以前的Office Addin&#xff0c;要先進得多…

如何使用Amazon Echo控制您的Eero Wi-Fi網絡

Thanks to the power of Alexa and its open API, you’re able to control a vast number of devices using just your voice. If you have an Eero Wi-Fi system, you can even control your home network with the Amazon Echo. 得益于Alexa的強大功能及其開放的API&#xf…

H5在WebView上開發小結

背景 來自我司業務方要求&#xff0c;需開發一款APP。但由于時間限制&#xff0c;只能采取套殼app方式&#xff0c;即原生app內嵌webview展示前端頁面。本文主要記述JavaScript與原生app間通信&#xff0c;以及內嵌webview開發時&#xff0c;前端方面可能踩的一些坑。 技術架構…

C#的?和??

1.&#xff1f;&#xff1f; 為了實現Nullable數據類型轉換成non-Nullable類型數據&#xff0c;才有的一個操作符&#xff1b; 意義&#xff1a;一變量取值&#xff0c;取符號左邊的值&#xff0c;若左邊為null&#xff0c;那么取賦值&#xff1f;&#xff1f;右邊的&#xff1…

odoo 自定義視圖_如何使用Windows的五個模板自定義文件夾視圖

odoo 自定義視圖If you’re particular about how Windows displays the contents of your folders, you can cut your customization time down considerably by taking advantage of File Explorer’s five built-in folder templates. 如果您特別想知道Windows如何顯示文件夾…

C#之ILC和C++的CLR前者更快?

楔子ILC是C#寫的&#xff0c;CLR是C。.Net 7中&#xff0c;為何微軟執意用一個托管的模型去嘗試取代非托管框架呢&#xff1f;至少native code方面它是這么做的這個問題一直縈繞腦海。非托管和托管十年前出版的那本久負盛名的《CLR via C#》至今都是不可或缺的存在&#xff0c;…

歷史

python的歷史 kfsaldkfsdf fdskfdsa fdsjkafsjda fdshkfjsdja View Codefjdskaffdsjkaffdsjakflsad;fjdsklaf 轉載于:https://www.cnblogs.com/jin-xin/articles/10448286.html

typescript+react+antd基礎環境搭建

typescriptreactantd基礎環境搭建&#xff08;包含樣式定制&#xff09; tsconfig.json 配置 // 具體配置可以看上面的鏈接 這里module moduleResolution的配置都會影響到antd的顯示 // allowSyntheticDefaultImports 是antd官網給的配置 必須加上 {"compilerOptions&quo…

最小生成樹Prim算法和Kruskal算法

https://www.cnblogs.com/JoshuaMK/p/prim_kruskal.html 轉載于:https://www.cnblogs.com/DixinFan/p/9225105.html

如何重新打開Windows防火墻提示?

If you are setting up a new program that needs network access, but are not paying close enough attention, you might end up accidentally causing Windows firewall to block the program. How do you fix such a mistake? Today’s SuperUser Q&A post helps a f…

判斷字符串出現次數最多的字符 及 次數

分析 題目的意思大致就是找出每個字符出現的次數&#xff0c;然后比較大小。那么每個字符都應該對應它出現的次數。既然是一一對應的&#xff0c;那我們就想到用對象的key和value來儲存字符和其出現的次數。具體做法 新建一個空對象obj 遍歷給定的字符串接下來就是最重要的 把字…

AI x 量化:華爾街老司機解密智能投資正確姿勢

隨著中國經濟的騰飛&#xff0c;中產階級的崛起&#xff0c;投資管理逐漸步入尋常百姓家。 值得注意的是&#xff0c;在十年前“無財可理”問題解決后&#xff0c;另一個矛盾愈發凸顯——層次不齊的投資素質。據wind數據統計&#xff0c;2004年至2015年12年間&#xff0c;只有3…

如何遠程調試 MAUI blazor / Blazor Hybrid

我們知道瀏覽器模式下 Blazor 可以使用 F12 打開開發工具,調試js查看頁面元素,那當 Maui Blazor 提示煩人的 an unhandled error has occurred 該怎么進行調試呢?1. VS 運行工程于 Debug 模式下,只要 BlazorWebview 控件處于焦點,直接按F12就可以打開開發工具了. 沒有焦點就鼠…

筆記本觸摸鍵盤驅動自動禁用_如何為iPad的藍牙鍵盤禁用自動更正

筆記本觸摸鍵盤驅動自動禁用The take-for-granted features we enjoy when using an on-screen keyboard—like auto-corrections and auto-capitalization–quickly become a hindrance if you’re using a physical keyboard with your iOS device. Let’s look at how to qu…

發票的作用

目錄 發票上的兩個章&#xff1a;稅種&#xff1a;發票的作用&#xff1a;征稅方式&#xff1a;發票限額&#xff1a;參考鏈接發票上的兩個章&#xff1a; 稅務局的發票監制章商家的發票專用章稅種&#xff1a; 增值稅&#xff1a;商家在賣東西時為獲利&#xff0c;而提高價格的…

opencv-原圖基礎上添加指定顏色

前言 項目中需要將某些區域使用不同的顏色表示出來&#xff0c;同時能夠看到原圖作為底色。 代碼 #include "opencv2/highgui/highgui.hpp" #include <opencv2/imgproc.hpp> #include <iostream> using namespace cv;int main() {Mat image imread( &q…