模型简介
模型特点
模型能力
使用案例
语言:
- 多语言
- 南非荷兰语 (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)
- 奥克语 (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)
许可证: mit 基础模型:
- facebook/m2m100_1.2B 标签:
- 神经机器翻译 (nmt) 管道标签: 翻译
来源: https://huggingface.co/facebook/m2m100_1.2B
M2M100 1.2B
M2M100 是一个多语言编码器-解码器(序列到序列)模型,专为多对多多语言翻译而训练。该模型在这篇论文中首次提出,并在此代码库中首次发布。
该模型能够直接在100种语言的9900个翻译方向之间进行翻译。要将文本翻译为目标语言,目标语言ID会被强制作为生成的首个标记。要将目标语言ID强制作为生成的首个标记,需将forced_bos_token_id
参数传递给generate
方法。
注意:M2M100Tokenizer
依赖于sentencepiece
,因此在运行示例前请确保已安装。
安装sentencepiece
请运行pip install sentencepiece
查看模型中心以寻找更多微调版本。
覆盖的语言
南非荷兰语 (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)、奥克语 (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}
}
如何使用 Python 下载此模型
- 安装 Python https://www.python.org/downloads/
cmd
python --version
python -m pip install huggingface_hub
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
python
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)



