模型概述
模型特點
模型能力
使用案例
🚀 NLLB - 200
NLLB - 200是一個機器翻譯模型,旨在推動機器翻譯研究,尤其是針對低資源語言。它支持200種語言的單句翻譯。
🚀 快速開始
此為NLLB - 200蒸餾600M變體的模型卡片。你可以點擊這裡查看該特定檢查點的指標。
✨ 主要特性
- 多語言支持:支持200種語言的單句翻譯。
- 研究導向:主要用於機器翻譯研究,特別是低資源語言的研究。
📦 安裝指南
下載模型
- 安裝Python:點擊下載
- 打開命令行工具,依次執行以下命令:
python --version
python -m pip install huggingface_hub
python
- 在Python環境中執行以下代碼:
import huggingface_hub
huggingface_hub.download_snapshot('entai2965/nllb-200-distilled-600M-ctranslate2', local_dir='nllb-200-distilled-600M-ctranslate2')
運行模型所需環境
- 打開命令行工具,執行以下命令:
python -m pip install ctranslate2 transformers
💻 使用示例
基礎用法
import ctranslate2
import transformers
src_lang = "eng_Latn"
tgt_lang = "fra_Latn"
translator = ctranslate2.Translator("nllb-200-distilled-600M-ctranslate2", device="cpu")
tokenizer = transformers.AutoTokenizer.from_pretrained("nllb-200-distilled-600M-ctranslate2", src_lang=src_lang, clean_up_tokenization_spaces=True)
source = tokenizer.convert_ids_to_tokens(tokenizer.encode("Hello world!"))
target_prefix = [tgt_lang]
results = translator.translate_batch([source], target_prefix=[target_prefix])
target = results[0].hypotheses[0][1:]
print(tokenizer.decode(tokenizer.convert_tokens_to_ids(target)))
高級用法 - 批量翻譯
import os
import ctranslate2
import transformers
# 設置默認值
home_path = os.path.expanduser('~')
model_folder = home_path + '/Downloads/models/nllb-200-distilled-600M-ctranslate2' # 佔用3GB內存
# model_folder = home_path + '/Downloads/models/nllb-200-distilled-1.3B-ctranslate2' # 佔用5.5GB內存
# model_folder = home_path + '/Downloads/models/nllb-200-3.3B-ctranslate2-float16' # 幾乎在所有情況下佔用13GB內存,在CUDA + GeForce RTX 2000系列及更新版本上佔用7.6GB內存
# model_folder = home_path + '/Downloads/models/nllb-200-3.3B-ctranslate2' # 佔用13GB內存
string1 = 'Hello world!'
string2 = 'Awesome.'
raw_list = [string1, string2]
# 參考:https://github.com/facebookresearch/flores/blob/main/flores200/README.md#languages-in-flores-200
source_language_code = "eng_Latn"
target_language_code = "fra_Latn"
device = 'cpu'
# device = 'cuda'
# 加載模型
translator = ctranslate2.Translator(model_folder, device=device)
tokenizer = transformers.AutoTokenizer.from_pretrained(model_folder, src_lang=source_language_code, clean_up_tokenization_spaces=True)
# 對輸入進行分詞
encoded_list = []
for text in raw_list:
encoded_list.append(tokenizer.convert_ids_to_tokens(tokenizer.encode(text)))
# 翻譯
# 參考:https://opennmt.net/CTranslate2/python/ctranslate2.Translator.html?#ctranslate2.Translator.translate_batch
translated_list = translator.translate_batch(encoded_list, target_prefix=[[target_language_code]] * len(raw_list))
assert(len(raw_list) == len(translated_list))
# 解碼
for counter, tokens in enumerate(translated_list):
translated_list[counter] = tokenizer.decode(tokenizer.convert_tokens_to_ids(tokens.hypotheses[0][1:]))
# 輸出結果
for text in translated_list:
print(text)
高級用法 - 函數式編程版本
import os
import ctranslate2
import transformers
# 設置默認值
home_path = os.path.expanduser('~')
model_folder = home_path + '/Downloads/models/nllb-200-distilled-600M-ctranslate2' # 佔用3GB內存
# model_folder = home_path + '/Downloads/models/nllb-200-distilled-1.3B-ctranslate2' # 佔用5.5GB內存
# model_folder = home_path + '/Downloads/models/nllb-200-3.3B-ctranslate2-float16' # 幾乎在所有情況下佔用13GB內存,在CUDA + GeForce RTX 2000系列及更新版本上佔用7.6GB內存
# model_folder = home_path + '/Downloads/models/nllb-200-3.3B-ctranslate2' # 佔用13GB內存
string1 = 'Hello world!'
string2 = 'Awesome.'
raw_list = [string1, string2]
# 參考:https://github.com/facebookresearch/flores/blob/main/flores200/README.md#languages-in-flores-200
source_language_code = "eng_Latn"
target_language_code = "fra_Latn"
device = 'cpu'
# device = 'cuda'
# 加載模型
translator = ctranslate2.Translator(model_folder, device=device)
tokenizer = transformers.AutoTokenizer.from_pretrained(model_folder, src_lang=source_language_code, clean_up_tokenization_spaces=True)
# 執行翻譯
translated_list = [tokenizer.decode(tokenizer.convert_tokens_to_ids(tokens.hypotheses[0][1:])) for tokens in translator.translate_batch([tokenizer.convert_ids_to_tokens(tokenizer.encode(text)) for text in raw_list], target_prefix=[[target_language_code]] * len(raw_list))]
assert(len(raw_list) == len(translated_list))
# 輸出結果
for text in translated_list:
print(text)
📚 詳細文檔
預期用途
- 主要用途:NLLB - 200是一個機器翻譯模型,主要用於機器翻譯研究,特別是低資源語言的研究。它支持200種語言的單句翻譯。關於如何使用該模型的信息可以在Fairseq代碼倉庫中找到,同時還有訓練代碼以及評估和訓練數據的參考資料。
- 主要用戶:主要用戶是研究人員和機器翻譯研究社區。
- 不適用的用例:NLLB - 200是一個研究模型,未發佈用於生產部署。該模型是在通用領域的文本數據上進行訓練的,不適合用於特定領域的文本,如醫學領域或法律領域。該模型也不適合用於文檔翻譯。模型訓練時輸入長度不超過512個標記,因此翻譯較長的序列可能會導致質量下降。NLLB - 200的翻譯結果不能作為認證翻譯使用。
評估指標
NLLB - 200模型使用了機器翻譯社區廣泛採用的BLEU、spBLEU和chrF++指標進行評估。此外,我們還使用XSTS協議進行了人工評估,並測量了生成翻譯的毒性。
評估數據
- 數據集:Flores - 200數據集在論文的第4節中有詳細描述。
- 選擇動機:我們使用Flores - 200數據集,因為它可以對NLLB - 200支持的所有語言進行全面評估。
- 預處理:使用SentencePiece對句子分割後的原始文本數據進行預處理。SentencePiece模型與NLLB - 200一起發佈。
訓練數據
我們使用了來自多種來源的並行多語言數據來訓練模型。論文的第5節詳細報告了數據選擇和構建過程。我們還使用了從Common Crawl構建的單語數據,第5.2節中有更多詳細信息。
倫理考慮
在這項工作中,我們在技術開發中採取了反思性的方法,以確保我們優先考慮人類用戶,並儘量減少可能轉移給他們的風險。雖然我們在整篇文章中都反思了我們的倫理考慮,但這裡還有一些額外的要點需要強調。首先,本研究選擇的許多語言是低資源語言,其中非洲語言佔比較大。雖然高質量的翻譯可以改善這些社區的教育和信息獲取,但這種獲取也可能使數字素養較低的群體更容易受到錯誤信息或網絡詐騙的影響。如果不良行為者將我們的工作用於惡意活動,就可能出現後一種情況,我們認為這是一種意外使用的例子。關於數據獲取,用於模型開發的訓練數據是從網絡上各種公開可用的來源挖掘的。雖然我們在數據清理方面投入了大量精力,但個人可識別信息可能無法完全消除。最後,儘管我們盡最大努力優化翻譯質量,但模型產生的誤譯可能仍然存在。雖然這種可能性很低,但這可能會對那些依賴這些翻譯做出重要決策的人產生不利影響(特別是與健康和安全相關的決策)。
注意事項和建議
我們的模型在維基媒體領域進行了測試,但對NLLB - MD支持的其他領域的研究有限。此外,支持的語言可能存在模型未涵蓋的變體。用戶應進行適當的評估。
碳足跡詳情
二氧化碳(CO2e)排放量的估計在論文的第8.8節中有報告。
🔧 技術細節
- 訓練算法等信息:關於訓練算法、參數、公平性約束或其他應用方法以及特性的信息。論文中描述了用於訓練NLLB - 200的確切訓練算法、數據以及處理高資源和低資源語言數據不平衡的策略。
- 參考資料:NLLB團隊等人的論文《No Language Left Behind: Scaling Human - Centered Machine Translation》,發表於Arxiv,2022年。
📄 許可證
本模型使用CC - BY - NC許可證。
其他信息
- 可用語言:可參考這裡查看支持的語言列表。
ace_Arab, ace_Latn, acm_Arab, acq_Arab, aeb_Arab, afr_Latn, ajp_Arab,
aka_Latn, amh_Ethi, apc_Arab, arb_Arab, ars_Arab, ary_Arab, arz_Arab,
asm_Beng, ast_Latn, awa_Deva, ayr_Latn, azb_Arab, azj_Latn, bak_Cyrl,
bam_Latn, ban_Latn, bel_Cyrl, bem_Latn, ben_Beng, bho_Deva, bjn_Arab, bjn_Latn,
bod_Tibt, bos_Latn, bug_Latn, bul_Cyrl, cat_Latn, ceb_Latn, ces_Latn,
cjk_Latn, ckb_Arab, crh_Latn, cym_Latn, dan_Latn, deu_Latn, dik_Latn,
dyu_Latn, dzo_Tibt, ell_Grek, eng_Latn, epo_Latn, est_Latn, eus_Latn,
ewe_Latn, fao_Latn, pes_Arab, fij_Latn, fin_Latn, fon_Latn, fra_Latn,
fur_Latn, fuv_Latn, gla_Latn, gle_Latn, glg_Latn, grn_Latn, guj_Gujr,
hat_Latn, hau_Latn, heb_Hebr, hin_Deva, hne_Deva, hrv_Latn, hun_Latn,
hye_Armn, ibo_Latn, ilo_Latn, ind_Latn, isl_Latn, ita_Latn, jav_Latn,
jpn_Jpan, kab_Latn, kac_Latn, kam_Latn, kan_Knda, kas_Arab, kas_Deva,
kat_Geor, knc_Arab, knc_Latn, kaz_Cyrl, kbp_Latn, kea_Latn, khm_Khmr,
kik_Latn, kin_Latn, kir_Cyrl, kmb_Latn, kon_Latn, kor_Hang, kmr_Latn,
lao_Laoo, lvs_Latn, lij_Latn, lim_Latn, lin_Latn, lit_Latn, lmo_Latn,
ltg_Latn, ltz_Latn, lua_Latn, lug_Latn, luo_Latn, lus_Latn, mag_Deva,
mai_Deva, mal_Mlym, mar_Deva, min_Latn, mkd_Cyrl, plt_Latn, mlt_Latn,
mni_Beng, khk_Cyrl, mos_Latn, mri_Latn, zsm_Latn, mya_Mymr, nld_Latn,
nno_Latn, nob_Latn, npi_Deva, nso_Latn, nus_Latn, nya_Latn, oci_Latn,
gaz_Latn, ory_Orya, pag_Latn, pan_Guru, pap_Latn, pol_Latn, por_Latn,
prs_Arab, pbt_Arab, quy_Latn, ron_Latn, run_Latn, rus_Cyrl, sag_Latn,
san_Deva, sat_Beng, scn_Latn, shn_Mymr, sin_Sinh, slk_Latn, slv_Latn,
smo_Latn, sna_Latn, snd_Arab, som_Latn, sot_Latn, spa_Latn, als_Latn,
srd_Latn, srp_Cyrl, ssw_Latn, sun_Latn, swe_Latn, swh_Latn, szl_Latn,
tam_Taml, tat_Cyrl, tel_Telu, tgk_Cyrl, tgl_Latn, tha_Thai, tir_Ethi,
taq_Latn, taq_Tfng, tpi_Latn, tsn_Latn, tso_Latn, tuk_Latn, tum_Latn,
tur_Latn, twi_Latn, tzm_Tfng, uig_Arab, ukr_Cyrl, umb_Latn, urd_Arab,
uzn_Latn, vec_Latn, vie_Latn, war_Latn, wol_Latn, xho_Latn, ydd_Hebr,
yor_Latn, yue_Hant, zho_Hans, zho_Hant, zul_Latn
- 模型來源:https://huggingface.co/facebook/nllb-200-distilled-600M
- 問題反饋:如有關於模型的問題或建議,可前往這裡反饋。



