模型简介
模型特点
模型能力
使用案例
🚀 M2M100 1.2B
M2M100是一个多语言编码器 - 解码器(序列到序列)模型,专为多对多多语言翻译而训练。该模型可以直接在100种语言的9900个翻译方向之间进行翻译。它为多语言交流提供了强大的支持,能有效打破语言障碍。
🚀 快速开始
M2M100模型源自此处。它在这篇论文中被首次提出,并在这个仓库中首次发布。
要将文本翻译成目标语言,需要将目标语言ID作为第一个生成的标记。可以通过将 forced_bos_token_id
参数传递给 generate
方法来实现这一点。
⚠️ 重要提示
M2M100Tokenizer
依赖于sentencepiece
,因此在运行示例之前,请确保安装它。要安装sentencepiece
,请运行pip install sentencepiece
。
可以查看模型中心来查找更多微调版本。
✨ 主要特性
- 多语言支持:支持众多语言,包括但不限于以下语言。
- 直接翻译:能够直接在100种语言的9900个方向之间进行翻译。
📦 安装指南
下载模型
- 安装Python:https://www.python.org/downloads/
- 打开
cmd
- 检查Python版本:
python --version
- 安装
huggingface_hub
:python -m pip install huggingface_hub
- 进入Python环境:
python
import huggingface_hub
huggingface_hub.download_snapshot('entai2965/m2m100-1.2B-ctranslate2', local_dir='m2m100-1.2B-ctranslate2')
运行模型依赖安装
- 参考:https://opennmt.net/CTranslate2/guides/transformers.html#m2m-100
- 打开
cmd
- 安装必要库:
python -m pip install ctranslate2 transformers sentencepiece
💻 使用示例
基础用法
import ctranslate2
import transformers
translator = ctranslate2.Translator("m2m100-1.2B-ctranslate2", device="cpu")
tokenizer = transformers.AutoTokenizer.from_pretrained("m2m100-1.2B-ctranslate2", clean_up_tokenization_spaces=True)
tokenizer.src_lang = "en"
source = tokenizer.convert_ids_to_tokens(tokenizer.encode("Hello world!"))
target_prefix = [tokenizer.lang_code_to_token["de"]]
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_path = home_path + '/Downloads/models/m2m100-418M-ctranslate2'
model_path = home_path + '/Downloads/models/m2m100-1.2B-ctranslate2'
# 可用语言列表 -> https://huggingface.co/facebook/m2m100_1.2B <-
source_language_code = 'ja'
target_language_code = 'es'
device = 'cpu'
# device = 'cuda'
# 加载数据
string1 = 'イキリカメラマン'
string2 = 'おかあさん'
string3 = '人生はチョコレートの箱のようなものです。彼らは皆毒殺されています。'
list_to_translate = [string1, string2, string3]
# 加载模型和分词器
translator = ctranslate2.Translator(model_path, device=device)
tokenizer = transformers.AutoTokenizer.from_pretrained(model_path, clean_up_tokenization_spaces=True)
# 配置语言
tokenizer.src_lang = source_language_code
target_language_token = [tokenizer.lang_code_to_token[target_language_code]]
# 编码
encoded_list = []
for text in list_to_translate:
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_token] * len(encoded_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_path = home_path + '/Downloads/models/m2m100-418M-ctranslate2'
model_path = home_path + '/Downloads/models/m2m100-1.2B-ctranslate2'
# 可用语言列表 -> https://huggingface.co/facebook/m2m100_1.2B <-
source_language_code = 'ja'
target_language_code = 'es'
device = 'cpu'
# device = 'cuda'
# 加载数据
string1 = 'イキリカメラマン'
string2 = 'おかあさん'
string3 = '人生はチョコレートの箱のようなものです。彼らは皆毒殺されています。'
list_to_translate = [string1, string2, string3]
# 加载模型和分词器
translator = ctranslate2.Translator(model_path, device=device)
tokenizer = transformers.AutoTokenizer.from_pretrained(model_path, clean_up_tokenization_spaces=True)
tokenizer.src_lang = source_language_code
# 执行翻译
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(i)) for i in list_to_translate], target_prefix=[[tokenizer.lang_code_to_token[target_language_code]]] * len(list_to_translate))]
# 输出
for text in translated_list:
print(text)
📚 详细文档
支持的语言
该模型支持以下语言: 南非荷兰语 (af)、阿姆哈拉语 (am)、阿拉伯语 (ar)、阿斯图里亚斯语 (ast)、阿塞拜疆语 (az)、巴什基尔语 (ba)、白俄罗斯语 (be)、保加利亚语 (bg)、孟加拉语 (bn)、布列塔尼语 (br)、波斯尼亚语 (bs)、加泰罗尼亚语;瓦伦西亚语 (ca)、宿务语 (ceb)、捷克语 (cs)、威尔士语 (cy)、丹麦语 (da)、德语 (de)、希腊语 (el)、英语 (en)、西班牙语 (es)、爱沙尼亚语 (et)、波斯语 (fa)、富拉语 (ff)、芬兰语 (fi)、法语 (fr)、西弗里斯兰语 (fy)、爱尔兰语 (ga)、盖尔语;苏格兰盖尔语 (gd)、加利西亚语 (gl)、古吉拉特语 (gu)、豪萨语 (ha)、希伯来语 (he)、印地语 (hi)、克罗地亚语 (hr)、海地克里奥尔语 (ht)、匈牙利语 (hu)、亚美尼亚语 (hy)、印尼语 (id)、伊博语 (ig)、伊洛卡诺语 (ilo)、冰岛语 (is)、意大利语 (it)、日语 (ja)、爪哇语 (jv)、格鲁吉亚语 (ka)、哈萨克语 (kk)、高棉语 (km)、卡纳达语 (kn)、韩语 (ko)、卢森堡语 (lb)、干达语 (lg)、林加拉语 (ln)、老挝语 (lo)、立陶宛语 (lt)、拉脱维亚语 (lv)、马达加斯加语 (mg)、马其顿语 (mk)、马拉雅拉姆语 (ml)、蒙古语 (mn)、马拉地语 (mr)、马来语 (ms)、缅甸语 (my)、尼泊尔语 (ne)、荷兰语;佛兰芒语 (nl)、挪威语 (no)、北索托语 (ns)、奥克语 (post 1500) (oc)、奥里亚语 (or)、旁遮普语 (pa)、波兰语 (pl)、普什图语 (ps)、葡萄牙语 (pt)、罗马尼亚语;摩尔多瓦语 (ro)、俄语 (ru)、信德语 (sd)、僧伽罗语 (si)、斯洛伐克语 (sk)、斯洛文尼亚语 (sl)、索马里语 (so)、阿尔巴尼亚语 (sq)、塞尔维亚语 (sr)、斯瓦蒂语 (ss)、巽他语 (su)、瑞典语 (sv)、斯瓦希里语 (sw)、泰米尔语 (ta)、泰语 (th)、他加禄语 (tl)、茨瓦纳语 (tn)、土耳其语 (tr)、乌克兰语 (uk)、乌尔都语 (ur)、乌兹别克语 (uz)、越南语 (vi)、沃洛夫语 (wo)、科萨语 (xh)、意第绪语 (yi)、约鲁巴语 (yo)、中文 (zh)、祖鲁语 (zu)
BibTeX引用
@misc{fan2020englishcentric,
title={Beyond English-Centric Multilingual Machine Translation},
author={Angela Fan and Shruti Bhosale and Holger Schwenk and Zhiyi Ma and Ahmed El-Kishky and Siddharth Goyal and Mandeep Baines and Onur Celebi and Guillaume Wenzek and Vishrav Chaudhary and Naman Goyal and Tom Birch and Vitaliy Liptchinsky and Sergey Edunov and Edouard Grave and Michael Auli and Armand Joulin},
year={2020},
eprint={2010.11125},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
📄 许可证
本项目采用MIT许可证。
📦 模型信息
属性 | 详情 |
---|---|
模型类型 | 多语言编码器 - 解码器(序列到序列)模型 |
基础模型 | facebook/m2m100_1.2B |
许可证 | MIT |
标签 | nmt |
任务类型 | 翻译 |



