# Gradium Phonon TTS

## 概要

Gradium Phonon TTS は [Gradium](https://gradium.ai) によるオンデバイス向けテキスト読み上げモデルのファミリーです。[Pocket TTS](./pocket_tts) のレシピで学習されており、因果型 Transformer が音声プロンプトとテキストを読み取り、1 ステップごとに 12.5 Hz で 1 つの連続的な 32 次元の音声潜在変数を 1 ステップフローヘッドを通じて出力します。また、発話の終了タイミングを判定するエンドオブスピーチヘッドを備えています。潜在変数は、プロセッサが保持する [Pocket TTS audio tokenizer](./pocket_tts_audio_tokenizer) によって 24 kHz の音声にデコードされます。このプロセッサは Pocket TTS の [PocketTTSProcessor](/docs/transformers/main/ja/model_doc/pocket_tts#transformers.PocketTTSProcessor) です。

Pocket TTS との違いは、ボイスの条件付けにあります。ボイスプロンプトは、別のスピーカーコーデックの 512 次元の潜在変数で構成され、学習されたスピーカーベクトルがすべてのオーディオ潜在変数の位置に追加されます。スピーカーコーデックは公開されていないため、ボイスは事前計算された潜在変数として提供されます（各チェックポイントの `default-voice.safetensors`、および [gradium/phonon-voices](https://huggingface.co/gradium/phonon-voices) のカタログ）。また、オーディオトークナイザーはデコーダーのみで構成されており、録音からボイスをクローンすることはできません。

| チェックポイント | パラメータ | 言語 | ライセンス |
|---|---|---|---|
| [gradium/phonon-31m-en](https://huggingface.co/gradium/phonon-31m-en) | 31M | 英語 | Apache 2.0 |
| [gradium/phonon-40m-en](https://huggingface.co/gradium/phonon-40m-en) | 40M | 英語 | CC BY-NC 4.0 |
| [gradium/phonon-40m-fr](https://huggingface.co/gradium/phonon-40m-fr) | 40M | フランス語 | CC BY-NC 4.0 |
| [gradium/phonon-40m-de](https://huggingface.co/gradium/phonon-40m-de) | 40M | ドイツ語 | CC BY-NC 4.0 |
| [gradium/phonon-40m-es](https://huggingface.co/gradium/phonon-40m-es) | 40M | スペイン語 | CC BY-NC 4.0 |
| [gradium/phonon-40m-pt](https://huggingface.co/gradium/phonon-40m-pt) | 40M | ポルトガル語 | CC BY-NC 4.0 |
| [gradium/phonon-40m-multilingual](https://huggingface.co/gradium/phonon-40m-multilingual) | 40M | 英語、フランス語、ドイツ語、スペイン語、ポルトガル語 | CC BY-NC 4.0 |

すべて同じ方法で読み込まれます。チェックポイントを切り替えるには、リポジトリIDを変更するだけです。

このモデルは[Eustache Le Bihan](https://huggingface.co/eustlb)によって提供されました。元のコードは[gradium-ai/xn-ptts](https://github.com/gradium-ai/xn-ptts)です。

## 使用のコツ

- [apply_chat_template()](/docs/transformers/main/ja/main_classes/processors#transformers.ProcessorMixin.apply_chat_template) を使用して入力を準備します。テキストごとに `user` メッセージを 1 つ、音声が入る場所には空の `{"type": "audio"}` アイテムを、音声の潜在変数は `processor_kwargs={"audio_prompt_latents": [...]}` に、そして `add_generation_prompt=True` を指定します。
- トークナイザーは、数値、金額、記号、住所をそのままの形で展開しません。[テキスト正規化](#text-normalization)を参照してください。
- `generate` は `audio_latents` と `audio_latents_mask` を返します。[PocketTTSProcessor.decode()](/docs/transformers/main/ja/model_doc/pocket_tts#transformers.PocketTTSProcessor.decode) を使用してデコードしてください。
- Gradium のランタイムと同様に、生成サンプルを作成します: `temperature` 0.3 (フローの初期ノイズの分散) を設定し、`eos_threshold` を end-of-speech の logit が超えた直後に停止します。 `do_sample=False` を設定すると、フローはゼロノイズから開始されます。
- モデルは、重みが保存されている dtype である bf16 で読み込まれます。CPU の場合は、Gradium のランタイムに合わせるために `dtype=torch.float32` を渡してください。
- 長いテキストは、[PocketTTSProcessor.split_text()](/docs/transformers/main/ja/model_doc/pocket_tts#transformers.PocketTTSProcessor.split_text) を使用して分割し、チャンクごとに1つの会話にしてください。

## 使用方法

### ボイス

ボイスは `(num_frames, 512)` のテンソルで表される潜在変数です。各チェックポイントには 1 つのボイス (`default-voice.safetensors`) が同梱されており、[gradium/phonon-voices](https://huggingface.co/gradium/phonon-voices) には約 100 以上のボイスが用意されています。これらはあらゆる言語に対応しており、それぞれに固有のボイス ID が割り当てられています (`voices.jsonl` に名称、言語、説明が記載されています)。どのボイスもどのチェックポイントとでも組み合わせることができます。

```python
import torch
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from transformers import AutoProcessor, GradiumPhononTTSForConditionalGeneration

model_id = "gradium/phonon-31m-en"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = GradiumPhononTTSForConditionalGeneration.from_pretrained(model_id, device_map="auto")

def load_voice(voice_id):
    """A voice of gradium/phonon-voices, as latents of shape (num_frames, 512)."""
    path = hf_hub_download("gradium/phonon-voices", f"voices/{voice_id}.safetensors")
    return load_file(path)["speaker_wavs"][0].T.float()

# Easton (en-us); the checkpoint's own voice: hf_hub_download(model_id, "default-voice.safetensors")
voice = load_voice("LMDIYE0Oa377Qh6Z")
# an empty `audio` item marks the voice
conversation = [
    {"role": "user", "content": [{"type": "audio"}, {"type": "text", "text": "Hello from Phonon."}]}
]
inputs = processor.apply_chat_template(
    conversation,
    tokenize=True,
    return_dict=True,
    add_generation_prompt=True,
    processor_kwargs={"audio_prompt_latents": [voice]},
).to(model.device)

outputs = model.generate(**inputs)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio(audio, "phonon.wav")
```

### バッチと長いテキスト

複数のテキストをバッチ処理し、それぞれに独自のボイスを割り当て、長いテキストはチャンクに分割します:

```python
text = (
    "Phonon is a small text-to-speech model that runs on your device. "
    "Long texts are split into sentences, and each chunk is one conversation of the batch."
)
chunks = processor.split_text(text)
texts = chunks + ["And this one is said by another voice."]
voices = [load_voice("LMDIYE0Oa377Qh6Z")] * len(chunks) + [load_voice("NbpkqMVS3CJeq2j8")]
conversations = [
    [{"role": "user", "content": [{"type": "audio"}, {"type": "text", "text": text}]}] for text in texts
]
inputs = processor.apply_chat_template(
    conversations,
    tokenize=True,
    return_dict=True,
    add_generation_prompt=True,
    processor_kwargs={"audio_prompt_latents": voices},
).to(model.device)

outputs = model.generate(**inputs)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio([torch.cat(audio[: len(chunks)]), audio[-1]], ["long.wav", "other.wav"])
```

### テキスト正規化

Gradium のランタイムと同様に、トークナイザーは言語に依存しない部分を正規化します。

| テキスト | トークナイザー |
|---|---|
| `“Hello” — it’s here…` | `"Hello" it's here.` |
| `hello (world); see you 🚀` | `Hello, world, see you.` |

数値、数量、記号、住所などの言語によって異なる要素は、読み上げられません。

| テキスト | トークナイザー | Gradiumのランタイム |
|---|---|---|
| `It costs $1,234.56.` | `It costs $1,234.56.` | `It costs 1 thousand 234 dollars and 56 cents.` |
| `Write to jean@gradium.ai` | `Write to jean@gradium.ai.` | `Write to jean at gradium dot A-I.` |
| `It is 21°C` | `It is 21°C.` | `It is 21 degrees Celsius.` |

それらについては、Gradium のランタイムのテキスト正規化である [ptts](https://github.com/gradium-ai/xn-ptts) を使用するか、そのまま書き出してください。

## GradiumPhononTTSConfig[[transformers.GradiumPhononTTSConfig]]

#### transformers.GradiumPhononTTSConfig[[transformers.GradiumPhononTTSConfig]]

```python
transformers.GradiumPhononTTSConfig(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, is_encoder_decoder: bool = False, 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, flow_head_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, vocab_size: int = 4001, hidden_size: int = 768, num_hidden_layers: int = 6, num_attention_heads: int = 12, num_key_value_heads: int | None = None, head_dim: int | None = None, intermediate_size: int = 3072, hidden_act: str = 'gelu', layer_norm_eps: float = 1e-05, attention_bias: bool = False, attention_dropout: float = 0.0, max_position_embeddings: int = 8192, rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None, latent_dim: int = 32, pad_token_id: int = 3, bos_token_id: int | None = None, eos_token_id: int | None = None, audio_prompt_token_id: int = 5, audio_latent_token_id: int = 6, audio_bos_token_id: int = 4, frame_rate: float = 12.5, initializer_range: float = 0.02, use_cache: bool = True, eos_loss_weight: float = 0.1, flow_loss_num_samples: int = 4, lsd_distill_probability: float = 0.25, lsd_diagonal_weight: float = 0.75, lsd_time_logit_mean: float = 0.4, lsd_time_logit_std: float = 1.0, latent_stats_ema_steps: int = 1000, latent_stats_ema_decay: float = 0.999, audio_prompt_dim: int = 512, num_speakers: int = 1, num_speakers_vocab_size: int = 32, num_speakers_embedding_dim: int = 16, duration_delta: float = 0.0, duration_delta_embedding_dim: int = 128, duration_delta_scale: float = 1000.0, duration_delta_max_period: float = 10000.0)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/gradium_phonon_tts/configuration_gradium_phonon_tts.py#L82)

**パラメータ:**

flow_head_config (`Union[GradiumPhononTTSFlowHeadConfig, dict]`, *省略可*) : バックボーンの隠れ状態から各潜在変数をサンプリングするフローヘッドの設定です。

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

hidden_size (`int`、*任意*、デフォルトは`768`) : 隠れ表現の次元数。

num_hidden_layers (`int`、*任意*、デフォルトは`6`) : Transformer デコーダーの隠れ層の数。

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

num_key_value_heads (`int`, *optional*) : Grouped Query Attention を実装するために使用する key_value ヘッドの数です。`num_key_value_heads=num_attention_heads` の場合、モデルは Multi Head Attention (MHA) を使用し、`num_key_value_heads=1` の場合は Multi Query Attention (MQA) を使用し、それ以外の場合は GQA が使用されます。マルチヘッドのチェックポイントを GQA チェックポイントに変換する際は、各グループの key ヘッドと value ヘッドは、そのグループ内の元のすべてのヘッドを平均プーリングして構築する必要があります。詳細については、[この論文](https://huggingface.co/papers/2305.13245)を参照してください。指定されない場合、デフォルトで `num_attention_heads` が使用されます。

head_dim (`int`, *optional*) : アテンションヘッドの次元です。None の場合、hidden_size // num_attention_heads がデフォルトとして使用されます。

intermediate_size (`int`、*任意*、デフォルトは `3072`) : MLP 表現の次元数。

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

layer_norm_eps (`float`、*任意*、デフォルトは 1e-05) : バックボーンのレイヤーノーマライゼーションのエプシロン。

attention_bias (`bool`、*任意*、デフォルトは`False`) : セルフアテンションにおけるクエリ、キー、バリュー、出力の投影層でバイアスを使用するかどうか。

attention_dropout (`float`、*任意*、デフォルトは`0.0`) : 注意確率のドロップアウト率です。

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

rope_parameters (`Union[~modeling_rope_utils.RopeParameters, dict]`, *optional*) : RoPE 埋め込みの設定パラメータを含む辞書です。この辞書には `rope_theta` の値が含まれていなければならず、より長い `max_position_embeddings` で RoPE を使用する場合、スケーリングに使用されるパラメータが任意で含まれます。

latent_dim (`int`、*任意*、デフォルト値は 32) : バックボーンが入力として受け取るオーディオ潜在変数 (`audio_latents`) の次元。flow head とオーディオトークナイザーの `latent_dim` と等しい。

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

bos_token_id (`int`, *任意*) : 語彙内でストリームの開始に使用されるトークン ID。

eos_token_id (`int`, *任意*) : 語彙内でストリーム終了に使用されるトークン ID。

audio_prompt_token_id (`int`、*任意*、デフォルト値は 5) : `input_ids` 内の音声プロンプトフレームのプレースホルダトークン ID (`<|audio_prompt|>`)。

audio_latent_token_id (`int`、*任意*、デフォルト値は 6) : `input_ids` 内のオーディオ潜在位置のプレースホルダートークン ID (`<|audio_latent|>`)。

audio_bos_token_id (`int`、*optional*、デフォルトは 4) : プロンプトを閉じる最初の音声位置のトークン ID です。学習済みの BOS 潜在変数を持ち、そこから最初のフレームが生成されます (`<|audio_bos|>`)。

frame_rate (`float`、*optional*、デフォルト値は 12.5) : 1 秒あたりのオーディオの潜在変数（latents）の数：`generate` は、これに基づいてデフォルトのフレーム予算を導出します。

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

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

eos_loss_weight (`float`、*任意*、デフォルト値は 0.1) : 学習損失における発話終了損失の重み。

flow_loss_num_samples (`int`、*optional*、デフォルトは 4) : フロー損失におけるターゲットフレームごとのノイズ抽選回数。

lsd_distill_probability (`float`、*optional*、デフォルト値は 0.25) : 各学習ステップにおいて、LSD ロスの自己蒸留項を計算する確率（期待損失を一定に保つために重み付けが再調整されます）。1 を指定すると、すべてのステップで計算されます。

lsd_diagonal_weight (`float`、*任意*、デフォルト値は 0.75) : LSD ロスの対角成分（即時フロー項）の重み。自己蒸留項は残りの部分を重み付けします。

lsd_time_logit_mean (`float`、*任意*、デフォルト値は 0.4) : LSD ロスによってサンプリングされるフロー時間のロジット正規分布の平均値。

lsd_time_logit_std (`float`、*任意*、デフォルト値は 1.0) : LSD ロスによってサンプリングされるフロー時間のロジット正規分布の標準偏差。

latent_stats_ema_steps (`int`、*optional*、デフォルトは 1000) : 最初の学習ステップの回数。この期間中、`latent_mean` と `latent_std` はターゲット潜在変数の指数移動平均に従います。0 に設定すると、これらは固定されます。

latent_stats_ema_decay (`float`, *任意*, デフォルト値は 0.999) : 移動平均の減衰率。

audio_prompt_dim (`int`, *optional*, デフォルト値は 512) : voice-prompt latents (`audio_prompt_latents`) の次元数です。これは Gradium のスピーカーコーデック（オーディオトークナイザーのものではなく Mimi エンコーダー）の量子化されていない latents で、バックボーンが `hidden_size` に射影します。

num_speakers (`int`、*任意*、デフォルトは 1) : `num_speakers` 条件の値: 各オーディオ潜在位置に追加されるそのルックアップテーブルの行。

num_speakers_vocab_size (`int`、*任意*、デフォルトは 32) : `num_speakers`ルックアップテーブルの行数。

num_speakers_embedding_dim (`int`、*任意*、デフォルトは 16) : `num_speakers` のルックアップテーブルの幅。`hidden_size` に射影されます。

duration_delta (`float`、*任意*、デフォルト値は 0.0) : `duration_delta` 条件の値。正弦波埋め込みとしてエンコードされ、すべてのオーディオ潜在位置に追加されます。

duration_delta_embedding_dim (`int`、*任意*、デフォルトは 128) : `duration_delta` の正弦波埋め込みのサイズ。これは `hidden_size` に射影されます。

duration_delta_scale (`float`、*任意*、デフォルト値は 1000.0) : `duration_delta` の正弦埋め込みを適用する前に乗算される係数。

duration_delta_max_period (`float`、*任意*、デフォルト値は 10000.0) : `duration_delta` の正弦波埋め込みの最大周期。

これは、GradiumPhononTTSModel の設定を保存するための設定クラスです。指定された引数に基づいて Gradium Phonon Tts モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、[gradium/phonon-31m-en](https://huggingface.co/gradium/phonon-31m-en) と同様の設定が得られます。

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

## GradiumPhononTTSFlowHeadConfig[[transformers.GradiumPhononTTSFlowHeadConfig]]

#### transformers.GradiumPhononTTSFlowHeadConfig[[transformers.GradiumPhononTTSFlowHeadConfig]]

```python
transformers.GradiumPhononTTSFlowHeadConfig(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, is_encoder_decoder: bool = False, 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, hidden_size: int = 512, num_hidden_layers: int = 6, latent_dim: int = 32, condition_dim: int = 768, frequency_embedding_size: int = 256, hidden_act: str = 'silu', layer_norm_eps: float = 1e-06, rms_norm_eps: float = 1e-05, max_period: float = 10000.0, flow_type: typing.Literal['lsd', 'drifting'] = 'lsd', loss_weighting_hidden_size: int = 32, loss_weighting_num_layers: int = 3)
```

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

**パラメータ:**

hidden_size (`int`、*任意*、デフォルトは`512`) : 隠れ表現の次元数。

num_hidden_layers (`int`、*任意*、デフォルトは`6`) : Transformer デコーダーの隠れ層の数。

latent_dim (`int`、*optional*、デフォルトは 32) : ヘッドが予測する連続オーディオ潜在変数の次元（オーディオトークナイザーの潜在次元）。

condition_dim (`int`、*任意*、デフォルトは 768) : ヘッドが条件付けられるバックボーンの隠れ状態の次元（バックボーンの `hidden_size`）。

frequency_embedding_size (`int`、*任意*、デフォルトは 256) : フロー時間の正弦波埋め込みのサイズ。

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

layer_norm_eps (`float`、*任意*、デフォルト値は 1e-06) : 残差ブロック内および最終層の層正規化のエプシロン。

rms_norm_eps (`float`、*任意*、デフォルトは 1e-05) : 時間埋め込みを閉じる正規化の Epsilon。

max_period (`float`, *任意*, デフォルト値は 10000.0) : 正弦波時間埋め込みの最大周期です。チェックポイントはこれを `freqs` として保存します。

flow_type (`str`、*任意*、デフォルトは `"lsd"`) : ヘッドが学習された目的関数であり、条件付けとサンプリングの方式を決定します。 `"lsd"`（ラグランジュ自己蒸留）: フローステップの開始時刻と終了時刻で条件付けられ、ガウスノイズからオイラー法でサンプリングされます。 `"drifting"`: 時刻による条件付けはなく、ヘッドが 1 回の呼び出しでノイズを潜在変数にマッピングします。

loss_weighting_hidden_size (`int`、*optional*、デフォルトは 32) : LSD ロスの各用語のフロータイムから不確実性重みを学習する MLP の幅（トレーニング時のみ）。

loss_weighting_num_layers (`int`、*任意*、デフォルトは 3) : その MLP の隠れ層の数。

これは、GradiumPhononTTSModel の設定を保存するための設定クラスです。指定された引数に基づいて Gradium Phonon Tts モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、[gradium/phonon-31m-en](https://huggingface.co/gradium/phonon-31m-en) と同様の設定が得られます。

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

## GradiumPhononTTSModel[[transformers.GradiumPhononTTSModel]]

#### transformers.GradiumPhononTTSModel[[transformers.GradiumPhononTTSModel]]

```python
transformers.GradiumPhononTTSModel(config: GradiumPhononTTSConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/gradium_phonon_tts/modeling_gradium_phonon_tts.py#L393)

**パラメータ:**

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

Gradium Phonon TTSバックボーン: 音声プロンプト(スピーカー・コーデックの潜在変数)、テキストトークン、およびオーディオ潜在変数からなる単一のストリームに対する因果的Transformerで、正規化された隠れ状態を返します。

このモデルは [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.GradiumPhononTTSModel.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, audio_prompt_latents: typing.Optional[torch.Tensor] = None, audio_prompt_latents_mask: typing.Optional[torch.Tensor] = None, audio_latents: typing.Optional[torch.Tensor] = None, audio_latents_mask: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, use_cache: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/gradium_phonon_tts/modeling_gradium_phonon_tts.py#L417)

**パラメータ:**

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)

audio_prompt_latents (`torch.Tensor`、形状 `(batch_size, num_prompt_frames, latent_dim)`、*任意*) : 音声トークナイザーのボイスプロンプトの潜在変数（プロセッサによってエンコードされたもの、またはチェックポイントの `voices/`）。バッチ内でもっとも長いボイスに合わせて右パディングが適用され、`audio_prompt_token_id` の位置に配置されています。

audio_prompt_latents_mask (`torch.Tensor`、shape `(batch_size, num_prompt_frames)`、*optional*) : `audio_prompt_latents` における音声フレーム（`1`）とパディング（`0`）を区別するためのマスク。

audio_latents (`torch.Tensor`、形状 `(batch_size, num_latents, latent_dim)`、*任意*) : `audio_latent_token_id` の位置に分散配置された正規化されたオーディオ潜在変数です。それらの直前にある `audio_bos_token_id` の位置は、プロンプトを閉じ、最初のフレームが生成される位置であり、常に学習された BOS 潜在変数が割り当てられます。

audio_latents_mask (`torch.Tensor`、shape `(batch_size, num_latents)`、*optional*) : `audio_latents` において、各行の latent の数（training）が異なる場合、各行の latent（`1`）と padding（`0`）を示すマスク。

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

position_ids (`torch.LongTensor`、shape `(batch_size, sequence_length)`、*任意*) : 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックスです。`[0, config.n_positions - 1]` の範囲から選択されます。 [位置 ID とは何か？](../glossary#position-ids)

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

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

**戻り値:** [BaseModelOutputWithPast](/docs/transformers/main/ja/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPast) または `tuple(torch.Tensor)`

`torch.Tensor` のタプル（`return_dict=False` が渡された場合、または `config.return_dict=False` の場合）または [BaseModelOutputWithPast](/docs/transformers/main/ja/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPast)。設定（[GradiumPhononTTSConfig](/docs/transformers/main/ja/model_doc/gradium_phonon_tts#transformers.GradiumPhononTTSConfig)）と入力に応じて、さまざまな要素で構成されます。

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

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

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

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

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

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

  アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。

## GradiumPhononTTSForConditionalGeneration[[transformers.GradiumPhononTTSForConditionalGeneration]]

#### transformers.GradiumPhononTTSForConditionalGeneration[[transformers.GradiumPhononTTSForConditionalGeneration]]

```python
transformers.GradiumPhononTTSForConditionalGeneration(config: GradiumPhononTTSConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/gradium_phonon_tts/modeling_gradium_phonon_tts.py#L693)

**パラメータ:**

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

Gradium Phonon TTS テキスト読み上げモデル: バックボーン、1ステップごとに1つのオーディオ潜在変数をサンプリングするフローヘッド、および発話終了ヘッド。このモデルはオーディオトークナイザーの潜在変数を生成し、プロセッサがそれを 24 kHz のオーディオにデコードします。

このモデルは [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.GradiumPhononTTSForConditionalGeneration.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, audio_prompt_latents: typing.Optional[torch.Tensor] = None, audio_prompt_latents_mask: typing.Optional[torch.Tensor] = None, audio_latents: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.Tensor] = None, labels_mask: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, use_cache: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/gradium_phonon_tts/modeling_gradium_phonon_tts.py#L725)

**パラメータ:**

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)

audio_prompt_latents (`torch.Tensor`、形状 `(batch_size, num_prompt_frames, latent_dim)`、*任意*) : 音声トークナイザーのボイスポンプトの潜在変数。右パディングが適用され、`audio_prompt_token_id` の位置に配置されています。

audio_prompt_latents_mask (`torch.Tensor`、shape `(batch_size, num_prompt_frames)`、*optional*) : `audio_prompt_latents` における音声フレーム（`1`）とパディング（`0`）を区別するためのマスク。

audio_latents (`torch.Tensor`、形状 `(batch_size, num_latents, latent_dim)`、*任意*) : `audio_latent_token_id` の位置に分散配置された、正規化されたオーディオの潜在変数。

labels (`torch.Tensor`、形状 `(batch_size, num_frames, latent_dim)`、*任意*) : 音声トークナイザーのターゲット潜在変数（学習用）、右パディング済み。各行のプロンプトは `audio_bos_token_id` の位置で始まり、その後、フレームごとに 1 つの `audio_latent_token_id` 位置が続きます。モデルは正規化されたターゲット（ティーチャージング）を入力し、BOS と最終フレームを除くすべてのフレームの出力に対してフロー損失を適用します（これらはフレームを予測します）。また、それらすべてに対して発話終了損失を適用し、最後のフレームが発話の終了を表します。

labels_mask (`torch.Tensor`、shape `(batch_size, num_frames)`、*任意*) : `labels` における各行のターゲットフレーム (`1`) とパディング (`0`) を区別するためのマスク。

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

position_ids (`torch.LongTensor`、shape `(batch_size, sequence_length)`、*任意*) : 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックスです。`[0, config.n_positions - 1]` の範囲から選択されます。 [位置 ID とは何か？](../glossary#position-ids)

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

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

**戻り値:** `GradiumPhononTTSOutputWithPast` または `tuple(torch.Tensor)`

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

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

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

- **loss** (`torch.Tensor`、shape `()`、*optional*、`labels` が渡された場合に返されます) -- 学習損失: ターゲットの潜在変数の LSD フロー損失に、`config.eos_loss_weight` 倍の発話終了損失を加えたものです。
- **logits** (`torch.Tensor`、形状 `(batch_size, sequence_length, 1)`) -- 音声終了の logits。各位置ごとに 1 つ。
- **past_key_values** (`Cache`、*任意*、`use_cache=True` が渡された場合または `config.use_cache=True` の場合に返されます) -- [Cache](/docs/transformers/main/ja/internal/generation_utils#transformers.Cache) のインスタンスです。詳細については、[kv cache ガイド](https://huggingface.co/docs/transformers/en/kv_cache)を参照してください。

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

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

  アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
- **last_hidden_state** (`torch.Tensor`、形状 `(batch_size, sequence_length, hidden_size)`) -- フローヘッドを条件づける、バックボーンの正規化された隠れ状態です。

例:

```python
>>> from transformers import AutoProcessor, GradiumPhononTTSForConditionalGeneration

>>> model = GradiumPhononTTSForConditionalGeneration.from_pretrained("gradium/phonon-31m-en")

>>> processor = AutoProcessor.from_pretrained("gradium/phonon-31m-en")
>>> inputs = processor(text="Hello, my dog is cute", return_tensors="pt")

>>> # generate speech
>>> speech = model(inputs["input_ids"])
```

#### generate[[transformers.GradiumPhononTTSForConditionalGeneration.generate]]

```python
generate(inputs: typing.Optional[torch.Tensor] = None, **kwargs)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pocket_tts/generation_pocket_tts.py#L122)

**パラメータ:**

inputs (`torch.LongTensor`、形状 `(batch_size, sequence_length)`、*任意*) : [PocketTTSProcessor](/docs/transformers/main/ja/model_doc/pocket_tts#transformers.PocketTTSProcessor) によって準備された `input_ids` です。`input_ids=` として渡すこともできます。

kwargs (`dict[str, Any]`, *省略可*) : `attention_mask`、音声プロンプト（`audio_prompt_latents` と `audio_prompt_latents_mask`、またはテキストのみプロンプトを持つ出荷済み音声の音声プレフィックスのキャッシュである `past_key_values`）、プロセッサからの `frames_after_eos`、生成パラメータ（`do_sample`、`temperature`、`max_new_tokens` など）、および Pocket TTS 固有の `num_flow_steps`、`eos_threshold`、`min_frames_before_eos`（デフォルトでは生成設定の値を使用します）。

**戻り値:**

`return_dict_in_generate=True`（チェックポイントの生成設定）の場合、[PocketTTSGenerateOutput](/docs/transformers/main/ja/model_doc/pocket_tts#transformers.models.pocket_tts.generation_pocket_tts.PocketTTSGenerateOutput) が返されます。これはパディング済みの`audio_latents`と、それに対応する`audio_latents_mask`を含み、[PocketTTSProcessor.decode()](/docs/transformers/main/ja/model_doc/pocket_tts#transformers.PocketTTSProcessor.decode)によって1つのバッチとしてデコードされます。それ以外の場合は、生成された潜在変数のリストが返され、各サンプルに対して`(num_frames, latent_dim)`のテンソルが1つ含まれ、それぞれが個別にデコードされます。

音声の生成を行います。このメソッドは [generate()](/docs/transformers/main/ja/main_classes/text_generation#transformers.GenerationMixin.generate) をオーバーライドし、`max_new_tokens` のデフォルト値を、バッチ内でもっとも長いテキストに対する元のランタイムのフレーム予算である `ceil((num_text_tokens / 3 + 2) * frame_rate)` に設定します。その他の処理は、通常の生成フックを通じて行われます。

