模型概述
模型特點
模型能力
使用案例
🚀 NLLB - 200
NLLB - 200是一個強大的機器翻譯模型,尤其專注於低資源語言的研究。它能夠在200種語言間實現單句翻譯,為機器翻譯領域的研究提供了有力支持。
🚀 快速開始
模型下載
- 安裝Python:點擊下載
- 打開命令行工具(
cmd
) - 檢查Python版本:
python --version
- 安裝
huggingface_hub
庫:python -m pip install huggingface_hub
- 打開Python交互環境:
python
import huggingface_hub
huggingface_hub.download_snapshot('entai2965/nllb-300-3.3B-ctranslate2', local_dir='nllb-300-3.3B-ctranslate2')
模型運行
- 參考文檔:https://opennmt.net/CTranslate2/guides/transformers.html#nllb
- 打開命令行工具(
cmd
) - 安裝必要的庫:
python -m pip install ctranslate2 transformers
- 打開Python交互環境:
python
import ctranslate2
import transformers
src_lang = "eng_Latn"
tgt_lang = "fra_Latn"
translator = ctranslate2.Translator("nllb-200-3.3B-ctranslate2", device='cpu')
tokenizer = transformers.AutoTokenizer.from_pretrained("nllb-200-3.3B-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' # 3 GB of memory
# model_folder=home_path+'/Downloads/models/nllb-200-distilled-1.3B-ctranslate2' # 5.5 GB of memory
# model_folder=home_path+'/Downloads/models/nllb-200-3.3B-ctranslate2-float16' # 13 GB of memory in almost all cases, 7.6 GB on CUDA + GeForce RTX 2000 series and newer
model_folder = home_path + '/Downloads/models/nllb-200-3.3B-ctranslate2' # 13 GB of memory
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' # 3 GB of memory
# model_folder=home_path+'/Downloads/models/nllb-200-distilled-1.3B-ctranslate2' # 5.5 GB of memory
# model_folder=home_path+'/Downloads/models/nllb-200-3.3B-ctranslate2-float16' # 13 GB of memory in almost all cases, 7.6 GB on CUDA + GeForce RTX 2000 series and newer
model_folder = home_path + '/Downloads/models/nllb-200-3.3B-ctranslate2' # 13 GB of memory
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)
✨ 主要特性
- 多語言支持:支持200種語言的單句翻譯,涵蓋了眾多低資源語言。
- 研究導向:主要用於機器翻譯領域的研究,尤其是針對低資源語言的研究。
📦 安裝指南
下載模型
- 安裝Python:點擊下載
- 打開命令行工具(
cmd
) - 檢查Python版本:
python --version
- 安裝
huggingface_hub
庫:python -m pip install huggingface_hub
- 打開Python交互環境:
python
import huggingface_hub
huggingface_hub.download_snapshot('entai2965/nllb-300-3.3B-ctranslate2', local_dir='nllb-300-3.3B-ctranslate2')
安裝依賴庫
- 打開命令行工具(
cmd
) - 安裝
ctranslate2
和transformers
庫:python -m pip install ctranslate2 transformers
💻 使用示例
基礎用法
import ctranslate2
import transformers
src_lang = "eng_Latn"
tgt_lang = "fra_Latn"
translator = ctranslate2.Translator("nllb-200-3.3B-ctranslate2", device='cpu')
tokenizer = transformers.AutoTokenizer.from_pretrained("nllb-200-3.3B-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-3.3B-ctranslate2' # 13 GB of memory
string1 = 'Hello world!'
string2 = 'Awesome.'
raw_list = [string1, string2]
source_language_code = "eng_Latn"
target_language_code = "fra_Latn"
device = 'cpu'
# 加載模型
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)))
# 翻譯
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)
📚 詳細文檔
預期用途
- 主要預期用途: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節。
倫理考慮
在這項工作中,採用了反思性的技術開發方法,以確保優先考慮人類用戶並儘量減少可能轉移給他們的風險。雖然在整篇文章中都反思了倫理考慮,但這裡還有一些額外的要點需要強調。首先,本研究選擇的許多語言是低資源語言,尤其側重於非洲語言。雖然高質量的翻譯可以改善這些社區的教育和信息獲取,但這種獲取也可能使數字素養較低的群體更容易受到錯誤信息或網絡詐騙的影響。如果不良行為者將研究成果用於惡意活動,就可能出現後一種情況,這被視為意外使用的一個例子。關於數據獲取,用於模型開發的訓練數據是從網絡上各種公開可用的來源挖掘的。儘管在數據清理方面投入了大量精力,但個人可識別信息可能並未完全消除。最後,儘管盡力優化翻譯質量,但模型產生的誤譯可能仍然存在。雖然這種可能性很低,但這可能會對那些依賴這些翻譯做出重要決策的人產生不利影響(特別是與健康和安全相關的決策)。
注意事項和建議
模型在Wikimedia領域進行了測試,但對NLLB - MD支持的其他領域的研究有限。此外,支持的語言可能存在模型未涵蓋的變體。用戶應進行適當的評估。
碳足跡詳情
二氧化碳(CO2e)估計值在論文第8.8節報告。
🔧 技術細節
- 訓練算法和參數:論文中描述了用於訓練NLLB - 200的確切訓練算法、數據以及處理高資源和低資源語言數據不平衡的策略。
- 參考資料:NLLB團隊等,《No Language Left Behind: Scaling Human - Centered Machine Translation》,Arxiv,2022
📄 許可證
本模型使用CC - BY - NC許可證。
可用語言
支持的語言列表可參考:https://github.com/facebookresearch/flores/blob/main/flores200/README.md#languages-in-flores-200
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
📚 信息表格
屬性 | 詳情 |
---|---|
模型類型 | 機器翻譯模型 |
訓練數據 | 來自多種來源的並行多語言數據以及從Common Crawl構建的單語數據 |
評估指標 | BLEU、spBLEU、chrF++,並使用XSTS協議進行人工評估,測量生成翻譯的毒性 |
許可證 | CC - BY - NC |
⚠️ 重要提示
- 本模型是研究模型,未發佈用於生產部署。
- 模型在通用領域文本數據上訓練,不適合特定領域文本,如醫學或法律領域。
- 模型訓練輸入長度不超過512個標記,翻譯較長序列可能導致質量下降。
- 模型翻譯結果不能作為認證翻譯使用。
💡 使用建議
- 由於模型對NLLB - MD支持的其他領域研究有限,使用時需謹慎評估。
- 支持的語言可能存在模型未涵蓋的變體,使用時需注意。



