モデル概要
モデル特徴
モデル能力
使用事例
🚀 NLLB-200
これはNLLB - 200の蒸留600Mバリアントのモデルカードです。
特定のチェックポイントのメトリクスはこちらです。
- トレーニングアルゴリズム、パラメータ、公平性制約、その他の適用アプローチ、および機能に関する情報。NLLB - 200のトレーニングに使用された正確なトレーニングアルゴリズム、データ、および高リソース言語と低リソース言語のデータ不均衡を処理する戦略は、論文で説明されています。
- 詳細情報のための論文またはその他のリソース NLLBチーム他、No Language Left Behind: Scaling Human - Centered Machine Translation, Arxiv, 2022
- ライセンス: CC - BY - NC
- モデルに関する質問やコメントを送る場所: https://github.com/facebookresearch/fairseq/issues
🚀 クイックスタート
このモデルに関する基本的な情報や使い方をご紹介します。
モデルのダウンロード
- Pythonをインストールします https://www.python.org/downloads/
cmd
を開きますpython --version
でPythonのバージョンを確認しますpython -m pip install huggingface_hub
でhuggingface_hubをインストールしますpython
を実行します
import huggingface_hub
huggingface_hub.download_snapshot('entai2965/nllb-200-distilled-600M-ctranslate2',local_dir='nllb-200-distilled-600M-ctranslate2')
モデルの実行
- 詳細はこちらを参照してください https://opennmt.net/CTranslate2/guides/transformers.html#nllb
cmd
を開きますpython -m pip install ctranslate2 transformers
で必要なライブラリをインストールしますpython
を実行します
import ctranslate2
import transformers
src_lang = "eng_Latn"
tgt_lang = "fra_Latn"
translator = ctranslate2.Translator("nllb-200-distilled-600M-ctranslate2",device="cpu")
tokenizer = transformers.AutoTokenizer.from_pretrained("nllb-200-distilled-600M-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
#set defaults
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'
#load models
translator = ctranslate2.Translator(model_folder,device=device)
tokenizer = transformers.AutoTokenizer.from_pretrained(model_folder, src_lang=source_language_code, clean_up_tokenization_spaces=True)
#tokenize input
encoded_list=[]
for text in raw_list:
encoded_list.append(tokenizer.convert_ids_to_tokens(tokenizer.encode(text)))
#translate
#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))
#decode
for counter,tokens in enumerate(translated_list):
translated_list[counter]=tokenizer.decode(tokenizer.convert_tokens_to_ids(tokens.hypotheses[0][1:]))
#output
for text in translated_list:
print(text)
関数型プログラミングバージョン
import os
import ctranslate2
import transformers
#set defaults
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'
#load models
translator = ctranslate2.Translator(model_folder,device=device)
tokenizer = transformers.AutoTokenizer.from_pretrained(model_folder, src_lang=source_language_code, clean_up_tokenization_spaces=True)
#invoke black magic
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))
#output
for text in translated_list:
print(text)
✨ 主な機能
NLLB - 200は機械翻訳モデルで、主に機械翻訳の研究、特に低リソース言語の研究を目的としています。200言語間の単文翻訳が可能です。
📦 インストール
モデルを使用するためのインストール手順は以下の通りです。
- Pythonをインストールします https://www.python.org/downloads/
python -m pip install huggingface_hub
でhuggingface_hubをインストールしますpython -m pip install ctranslate2 transformers
で必要なライブラリをインストールします
📚 ドキュメント
想定される使用方法
- 主な想定使用用途: NLLB - 200は機械翻訳モデルで、主に機械翻訳の研究、特に低リソース言語の研究を目的としています。200言語間の単文翻訳が可能です。モデルの使用方法に関する情報は、Fairseqのコードリポジトリにトレーニングコードや評価およびトレーニングデータへの参照とともに記載されています。
- 主な想定ユーザー: 主なユーザーは研究者および機械翻訳研究コミュニティです。
- 想定外の使用事例: NLLB - 200は研究用モデルであり、本番環境でのデプロイ用にはリリースされていません。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のトレーニングに使用された正確なトレーニングアルゴリズム、データ、および高リソース言語と低リソース言語のデータ不均衡を処理する戦略は、論文で説明されています。
📄 ライセンス
このモデルのライセンスは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



