模型简介
模型特点
模型能力
使用案例
🚀 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
- 问题反馈:如有关于模型的问题或建议,可前往这里反馈。



