模型简介
模型特点
模型能力
使用案例
🚀 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支持的其他领域研究有限,使用时需谨慎评估。
- 支持的语言可能存在模型未涵盖的变体,使用时需注意。



