# myt5

## 概要

myt5モデルは、Tomasz Limisiewicz、Terra Blevins、Hila Gonen、Orevaoghene Ahia、Luke Zettlemoyerによる[MYTE: Morphology-Driven Byte Encoding for Better and Fairer Multilingual Language Modeling](https://huggingface.co/papers/2403.10691)で提案されました。MyT5（**My**te **T5**）は、T5アーキテクチャに基づく多言語言語モデルです。このモデルは、私たちの論文で説明されている**m**orphologically-driven **byte**（**MYTE**）表現を使用しています。**MYTE**は、UTF-8エンコーディングで使われる文字とは異なり、モーフェムに対応するコードポイントを使用します。前提条件として、99言語のモーフェムインベントリを取得するために、教師なし形態素セグメンテーション（[Morfessor](https://aclanthology.org/E14-2006.pdf)）を使用しました。ただし、ハブから定義済みのモーフェムインベントリを使用する場合は、形態素セグメンテーションのステップは不要です（参照: [Tomli/myt5-base](https://huggingface.co/Tomlim/myt5-base)）。

論文の抄録は以下の通りです。

*多言語言語モデリングにおける重要な検討事項の一つは、多様な語彙や文字体系を持つ言語をどのように表現するかにあります。現在のテキストエンコーディング手法は世界のほとんどの文字体系をカバーしていますが、グローバル・ウエストの高リソース言語に偏りが見られます。その結果、リソースが不足している言語のテキストは、言語的に意味のないユニットの長い列に分割されがちです。この格差を解消するため、多様な言語間で一定のサイズを持つセグメントによって同じ情報をエンコードする新しいパラダイムを導入します。私たちのエンコーディング規約（MYTE）は形態素に基づいており、従来の手法で使用されている文字よりも、言語間のインベントリ（語彙の範囲）がよりバランスよく分布しているためです。MYTEは、分析対象の99言語すべてでより短いエンコーディングを生成し、特にヨーロッパ以外の言語やラテン文字以外の文字体系において顕著な改善が見られました。これにより、多言語LMのパフォーマンスが向上し、多様な言語にわたるパープレキシティの差が縮小されます。*

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

## MyT5Tokenizer[[transformers.MyT5Tokenizer]]

#### transformers.MyT5Tokenizer[[transformers.MyT5Tokenizer]]

```python
transformers.MyT5Tokenizer(vocab_file, eos_token = '</s>', unk_token = '<unk>', pad_token = '<pad>', extra_ids = 125, additional_special_tokens = None, **kwargs)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/myt5/tokenization_myt5.py#L133)

**パラメータ:**

vocab_file (`str`) : バイト書き換えルールを含むファイル。

eos_token (`str`、*任意*、デフォルトは `"</s>"`) : シーケンスの終了トークン。

unk_token (`str`、*任意*、デフォルトは `"<unk>"`) : 不明トークン。語彙に存在しないトークンは ID に変換できず、代わりにこのトークンが設定されます。

pad_token (`str`、*任意*、デフォルトは `"<pad>"`) : パディングに使用されるトークンです。長さの異なるシーケンスをバッチ処理する場合などに使用します。

extra_ids (`int`、*optional*、デフォルト値は 125) : センチネルとして使用するために、語彙の末尾に追加する追加 ID の数を指定します。これらのトークンは、"{%d}" が 0 から extra_ids-1 までの数値である "" としてアクセスできます。追加トークンは、語彙の末尾から先頭に向かってインデックス付けられます（"" は語彙の最後のトークンです。ByT5 の前処理と同様、詳細は[こちら](https://github.com/google-research/text-to-text-transfer-transformer/blob/9fd7b14a769417be33bc6c850f9598764913c833/t5/data/preprocessors.py#L2117)を参照してください）。

additional_special_tokens (`list[str]`、*任意*) : トークナイザーで使用される追加の特殊トークン。

MyT5のトークナイザーを構築します。

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

#### build_inputs_with_special_tokens[[transformers.MyT5Tokenizer.build_inputs_with_special_tokens]]

```python
build_inputs_with_special_tokens(token_ids_0: list, token_ids_1: list[int] | None = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/myt5/tokenization_myt5.py#L282)

**パラメータ:**

token_ids_0 (`list[int]`) : 特殊トークンが追加されるIDのリスト。

token_ids_1 (`list[int]`, *任意*) : シーケンスペア用の任意の第2のIDリスト。

**戻り値:** `list[int]`

適切な特殊トークンを含む[入力 ID](../glossary#input-ids)のリスト。

シーケンス分類タスクにおいて、シーケンスまたはシーケンスのペアからモデルの入力を構築するために、特殊トークンを追加して連結します。シーケンスの形式は以下の通りです：

- 単一シーケンス: `X </s>`
- シーケンスのペア: `A </s> B </s>`

#### get_special_tokens_mask[[transformers.MyT5Tokenizer.get_special_tokens_mask]]

```python
get_special_tokens_mask(token_ids_0: list, token_ids_1: list[int] | None = None, already_has_special_tokens: bool = False)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/myt5/tokenization_myt5.py#L220)

**パラメータ:**

token_ids_0 (`list[int]`) : ID のリスト。

token_ids_1 (`list[int]`, *任意*) : シーケンスペア用の任意の第2のIDリスト。

already_has_special_tokens (`bool`、*任意*、デフォルトは`False`) : トークンリストが、モデル用の特殊トークンを含む形式で既に整形されているかどうかを示します。

**戻り値:** `list[int]`

範囲 [0, 1] の整数のリスト: 特殊トークンは 1、シーケンストークンは 0。

特殊トークンが追加されていないトークンリストからシーケンスIDを取得します。このメソッドは、トークナイザーの`prepare_for_model`メソッドを使用して特殊トークンを追加する際に呼び出されます。

#### create_token_type_ids_from_sequences[[transformers.MyT5Tokenizer.create_token_type_ids_from_sequences]]

```python
create_token_type_ids_from_sequences(token_ids_0: list, token_ids_1: list[int] | None = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/myt5/tokenization_myt5.py#L259)

**パラメータ:**

token_ids_0 (`list[int]`) : ID のリスト。

token_ids_1 (`list[int]`, *任意*) : シーケンスペア用の任意の第2のIDリスト。

**戻り値:** `list[int]`

ゼロのリスト。

シーケンスペア分類タスクで使用するために、渡された2つのシーケンスからマスクを作成します。MyT5はトークンタイプIDを使用しないため、ゼロのリストが返されます。

#### save_vocabulary[[transformers.MyT5Tokenizer.save_vocabulary]]

```python
save_vocabulary(save_directory: str, filename_prefix: str | None = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/myt5/tokenization_myt5.py#L366)

