モデル概要
モデル特徴
モデル能力
使用事例
🚀 M2M100 1.2B
M2M100は、多言語間の翻訳を目的として訓練された多言語エンコーダ・デコーダ(seq-to-seq)モデルです。このモデルは、この論文で紹介され、このリポジトリで最初に公開されました。
このモデルは、100言語間の9,900方向の直接翻訳が可能です。目的言語に翻訳するには、目的言語のIDを最初の生成トークンとして強制的に指定する必要があります。そのためには、generate
メソッドにforced_bos_token_id
パラメータを渡します。
注意: M2M100Tokenizer
はsentencepiece
に依存しているため、サンプルを実行する前にインストールしてください。
sentencepiece
をインストールするには、pip install sentencepiece
を実行します。
より多くの微調整されたバージョンを探すには、モデルハブを参照してください。
📦 インストール
sentencepieceのインストール
sentencepiece
をインストールするには、以下のコマンドを実行します。
pip install sentencepiece
モデルのダウンロード
Pythonを使用してこのモデルをダウンロードするには、以下の手順を実行します。
- Pythonをインストールします。Pythonのダウンロードページからダウンロードしてください。
- コマンドプロンプトを開き、以下のコマンドを実行してPythonのバージョンを確認します。
python --version
huggingface_hub
をインストールします。
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')
💻 使用例
単一翻訳の実行
以下のコードは、単一の文章を翻訳する例です。
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-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-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), オック語 (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ライセンスの下で公開されています。



