# NLLB

    
        
        
    

## 概要

[NLLB: No Language Left Behind](https://huggingface.co/papers/2207.04672)は多言語翻訳モデルです。低資源言語向けに調整されたデータマイニング技術を用いたデータで学習されており、200以上の言語をサポートしています。NLLBは、Sparsely Gated Mixture of Expertsを用いた条件付き計算アーキテクチャを備えています。

すべてのオリジナルのNLLBチェックポイントは、[AI at Meta](https://huggingface.co/facebook/models?search=nllb)組織の下で見つけることができます。

> [!TIP]
> このモデルは[Lysandre](https://huggingface.co/lysandre)によって提供されました。NLLBを異なる翻訳タスクに適用する方法のより多くの例については、右側のサイドバーにあるNLLBモデルをクリックしてください。

以下の例では、[Pipeline](/docs/transformers/main/ja/main_classes/pipelines#transformers.Pipeline)または[AutoModel](/docs/transformers/main/ja/model_doc/auto#transformers.AutoModel)クラスを使用してテキストを翻訳する方法を示しています。

```python
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")
```

```python
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](../quantization/overview) の概要を参照してください。

以下の例では、[bitsandbytes](../quantization/bitsandbytes)を使用して重みを8ビットに量子化します。

```python
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](https://github.com/huggingface/transformers/blob/main/src/transformers/utils/attention_visualizer.py#L139) を使用して、モデルが注意できるトークンと注意できないトークンをより深く理解してください。

```python
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月に更新され、ソースシーケンスの先頭にターゲット言語ではなくソース言語をプレフィックスとして付与するようになりました。これにより、ゼロショット性能が優先され、教師あり性能にはわずかなコストが生じます。

   ```python
   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]
   ```

   従来の動作に戻すには、以下のコード例を使用してください。

   ```python
   from transformers import NllbTokenizer

   tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-distilled-600M", legacy_behaviour=True)
   ```

- 英語以外の言語の場合、以下に示すように`src_lang`キーワードにその言語の[BCP-47](https://github.com/facebookresearch/flores/blob/main/flores200/README.md#languages-in-flores-200)コードを指定します。

- ルーマニア語からドイツ語への翻訳の例を以下に示します。

    ```python
    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[[transformers.NllbTokenizer]]

#### transformers.NllbTokenizer[[transformers.NllbTokenizer]]

```python
transformers.NllbTokenizer(vocab: str | dict[str, int] | None = None, merges: str | list[str] | None = None, bos_token = '<s>', eos_token = '</s>', sep_token = '</s>', cls_token = '<s>', unk_token = '<unk>', pad_token = '<pad>', mask_token = '<mask>', src_lang = None, tgt_lang = None, _spm_precompiled_charsmap: str | None = None, additional_special_tokens = None, extra_special_tokens = None, legacy_behaviour = False, **kwargs)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb/tokenization_nllb.py#L33)

**パラメータ:**

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](https://huggingface.co/docs/tokenizers/python/latest/components.html?highlight=unigram#models)に基づいています。

このトークナイザーは、[TokenizersBackend](/docs/transformers/main/ja/main_classes/tokenizer#transformers.TokenizersBackend) を継承しており、主要なメソッドの大部分がそこに含まれています。これらのメソッドに関する詳細については、このスーパークラスを参照してください。

トークナイゼーション手法は、ソース言語の文書に対して`<tokens> <eos> <language code>`、ターゲット言語の文書に対して` `です。

例:

```python
>>> 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")
```

#### set_src_lang_special_tokens[[transformers.NllbTokenizer.set_src_lang_special_tokens]]

```python
set_src_lang_special_tokens(src_lang)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb/tokenization_nllb.py#L267)

特殊トークンをソース言語の設定にリセットします。
- レガシーモードでは: プレフィックスなし、サフィックスは[eos, src_lang_code]です。
- デフォルトモードでは: プレフィックス=[src_lang_code]、サフィックス=[eos]

#### set_tgt_lang_special_tokens[[transformers.NllbTokenizer.set_tgt_lang_special_tokens]]

```python
set_tgt_lang_special_tokens(lang: str)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb/tokenization_nllb.py#L292)

特殊トークンをターゲット言語の設定にリセットします。
- レガシーモードでは: プレフィックスなし、サフィックスは[eos, tgt_lang_code]。
- デフォルトモードでは: プレフィックス=[tgt_lang_code]、サフィックス=[eos]

