Transformers documentation
NLLB
このモデルは2022年7月11日にHF papersで公開され、2022年7月18日にHugging Face Transformersに貢献されました。
NLLB
概要
NLLB: No Language Left Behindは多言語翻訳モデルです。低資源言語向けに調整されたデータマイニング技術を用いたデータで学習されており、200以上の言語に対応しています。NLLBは、Sparsely Gated Mixture of Expertsを用いた条件付き計算アーキテクチャを備えています。
すべてのオリジナルのNLLBチェックポイントは、AI at Meta組織の下で見つけることができます。
このモデルは Lysandre によって提供されました。 NLLB を異なる翻訳タスクに適用する方法のより多くの例については、右側のサイドバーにある NLLB モデルをクリックしてください。
以下の例では、PipelineまたはAutoModelクラスを使用してテキストを翻訳する方法を示しています。
from transformers import pipeline
pipeline = pipeline(task="translation", model="facebook/nllb-200-distilled-600M", src_lang="eng_Latn", tgt_lang="fra_Latn", device=0)
pipeline("UN Chief says there is no military solution in Syria")from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-600M")
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-600M", attn_implementation="sdpa", device_map="auto")
article = "UN Chief says there is no military solution in Syria"
inputs = tokenizer(article, return_tensors="pt").to(model.device)
translated_tokens = model.generate(
**inputs, forced_bos_token_id=tokenizer.convert_tokens_to_ids("fra_Latn"), max_length=30
)
print(tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0])Quantization は、重みを低精度で表現することで、大規模モデルのメモリ負荷を軽減します。利用可能な Quantization バックエンドの詳細については、Quantization の概要を参照してください。
以下の例では、bitsandbytesを使用して重みを8ビットに量子化します。
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-1.3B", quantization_config=bnb_config, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-1.3B")
article = "UN Chief says there is no military solution in Syria"
inputs = tokenizer(article, return_tensors="pt").to(model.device)
translated_tokens = model.generate(
**inputs, forced_bos_token_id=tokenizer.convert_tokens_to_ids("fra_Latn"), max_length=30,
)
print(tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0])AttentionMaskVisualizer を使用して、モデルが注意できるトークンと注意できないトークンをより深く理解してください。
from transformers.utils.attention_visualizer import AttentionMaskVisualizer
visualizer = AttentionMaskVisualizer("facebook/nllb-200-distilled-600M")
visualizer("UN Chief says there is no military solution in Syria")
注記
トークナイザーは2023年4月に更新され、ソースシーケンスの先頭にターゲット言語ではなくソース言語をプレフィックスとして付与するようになりました。これにより、ゼロショット性能が優先され、教師あり性能にはわずかなコストが生じます。
from transformers import NllbTokenizer tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-distilled-600M") tokenizer("How was your day?").input_ids [256047, 13374, 1398, 4260, 4039, 248130, 2]従来の動作に戻すには、以下のコード例を使用してください。
from transformers import NllbTokenizer tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-distilled-600M", legacy_behaviour=True)英語以外の言語の場合、以下に示すように
src_langキーワードにその言語のBCP-47コードを指定します。ルーマニア語からドイツ語への翻訳の例を以下に示します。
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-600M") model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-600M", device_map="auto") article = "UN Chief says there is no military solution in Syria" inputs = tokenizer(article, return_tensors="pt").to(model.device) translated_tokens = model.generate( **inputs, forced_bos_token_id=tokenizer.convert_tokens_to_ids("fra_Latn"), max_length=30 ) tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0] Le chef de l'ONU dit qu'il n'y a pas de solution militaire en Syrie
NllbTokenizer
class transformers.NllbTokenizer
< source >( vocab: str | dict[str, int] | None = Nonemerges: str | list[str] | None = Nonebos_token = '<s>'eos_token = '</s>'sep_token = '</s>'cls_token = '<s>'unk_token = '<unk>'pad_token = '<pad>'mask_token = '<mask>'src_lang = Nonetgt_lang = None_spm_precompiled_charsmap: str | None = Noneadditional_special_tokens = Noneextra_special_tokens = Nonelegacy_behaviour = False**kwargs )
パラメータ
- vocab_file (
str, 任意) — 語彙ファイルへのパス。 - bos_token (
str、任意、デフォルトは"<s>") — 事前学習で使用されたシーケンス開始トークンです。 - eos_token (
str、任意、デフォルトは"</s>") — シーケンスの終了トークンです。 - sep_token (
str、任意、デフォルトは"</s>") — セパレータートークンです。 - cls_token (
str、任意、デフォルトは"<s>") — 分類用のトークンです。 - unk_token (
str、任意、デフォルトは"<unk>") — 不明トークンです。 - pad_token (
str、任意、デフォルトは"<pad>") — パディングに使用されるトークンです。 - mask_token (
str、任意、デフォルトは"<mask>") — 値をマスクするために使用されるトークンです。 - src_lang (
str, 省略可) — 翻訳のソース言語として使用する言語。 - tgt_lang (
str, 任意) — 翻訳のターゲット言語として使用する言語。 - legacy_behaviour (
bool、任意、デフォルトはFalse) — レガシーな動作(サフィックスパターン)を使用するか、新しい動作(プレフィックスパターン)を使用するかを指定します。
HuggingFaceのtokenizersライブラリをベースにしたNLLBのトークナイザーを構築します。Unigramに基づいています。
このトークナイザーは、主要なメソッドの大部分を含む TokenizersBackend を継承しています。これらのメソッドに関する詳細については、このスーパークラスを参照してください。
トークン化の形式は、ソース言語の文書に対しては<tokens> <eos> <language code>であり、`<language code>
例:
>>> from transformers import NllbTokenizer
>>> tokenizer = NllbTokenizer.from_pretrained(
... "facebook/nllb-200-distilled-600M", src_lang="eng_Latn", tgt_lang="fra_Latn"
... )
>>> example_english_phrase = " UN Chief Says There Is No Military Solution in Syria"
>>> expected_translation_french = "Le chef de l'ONU affirme qu'il n'y a pas de solution militaire en Syrie."
>>> inputs = tokenizer(example_english_phrase, text_target=expected_translation_french, return_tensors="pt")特殊トークンをソース言語の設定にリセットします。
- レガシーモードでは: プレフィックスなし、サフィックスは[eos, src_lang_code]です。
- デフォルトモードでは: プレフィックス=[src_lang_code]、サフィックス=[eos]
特殊トークンをターゲット言語の設定にリセットします。
- レガシーモードでは: プレフィックスなし、サフィックスは[eos, tgt_lang_code]。
- デフォルトモードでは: プレフィックス=[tgt_lang_code]、サフィックス=[eos]