模型概述
模型特點
模型能力
使用案例
🚀 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 |
任務類型 | 翻譯 |



