# NLLB-MOE

## 概要

NLLBモデルは、Marta R. Costa-jussà、James Cross、Onur Çelebi、Maha Elbayad、Kenneth Heafield、Kevin Heffernan、Elahe Kalbassi、Janice Lam、Daniel Licht、Jean Maillard、Anna Sun、Skyler Wang、Guillaume Wenzek、Al Youngblood、Bapi Akula、Loic Barrault、Gabriel Mejia Gonzalez、Prangthip Hansanti、John Hoffman、Semarley Jarrett、Kaushik Ram Sadagopan、Dirk Rowe、Shannon Spruit、Chau Tran、Pierre Andrews、Necip Fazil Ayan、Shruti Bhosale、Sergey Edunov、Angela Fan、Cynthia Gao、Vedanuj Goswami、Francisco Guzmán、Philipp Koehn、Alexandre Mourachko、Christophe Ropers、Safiyyah Saleem、Holger Schwenk、およびJeff Wangによる[No Language Left Behind: Scaling Human-Centered Machine Translation](https://huggingface.co/papers/2207.04672)で発表されました。

この論文の要旨は以下の通りです。

*言語の壁を世界的に排除するという目標を原動力に、機械翻訳は今日、人工知能研究の主要な焦点として確立されています。しかし、こうした取り組みは少数の言語に集中しており、大半を占める低リソース言語が置き去りにされてきました。倫理的な配慮を踏まえつつ、安全で高品質な結果を保証しながら、200言語の壁を打ち破るには何が必要でしょうか。No Language Left Behind では、まず母語話者との探索的インタビューを通じて低リソース言語の翻訳支援の必要性を文脈化し、この課題に取り組みました。その後、低リソース言語と高リソース言語間の性能差を縮小することを目的としたデータセットとモデルを作成しました。具体的には、低リソース言語向けに調整された新規かつ効果的なデータマイニング技術で得られたデータを用いて訓練される、Sparsely Gated Mixture of Experts に基づく条件付き計算モデルを開発しました。数千のタスクで訓練する際の過学習に対抗するため、複数のアーキテクチャおよび訓練の改善を提案します。さらに、人間による翻訳ベンチマークである Flores-200 を用いて 40,000 以上の異なる翻訳方向の性能を評価し、Flores-200 に含まれるすべての言語をカバーする新規の毒性ベンチマークと人間による評価を組み合わせることで、翻訳の安全性を評価しました。当社のモデルは、従来の最良の結果と比較して BLEU が 44% 向上しており、普遍的な翻訳システムの実現に向けた重要な基盤を築いています。*

このモデルは[Arthur Zucker](https://huggingface.co/ArthurZ)によって提供されました。元のコードは[こちら](https://github.com/facebookresearch/fairseq)で確認できます。

## 使用のコツ

- M2M100ForConditionalGeneration は、NLLB と NLLB MoE の両方のベースモデルです
- NLLB-MoEはNLLBモデルと非常に似ていますが、そのフィードフォワード層はSwitchTransformersの実装に基づいています。
- トークナイザーは、NLLBモデルと同じです。

## SwitchTransformersとの実装上の違い

最も大きな違いは、トークンのルーティング方法です。NLLB-MoE は `top-2-gate` を使用しており、これは各入力に対して、ゲーティングネットワークからの予測確率が最も高い上位 2 つのエクスパートのみが選択され、残りのエクスパートは無視されることを意味します。`SwitchTransformers` では、top-1 の確率のみが計算されるため、トークンが転送される確率は低くなります。さらに、トークンがどのエクスパートにもルーティングされない場合、`SwitchTransformers` は変更されていない隠れ状態を依然として加算します（残差接続のようなものです）。一方、`NLLB` の top-2 ルーティング機構では、それらはマスクされます。

## NLLB-MoEでの生成

利用可能なチェックポイントには約350GBのストレージが必要です。マシンに十分なRAMがない場合は、`accelerate`を使用してください。

ターゲットテキストを生成する際は、`forced_bos_token_id`をターゲット言語のIDに設定します。以下の例では、*facebook/nllb-200-distilled-600M*モデルを使用して英語からフランス語への翻訳を行う方法を示しています。

フランス語にはBCP-47コード`fra_Latn`を使用していることに注意してください。Flores 200データセットのすべての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-moe-54b")
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-moe-54b", device_map="auto")

article = "Previously, Ring's CEO, Jamie Siminoff, remarked the company started when his doorbell wasn't audible from his shop in his garage."
inputs = tokenizer(article, return_tensors="pt").to(model.device)

translated_tokens = model.generate(
    **inputs, forced_bos_token_id=tokenizer.lang_code_to_id["fra_Latn"], max_length=50
)
tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
"Auparavant, le PDG de Ring, Jamie Siminoff, a fait remarquer que la société avait commencé lorsque sa sonnette n'était pas audible depuis son magasin dans son garage."
```

### 英語以外の言語から生成

English (`eng_Latn`) が翻訳元の既定の言語として設定されています。別の言語から翻訳したい場合は、トークナイザーの初期化における `src_lang` キーワード引数に BCP-47 コードを指定してください。

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

```python
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-moe-54b", src_lang="ron_Latn")
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-moe-54b", device_map="auto")

article = "Şeful ONU spune că nu există o soluţie militară în Siria"
inputs = tokenizer(article, return_tensors="pt").to(model.device)

translated_tokens = model.generate(
    **inputs, forced_bos_token_id=tokenizer.lang_code_to_id["deu_Latn"], max_length=30
)
tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
```

## リソース

- [翻訳タスクガイド](../tasks/translation)
- [要約タスクガイド](../tasks/summarization)

## NllbMoeConfig[[transformers.NllbMoeConfig]]

#### transformers.NllbMoeConfig[[transformers.NllbMoeConfig]]

```python
transformers.NllbMoeConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, is_encoder_decoder: bool = True, vocab_size: int = 128112, max_position_embeddings: int = 1024, encoder_layers: int = 12, encoder_ffn_dim: int = 4096, encoder_attention_heads: int = 16, decoder_layers: int = 12, decoder_ffn_dim: int = 4096, decoder_attention_heads: int = 16, encoder_layerdrop: float | int = 0.05, decoder_layerdrop: float | int = 0.05, use_cache: bool = True, activation_function: str = 'relu', d_model: int = 1024, dropout: float | int = 0.1, attention_dropout: float | int = 0.1, activation_dropout: float | int = 0.0, init_std: float = 0.02, decoder_start_token_id: int | None = 2, scale_embedding: bool = True, router_bias: bool = False, router_dtype: typing.Literal['float32', 'float16', 'bfloat16'] = 'float32', router_ignore_padding_tokens: bool = False, num_experts: int = 128, expert_capacity: int = 64, encoder_sparse_step: int = 4, decoder_sparse_step: int = 4, router_z_loss_coef: float = 0.001, router_aux_loss_coef: float = 0.001, second_expert_policy: str = 'all', normalize_router_prob_before_dropping: bool = False, batch_prioritized_routing: bool = False, moe_eval_capacity_token_fraction: float = 1.0, moe_token_dropout: float | int = 0.2, pad_token_id: int | None = 1, bos_token_id: int | None = 0, eos_token_id: int | list[int] | None = 2, tie_word_embeddings: bool = True, output_router_logits: bool = False)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb_moe/configuration_nllb_moe.py#L26)

**パラメータ:**

is_encoder_decoder (`bool`、*任意*、デフォルトは`True`) : モデルがエンコーダー/デコーダーとして使用されるかどうかを示します。

vocab_size (`int`、*任意*、デフォルトは`128112`) : モデルの語彙サイズ。`input_ids`で表現できるトークンの種類数を定義します。

max_position_embeddings (`int`、*任意*、デフォルトは`1024`) : このモデルが使用される可能性のある最大シーケンス長。

encoder_layers (`int`、*任意*、デフォルトは`12`) : Transformerエンコーダーの隠れ層の数。設定されていない場合は、`num_layers`と同じ値が使用されます。

encoder_ffn_dim (`int`、*任意*、デフォルトは `4096`) : エンコーダー内の「intermediate」（feed-forward と呼ばれることが多い）層の次元数。

encoder_attention_heads (`int`、*任意*、デフォルトは`16`) : Transformerエンコーダーの各アテンション層におけるアテンションヘッドの数。

decoder_layers (`int`、*任意*、デフォルトは`12`) : Transformer デコーダーの隠れ層の数。設定されていない場合は、`num_layers` と同じ値が使用されます。

decoder_ffn_dim (`int`、*任意*、デフォルトは `4096`) : デコーダー内の「intermediate」（feed-forward と呼ばれることが多い）層の次元数。

decoder_attention_heads (`int`、*任意*、デフォルトは`16`) : Transformerデコーダーの各アテンション層におけるアテンションヘッドの数。

encoder_layerdrop (`Union[float, int]`、*任意*、デフォルトは`0.05`) : エンコーダーの LayerDrop 確率です。詳細については、[LayerDrop の論文](see https://huggingface.co/papers/1909.11556)を参照してください。

decoder_layerdrop (`Union[float, int]`、*任意*、デフォルトは`0.05`) : デコーダーの LayerDrop 確率です。詳細については、[LayerDrop の論文](see https://huggingface.co/papers/1909.11556)を参照してください。

use_cache (`bool`、*任意*、デフォルトは `True`) : モデルが最後のキー/バリューアテンションを返すかどうか（すべてのモデルで利用されるわけではありません）。`config.is_decoder=True` の場合、またはモデルがデコーダー専用の生成モデルである場合にのみ関連します。

activation_function (`str`、*任意*、デフォルトは `relu`) : デコーダーで使用する非線形活性化関数（関数または文字列）。例えば、`"gelu"`、`"relu"`、`"silu"` など。

d_model (`int`、*任意*、デフォルトは`1024`) : エンコーダ層とプーラー層のサイズ。

dropout (`Union[float, int]`、*任意*、デフォルトは`0.1`) : すべての dropout 層の比率。

attention_dropout (`Union[float, int]`、*任意*、デフォルトは`0.1`) : 注意確率のドロップアウト率。

activation_dropout (`Union[float, int]`、*任意*、デフォルトは`0.0`) : 全結合層内の活性化に対する dropout 率。

init_std (`float`、*任意*、デフォルトは`0.02`) : すべての重み行列を初期化するためのtruncated_normal_initializerの標準偏差です。

decoder_start_token_id (`int`、*optional*、デフォルトは`2`) : エンコーダーデコーダーモデルが`bos`以外のトークンでデコーディングを開始する場合、そのトークンのID。

scale_embedding (`bool`、*任意*、デフォルトは`True`) : sqrt(d_model) で割って埋め込みをスケーリングするかどうか。

router_bias (`bool`, *任意*, デフォルトは `False`) : ルーターの分類器にバイアスを含めるかどうか。

router_dtype (`str`、*任意*、デフォルトは`"float32"`) : ルーターに使用される`dtype`です。[論文](https://huggingface.co/papers/2101.03961)の*選択的精度*に関する議論で指定されている通り、`dtype`は`"float32"`のままにしておくことが望ましいです。

router_ignore_padding_tokens (`bool`、*任意*、デフォルトは`False`) : ルーティング時にパディングトークンを無視するかどうか。`False`の場合、パディングトークンはどのエキスパートにもルーティングされません。

num_experts (`int`、*optional*、デフォルトは`128`) : MoE層におけるルーティング対象のエクスパート数。

expert_capacity (`int`、*optional*、デフォルトは 64) : 各エキスパートに格納できるトークンの数。

encoder_sparse_step (`int`、*optional*、デフォルトは 4) : エンコーダーにおけるスパース層の頻度です。4 を指定すると、4 層に 1 層がスパース層になります。

decoder_sparse_step (`int`, *optional*, デフォルトは 4) : デコーダーにおけるスパース層の頻度です。4 は、4 層に 1 層がスパース層であることを意味します。

router_z_loss_coef (`float`、*任意*、デフォルトは`0.001`) : ルーターのz-lossの係数です。大きなルーターのlogitsをペナルティすることで、トレーニングの安定性を向上させます。

router_aux_loss_coef (`float`、*任意*、デフォルトは `0.001`) : 補助的なロードバランシング損失の係数です。MoE モデルにおける不均一なエキスパートルーティングをペナルティするために使用されます。

second_expert_policy (`str`、*任意*、デフォルトは`"all"`) : 各トークンについて、第2のエクスパートにサンプリングされる確率をサンプリングする際に使用されるポリシー。

normalize_router_prob_before_dropping (`bool`、*任意*、デフォルトは`True`) : エキスパートの容量に基づくマスク（capacity dropping）を適用する前に、ルーターの確率を正規化するか否かを指定します。

batch_prioritized_routing (`bool`、*任意*、デフォルトは`True`) : 容量ドロップの前に、ルーターの確率に基づいてトークンを並べ替えるかどうか。これにより、確率が最も高いトークンは、シーケンス内でより後方のトークンよりも先にルーティングされます。

moe_eval_capacity_token_fraction (`float`、*optional*、デフォルトは 1.0) : 検証時のキャパシティとして使用するトークンの割合です。負の値を設定した場合、学習時と同じ値が使用されます。値の範囲は (0.0, 1.0] である必要があります。

moe_token_dropout (`float`、*optional*、デフォルトは 0.2) : MoE エキスパート出力マスキング (EOM) のマスキング率。これはエキスパート出力に対して Dropout2d を適用することで実装されます。

pad_token_id (`int`, *任意*, デフォルトは `1`) : 語彙内でパディングに使用されるトークン ID。

bos_token_id (`int`, *optional*, デフォルトは `0`) : 語彙内でストリームの開始に使用されるトークン ID。

eos_token_id (`Union[int, list[int]]`、*任意*、デフォルトは`2`) : 語彙内でストリーム終了に使用されるトークン ID。

tie_word_embeddings (`bool`、*任意*、デフォルトは`True`) : モデルの`tied_weights_keys`マッピングに従って重み埋め込みを共有するかどうか。

output_router_logits (`bool`, *任意*, デフォルトは `False`) : モデルがルーターのロジスティック値を返すかどうかを指定します。これを有効にすると、モデルはロードバランシングロスやルーターのzロスを含む補助ロスの出力も可能になります。

これは Nllb MoeModel の設定を保存するための設定クラスです。指定された引数に基づいて Nllb Moe モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、[facebook/nllb-moe-54b](https://huggingface.co/facebook/nllb-moe-54b) と同様の設定が得られます。

設定オブジェクトは [PreTrainedConfig](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig) を継承し、モデルの出力を制御するために使用できます。詳細については、[PreTrainedConfig](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig) のドキュメントを参照してください。

例:

```python
>>> from transformers import NllbMoeModel, NllbMoeConfig

>>> # Initializing a NllbMoe facebook/nllb-moe-54b style configuration
>>> configuration = NllbMoeConfig()

>>> # Initializing a model from the facebook/nllb-moe-54b style configuration
>>> model = NllbMoeModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## NllbMoeTop2Router[[transformers.NllbMoeTop2Router]]

#### transformers.NllbMoeTop2Router[[transformers.NllbMoeTop2Router]]

```python
transformers.NllbMoeTop2Router(config: NllbMoeConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb_moe/modeling_nllb_moe.py#L168)

トークンを用いたルーターは、上位2つのエキスパートへの割り当てを選択します。

このルーターは、fairseqリポジトリのNLLB-MoEと同じメカニズムを使用しています。アイテムはrouter_probsでソートされ、その後、選択されたエキスパートにルーティングされます。ただし、エキスパートのexpert_capacityに達した時点でルーティングは停止します。**各トークンが必ずエキスパートによって処理されることや、各エキスパートが少なくとも1つのトークンを受け取ることが保証されるわけではありません。**

更新されない状態がマスクされることを保証するために、ルーターの重み結合も返されます。

#### route_tokens[[transformers.NllbMoeTop2Router.route_tokens]]

```python
route_tokens(router_logits: Tensor, input_dtype: dtype = torch.float32, padding_mask: typing.Optional[torch.LongTensor] = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb_moe/modeling_nllb_moe.py#L209)

各エキスパートの`dispatch_mask`と`dispatch_weights`を計算します。マスクはエキスパートのキャパシティに合わせて調整されます。

#### forward[[transformers.NllbMoeTop2Router.forward]]

```python
forward(hidden_states: Tensor, padding_mask: typing.Optional[torch.LongTensor] = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb_moe/modeling_nllb_moe.py#L294)

**パラメータ:**

hidden_states (`torch.Tensor`) : (batch_size, sequence_length, hidden_dim) の形状のテンソル。ルーターの確率がこのテンソルから計算されます。

**戻り値:** top_1_mask (`torch.Tensor`、形状 (batch_size, sequence_length))

[t0]shape [batch_size, sequence_length] のインデックステンソル。ルーターの top1 確率を使用して、各トークンに選択されたエキスパートに対応します。[/t0] router_probabilities (`torch.Tensor` of shape (batch_size, sequence_length, nump_experts)): shape (batch_size, sequence_length, num_experts) のテンソル。各トークンとエキスパートの確率に対応します。トークンをエキスパートにルーティングするために使用されます。 router_logits (`torch.Tensor` of shape (batch_size, sequence_length))): shape (batch_size, sequence_length, num_experts) の logits テンソル。生のルーター logits に対応します。これは後でルーターの z-loss を計算するために使用されます。

hidden statesは、routerの確率の計算を簡略化するためにリシェイプされます（各expertsの重みを結合します）。

## NllbMoeSparseMLP[[transformers.NllbMoeSparseMLP]]

#### transformers.NllbMoeSparseMLP[[transformers.NllbMoeSparseMLP]]

```python
transformers.NllbMoeSparseMLP(config: NllbMoeConfig, ffn_dim: int)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb_moe/modeling_nllb_moe.py#L370)

NLLB-MoE のスパース MLP モジュールの実装です。

#### forward[[transformers.NllbMoeSparseMLP.forward]]

```python
forward(hidden_states: Tensor, padding_mask: typing.Optional[torch.Tensor] = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb_moe/modeling_nllb_moe.py#L381)

## NllbMoeModel[[transformers.NllbMoeModel]]

#### transformers.NllbMoeModel[[transformers.NllbMoeModel]]

```python
transformers.NllbMoeModel(config: NllbMoeConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb_moe/modeling_nllb_moe.py#L863)

**パラメータ:**

config ([NllbMoeConfig](/docs/transformers/main/ja/model_doc/nllb-moe#transformers.NllbMoeConfig)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを確認してください。

特定のヘッドを上に載せずに、生のhidden-statesを出力する素のNllb Moe Model。

このモデルは [PreTrainedModel](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel) を継承しています。ライブラリがすべてのモデルに対して実装している汎用的なメソッド（ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど）については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchの[torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)のサブクラスでもあります。通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

#### forward[[transformers.NllbMoeModel.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, decoder_input_ids: typing.Optional[torch.LongTensor] = None, decoder_attention_mask: typing.Optional[torch.LongTensor] = None, encoder_outputs: tuple[tuple[torch.FloatTensor]] | None = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.FloatTensor] = None, decoder_inputs_embeds: typing.Optional[torch.FloatTensor] = None, use_cache: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb_moe/modeling_nllb_moe.py#L890)

**パラメータ:**

input_ids (`torch.LongTensor`、shape `(batch_size, sequence_length)`、*任意*) : 語彙における入力シーケンスのトークンインデックスです。デフォルトでは、パディングは無視されます。インデックスは [AutoTokenizer](/docs/transformers/main/ja/model_doc/auto#transformers.AutoTokenizer) を使用して取得できます。詳細については、[PreTrainedTokenizer.encode()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) および [PreTrainedTokenizer.__call__()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) を参照してください。 [入力IDとは何ですか？](../glossary#input-ids)

attention_mask (`torch.Tensor`、shape `(batch_size, sequence_length)`、*任意*) : padding トークンのインデックスに対する attention を回避するためのマスクです。マスクの値は `[0, 1]` から選択されます:  - **マスクされない**トークンは 1、- **マスクされる**トークンは 0。  [attention マスクとは?](../glossary#attention-mask)

decoder_input_ids (`torch.LongTensor`、shape `(batch_size, target_sequence_length)`、*任意*) : 語彙におけるデコーダー入力シーケンスのトークンインデックス。[AutoTokenizer](/docs/transformers/main/ja/model_doc/auto#transformers.AutoTokenizer) を使用してインデックスを取得できます。詳細は [PreTrainedTokenizer.encode()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) および [PreTrainedTokenizer.__call__()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) を参照してください。[デコーダー入力 ID とは？](../glossary#decoder-input-ids)

decoder_attention_mask (`torch.LongTensor`、shape `(batch_size, target_sequence_length)`、*optional*) : 特定のトークンインデックスに対するアテンションの実行を回避するためのマスク。デフォルトでは、モデルが未来を予測する際に過去の入力のみを参照できるようにするため、causal mask が使用されます。

encoder_outputs (`tuple[tuple[torch.FloatTensor]]`, *任意*) : (`last_hidden_state`, *任意*: `hidden_states`, *任意*: `attentions`) のタプルです。`last_hidden_state` は形状 `(batch_size, sequence_length, hidden_size)` を持ち、エンコーダーの最終層の出力における隠れ状態のシーケンスです。*任意*) デコーダーのクロスアテンションで使用されます。

past_key_values (`~cache_utils.Cache`, *任意*) : 逐次デコードを高速化するために使用できる、事前計算された hidden-states（self-attention ブロックおよび cross-attention ブロック内の key と value）です。通常、`use_cache=True` または `config.use_cache=True` の場合、モデルがデコードの以前の段階で返した `past_key_values` で構成されます。入力として許可されるのは [Cache](/docs/transformers/main/ja/internal/generation_utils#transformers.Cache) インスタンスのみです。[kv cache ガイド](https://huggingface.co/docs/transformers/en/kv_cache)を参照してください。`past_key_values` が渡されない場合、デフォルトで [DynamicCache](/docs/transformers/main/ja/internal/generation_utils#transformers.DynamicCache) が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。`past_key_values` を使用する場合は、すべての `input_ids`（形状 `(batch_size, sequence_length)`）の代わりに、このモデルに過去の key value 状態が与えられていない未処理の `input_ids`（形状 `(batch_size, unprocessed_length)`）のみを入力する必要があります。

inputs_embeds (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*任意*) : `input_ids` を渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込み参照行列よりも、`input_ids` のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。

decoder_inputs_embeds (`torch.FloatTensor`、shape `(batch_size, target_sequence_length, hidden_size)`、*任意*) : `decoder_input_ids` を渡す代わりに、埋め込み表現を直接渡すこともできます。`past_key_values` を使用する場合、`decoder_inputs_embeds` の最後の部分のみを入力すれば十分です（`past_key_values` を参照）。モデル内部の埋め込みルックアップ行列よりも、`decoder_input_ids` のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 `decoder_input_ids` と `decoder_inputs_embeds` の両方が設定されていない場合、`decoder_inputs_embeds` は `inputs_embeds` の値を採ります。

use_cache (`bool`, *任意*) : `True`に設定すると、`past_key_values`のキーバリュー状態が返され、デコーディングの高速化に利用できます（`past_key_values`を参照）。

**戻り値:** `Seq2SeqMoEModelOutput` または `tuple(torch.FloatTensor)`

`None` や入力に応じて、さまざまな要素で構成される`Seq2SeqMoEModelOutput`、または`torch.FloatTensor`のタプル（`return_dict=False`が渡された場合、または`config.return_dict=False`の場合）。

[NllbMoeModel](/docs/transformers/main/ja/model_doc/nllb-moe#transformers.NllbMoeModel)のforwardメソッドは、`__call__`特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく`Module`インスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを無視してしまいます。

- **last_hidden_state** (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`) -- モデルのデコーダーの最終層の出力における、隠れ状態のシーケンス。

  `past_key_values`が使用されている場合、出力されるのは、形状`(batch_size, 1, hidden_size)`のシーケンスの最後の隠れ状態のみです。
- **past_key_values** (`EncoderDecoderCache`、*任意*、`use_cache=True` が渡された場合または `config.use_cache=True` の場合に返されます) -- [EncoderDecoderCache](/docs/transformers/main/ja/internal/generation_utils#transformers.EncoderDecoderCache) のインスタンスです。詳細については、[kv cache ガイド](https://huggingface.co/docs/transformers/en/kv_cache)を参照してください。

  逐次デコーディングを高速化するために使用できる（`past_key_values` 入力参照）、事前計算済みの隠れ状態（自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー）が含まれます。
- **decoder_hidden_states** (`tuple(torch.FloatTensor)`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返される) -- `torch.FloatTensor` のタプル（モデルに埋め込み層がある場合はその出力用 + 各層の出力用）で、形状は `(batch_size, sequence_length, hidden_size)` です。

  各層の出力におけるデコーダーのHidden-states、および任意の初期埋め込み出力。
- **decoder_attentions** (`tuple(torch.FloatTensor)`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）で、形状は `(batch_size, num_heads, sequence_length, sequence_length)` です。

  自己アテンションヘッドにおける加重平均を計算するために使用される、アテンションのsoftmax後のデコーダーのアテンション重み。
- **decoder_router_logits** (`tuple(torch.FloatTensor)`、*optional*、`output_router_logits=True` が渡された場合、または `config.add_router_probs=True` の場合に返されます) -- 各層に対応する `torch.FloatTensor` のタプルで、形状は `(batch_size, sequence_length, num_experts)` です。

  デコーダーモデルのルーターロジット。Mixture of Expertsモデルの補助損失を計算するために使用されます。
- **cross_attentions** (`tuple(torch.FloatTensor)`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)`。

  クロスアテンション層のアテンション重みは、アテンションのsoftmax適用後に計算され、クロスアテンションヘッドにおける加重平均の計算に使用されます。
- **encoder_last_hidden_state** (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*optional*) -- モデルのエンコーダーの最終層の出力における、隠れ状態のシーケンス。
- **encoder_hidden_states** (`tuple(torch.FloatTensor)`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返されます) -- `torch.FloatTensor` のタプル（埋め込み層を持つモデルの場合、埋め込みの出力用が 1 つ、各層の出力用が 1 つずつ）で、形状は `(batch_size, sequence_length, hidden_size)` です。

  各層の出力におけるエンコーダーのHidden-states、および任意の初期埋め込み出力。
- **encoder_attentions** (`tuple(torch.FloatTensor)`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)`。

  アテンションのsoftmaxを適用した後のエンコーダーのアテンション重み。自己アテンションヘッドにおける加重平均の計算に使用されます。
- **encoder_router_logits** (`tuple(torch.FloatTensor)`、*optional*、`output_router_logits=True` が渡された場合、または `config.add_router_probs=True` の場合に返されます) -- 各層に対応する `torch.FloatTensor` のタプルで、形状は `(batch_size, sequence_length, num_experts)` です。

  エンコーダーモデルのルーターロジット。スパースモジュールの補助損失およびz_lossの計算に使用されます。

## NllbMoeForConditionalGeneration[[transformers.NllbMoeForConditionalGeneration]]

#### transformers.NllbMoeForConditionalGeneration[[transformers.NllbMoeForConditionalGeneration]]

```python
transformers.NllbMoeForConditionalGeneration(config: NllbMoeConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb_moe/modeling_nllb_moe.py#L1042)

**パラメータ:**

config ([NllbMoeConfig](/docs/transformers/main/ja/model_doc/nllb-moe#transformers.NllbMoeConfig)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを確認してください。

言語モデリングヘッドを備えたNllbMoeモデル。要約に使用できます。

このモデルは [PreTrainedModel](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel) を継承しています。ライブラリがすべてのモデルに対して実装している汎用的なメソッド（ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど）については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchの[torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)のサブクラスでもあります。通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

#### forward[[transformers.NllbMoeForConditionalGeneration.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, decoder_input_ids: typing.Optional[torch.LongTensor] = None, decoder_attention_mask: typing.Optional[torch.LongTensor] = None, encoder_outputs: tuple[tuple[torch.FloatTensor]] | None = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.FloatTensor] = None, decoder_inputs_embeds: typing.Optional[torch.FloatTensor] = None, labels: typing.Optional[torch.LongTensor] = None, use_cache: bool | None = None, output_router_logits: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb_moe/modeling_nllb_moe.py#L1058)

**パラメータ:**

input_ids (`torch.LongTensor`、shape `(batch_size, sequence_length)`、*任意*) : 語彙における入力シーケンスのトークンインデックスです。デフォルトでは、パディングは無視されます。インデックスは [AutoTokenizer](/docs/transformers/main/ja/model_doc/auto#transformers.AutoTokenizer) を使用して取得できます。詳細については、[PreTrainedTokenizer.encode()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) および [PreTrainedTokenizer.__call__()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) を参照してください。 [入力IDとは何ですか？](../glossary#input-ids)

attention_mask (`torch.Tensor`、shape `(batch_size, sequence_length)`、*任意*) : padding トークンのインデックスに対する attention を回避するためのマスクです。マスクの値は `[0, 1]` から選択されます:  - **マスクされない**トークンは 1、- **マスクされる**トークンは 0。  [attention マスクとは?](../glossary#attention-mask)

decoder_input_ids (`torch.LongTensor`、shape `(batch_size, target_sequence_length)`、*任意*) : 語彙におけるデコーダー入力シーケンスのトークンインデックス。[AutoTokenizer](/docs/transformers/main/ja/model_doc/auto#transformers.AutoTokenizer) を使用してインデックスを取得できます。詳細は [PreTrainedTokenizer.encode()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) および [PreTrainedTokenizer.__call__()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) を参照してください。[デコーダー入力 ID とは？](../glossary#decoder-input-ids)

decoder_attention_mask (`torch.LongTensor`、shape `(batch_size, target_sequence_length)`、*optional*) : 特定のトークンインデックスに対するアテンションの実行を回避するためのマスク。デフォルトでは、モデルが未来を予測する際に過去の入力のみを参照できるようにするため、causal mask が使用されます。

encoder_outputs (`tuple[tuple[torch.FloatTensor]]`, *任意*) : (`last_hidden_state`, *任意*: `hidden_states`, *任意*: `attentions`) のタプルです。`last_hidden_state` は形状 `(batch_size, sequence_length, hidden_size)` を持ち、エンコーダーの最終層の出力における隠れ状態のシーケンスです。*任意*) デコーダーのクロスアテンションで使用されます。

past_key_values (`~cache_utils.Cache`, *任意*) : 逐次デコードを高速化するために使用できる、事前計算された hidden-states（self-attention ブロックおよび cross-attention ブロック内の key と value）です。通常、`use_cache=True` または `config.use_cache=True` の場合、モデルがデコードの以前の段階で返した `past_key_values` で構成されます。入力として許可されるのは [Cache](/docs/transformers/main/ja/internal/generation_utils#transformers.Cache) インスタンスのみです。[kv cache ガイド](https://huggingface.co/docs/transformers/en/kv_cache)を参照してください。`past_key_values` が渡されない場合、デフォルトで [DynamicCache](/docs/transformers/main/ja/internal/generation_utils#transformers.DynamicCache) が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。`past_key_values` を使用する場合は、すべての `input_ids`（形状 `(batch_size, sequence_length)`）の代わりに、このモデルに過去の key value 状態が与えられていない未処理の `input_ids`（形状 `(batch_size, unprocessed_length)`）のみを入力する必要があります。

inputs_embeds (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*任意*) : `input_ids` を渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込み参照行列よりも、`input_ids` のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。

decoder_inputs_embeds (`torch.FloatTensor`、shape `(batch_size, target_sequence_length, hidden_size)`、*任意*) : `decoder_input_ids` を渡す代わりに、埋め込み表現を直接渡すこともできます。`past_key_values` を使用する場合、`decoder_inputs_embeds` の最後の部分のみを入力すれば十分です（`past_key_values` を参照）。モデル内部の埋め込みルックアップ行列よりも、`decoder_input_ids` のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 `decoder_input_ids` と `decoder_inputs_embeds` の両方が設定されていない場合、`decoder_inputs_embeds` は `inputs_embeds` の値を採ります。

labels (`torch.LongTensor`、形状 `(batch_size, sequence_length)`、*任意*) : マスク言語モデリング損失を計算するためのラベル。インデックスは `[0, ..., config.vocab_size]` の範囲内であるか、-100 である必要があります（`input_ids` のドキュメント文字列を参照）。インデックスが `-100` に設定されたトークンは無視（マスク）され、損失は `[0, ..., config.vocab_size]` の範囲内のラベルを持つトークンに対してのみ計算されます。

use_cache (`bool`, *任意*) : `True`に設定すると、`past_key_values`のキーバリュー状態が返され、デコーディングの高速化に利用できます（`past_key_values`を参照）。

output_router_logits (`bool`, *任意*) : すべてのルーターの logits を返すかどうか。ルーター損失の計算に有用であり、推論時には返すべきではありません。

**戻り値:** `Seq2SeqMoEOutput` または `tuple(torch.FloatTensor)`

`Seq2SeqMoEOutput`、または`torch.FloatTensor`のタプル（`return_dict=False`が渡された場合、または`config.return_dict=False`の場合）。[NllbMoeConfig](/docs/transformers/main/ja/model_doc/nllb-moe#transformers.NllbMoeConfig)や入力に応じて、さまざまな要素で構成されます。

[NllbMoeForConditionalGeneration](/docs/transformers/main/ja/model_doc/nllb-moe#transformers.NllbMoeForConditionalGeneration)のforwardメソッドは、`__call__`特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく`Module`インスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを無視してしまいます。

- **loss** (`torch.FloatTensor`、shape `(1,)`、*optional*、`labels` が指定された場合に返されます) -- 言語モデリングの損失。
- **logits** (`torch.FloatTensor`、shape `(batch_size, sequence_length, config.vocab_size)`) -- 言語モデリングヘッドの予測スコア（SoftMax 適用前の各語彙トークンのスコア）。
- **past_key_values** (`EncoderDecoderCache`、*任意*、`use_cache=True` が渡された場合または `config.use_cache=True` の場合に返されます) -- [EncoderDecoderCache](/docs/transformers/main/ja/internal/generation_utils#transformers.EncoderDecoderCache) のインスタンスです。詳細については、[kv cache ガイド](https://huggingface.co/docs/transformers/en/kv_cache)を参照してください。

  逐次デコーディングを高速化するために使用できる（`past_key_values` 入力参照）、事前計算済みの隠れ状態（自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー）が含まれます。
- **decoder_hidden_states** (`tuple(torch.FloatTensor)`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返される) -- `torch.FloatTensor` のタプル（モデルに埋め込み層がある場合はその出力用 + 各層の出力用）で、形状は `(batch_size, sequence_length, hidden_size)` です。

  各層の出力および初期埋め込み出力における、デコーダーの隠れ状態。
- **decoder_attentions** (`tuple(torch.FloatTensor)`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）で、形状は `(batch_size, num_heads, sequence_length, sequence_length)` です。

  自己アテンションヘッドにおける加重平均を計算するために使用される、アテンションのsoftmax後のデコーダーのアテンション重み。
- **decoder_router_logits** (`tuple(torch.FloatTensor)`、*optional*、`output_router_logits=True` が渡された場合、または `config.add_router_probs=True` の場合に返されます) -- 各層に対応する `torch.FloatTensor` のタプルで、形状は `(batch_size, sequence_length, num_experts)` です。

  デコーダーモデルのルーターロジット。Mixture of Expertsモデルの補助損失を計算するために使用されます。
- **cross_attentions** (`tuple(torch.FloatTensor)`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)`。

  クロスアテンション層のアテンション重みは、アテンションのsoftmax適用後に計算され、クロスアテンションヘッドにおける加重平均の計算に使用されます。
- **encoder_last_hidden_state** (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*optional*) -- モデルのエンコーダーの最終層の出力における、隠れ状態のシーケンス。
- **encoder_hidden_states** (`tuple(torch.FloatTensor)`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返されます) -- `torch.FloatTensor` のタプル（埋め込み層を持つモデルの場合、埋め込みの出力用が 1 つ、各層の出力用が 1 つずつ）で、形状は `(batch_size, sequence_length, hidden_size)` です。

  各層の出力および初期埋め込み出力におけるエンコーダーの隠れ状態。
- **encoder_attentions** (`tuple(torch.FloatTensor)`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)`。

  アテンションのsoftmaxを適用した後のエンコーダーのアテンション重み。自己アテンションヘッドにおける加重平均の計算に使用されます。
- **encoder_router_logits** (`tuple(torch.FloatTensor)`、*optional*、`output_router_logits=True` が渡された場合、または `config.add_router_probs=True` の場合に返されます) -- 各層に対応する `torch.FloatTensor` のタプルで、形状は `(batch_size, sequence_length, num_experts)` です。

  エンコーダーモデルのルーターロジット。Mixture of Expertsモデルにおいて、補助損失およびz_lossを計算するために使用されます。

例:

```python
```

