Transformers documentation

Pocket TTS

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

このモデルは2026年10月20日にHugging Face Transformersに貢献されました。

Pocket TTS

概要

Pocket TTS は Kyutai による 1 億パラメータのテキスト読み上げモデルで、CPU 上でリアルタイムより高速に動作する Continuous Audio Language Model です。因果変換器が 1 ステップフローヘッドを介してフレームごとに 1 つの連続音声潜在変数(12.5 Hz)を出力し、発話終了ヘッドが停止のタイミングを判断します。

プロセッサは、Pocket TTS audio tokenizerを保持しています。これは Mimi ベースのコーデックであり、音声プロンプトをエンコードし、生成された潜在変数を 24 kHz の音声にデコードします。事前定義された音声は KV キャッシュとして同梱されています(voices/)。

2つのフローヘッドがリリースされています:Lagrangian self-distillation(flow_type="lsd"、デフォルト)とdrifting(flow_type="drifting"、english_drifting_26-09)。ファインチューニングに対応しており、Trainingを参照してください。

このモデルは Eustache Le Bihan によって提供されました。元のコードは kyutai-labs/pocket-tts です。

使用のコツ

  • apply_chat_template() を使用して入力を用意します(テキストごとに user メッセージを1つ、add_generation_prompt=True を指定)。トークナイザーの正規化処理は、チェックポイントの言語設定に基づき、元のテキストと同様にテキストを準備します。
  • generate は audio_latents と audio_latents_mask を返します。PocketTTSProcessor.decode() を使用してデコードしてください。
  • max_new_tokens はデフォルトでテキストの長さに基づく予算が設定され、end-of-speech の logit が eos_threshold を超えた直後に生成が停止します。
  • do_sample=False は、temperature が 0 の場合のオリジナルの動作と一致します。サンプリングを行う場合、temperature(デフォルト値 0.3)は、フローの初期ノイズの分散です。
  • 長いテキストは、PocketTTSProcessor.split_text() を使用して分割し、チャンクごとに1つの会話にしてください。

使用方法

ボイス

ボイスは3つの方法で指定できます。

1. 録音のクローン作成: 会話内のaudioアイテム。

from transformers import AutoModelForTextToWaveform, AutoProcessor

model_id = "eustlb/pocket-tts"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")

url = "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/en-Alice_woman.wav"
conversation = [
    {
        "role": "user",
        "content": [
            {"type": "audio", "url": url},
            {"type": "text", "text": "Hello world. I am Kyutai's Pocket TTS."},
        ],
    }
]
inputs = processor.apply_chat_template(
    conversation, tokenize=True, return_dict=True, add_generation_prompt=True
).to(model.device)

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

2. 事前計算済み潜在変数: 空のaudio項目で、潜在変数がプロセッサに渡されます。

from transformers import AutoModelForTextToWaveform, AutoProcessor
from transformers.audio_utils import load_audio

model_id = "eustlb/pocket-tts"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")

# e.g. a recording encoded once by the processor's audio tokenizer,
# to reuse without re-encoding it
url = "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/en-Alice_woman.wav"
features = processor.feature_extractor(
    load_audio(url, sampling_rate=24000), sampling_rate=24000
).to(processor.audio_tokenizer.device)
# (num_frames, latent_dim)
voice = processor.audio_tokenizer.encode(**features).latents[0]

conversation = [
    {
        "role": "user",
        "content": [
            {"type": "audio"},
            {"type": "text", "text": "Hello world. I am Kyutai's Pocket TTS."},
        ],
    }
]
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, "latents.wav")

3. キャッシュ済みコンテキスト: 音声プロンプトの KV キャッシュで、past_key_values として渡されます。同梱されている音声(voices/)はこの形式を使用しています。

from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from transformers import AutoModelForTextToWaveform, AutoProcessor, DynamicCache

model_id = "eustlb/pocket-tts"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")

voice = load_file(hf_hub_download(model_id, "voices/alba.safetensors"))
layers = []
for i, layer in enumerate(model.model.layers):
    # each layer's cache on that layer's device
    device = layer.self_attn.k_proj.weight.device
    layers.append(
        (voice[f"layers.{i}.keys"].to(device), voice[f"layers.{i}.values"].to(device))
    )
voice_cache = DynamicCache(layers, config=model.config)

conversation = [
    {
        "role": "user",
        "content": [{"type": "text", "text": "Hello world. I am Kyutai's Pocket TTS."}],
    }
]
inputs = processor.apply_chat_template(
    conversation, tokenize=True, return_dict=True, add_generation_prompt=True
).to(model.device)

outputs = model.generate(**inputs, past_key_values=voice_cache)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio(audio, "cached.wav")

バッチと長いテキスト

複数のテキストとボイスをバッチ処理し、長いテキストはチャンクに分割します:

import torch
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from transformers import AutoModelForTextToWaveform, AutoProcessor, DynamicCache

model_id = "eustlb/pocket-tts"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")


def load_voices(names):
    """The shipped voices, one per conversation, as one cache, left-padded to the
    longest voice, and the mask of their positions.

    `generate` extends the cache: load it for every call.
    """
    voices = [
        load_file(hf_hub_download(model_id, f"voices/{name}.safetensors"))
        for name in names
    ]
    lengths = [voice["layers.0.keys"].shape[2] for voice in voices]
    length = max(lengths)
    layers = []
    for i, layer in enumerate(model.model.layers):
        device = layer.self_attn.k_proj.weight.device
        keys, values = (
            torch.cat(
                [
                    torch.nn.functional.pad(voice[f"layers.{i}.{kind}"], (0, 0, length - n, 0))
                    for voice, n in zip(voices, lengths)
                ]
            ).to(device)
            for kind in ("keys", "values")
        )
        layers.append((keys, values))
    mask = torch.tensor([[0] * (length - n) + [1] * n for n in lengths])
    return DynamicCache(layers, config=model.config), mask


text = (
    "A first sentence that is long enough to be worth splitting. "
    "Then a second one, and a third one for good measure."
)
chunks = processor.split_text(text)
conversations = [
    [{"role": "user", "content": [{"type": "text", "text": chunk}]}]
    for chunk in chunks + ["Hello world"]
]
inputs = processor.apply_chat_template(
    conversations, tokenize=True, return_dict=True, add_generation_prompt=True
).to(model.device)

voice_cache, voice_mask = load_voices(["alba"] * len(chunks) + ["jean"])
# the mask covers the cached voices too
inputs["attention_mask"] = torch.cat(
    [voice_mask.to(inputs["attention_mask"]), inputs["attention_mask"]], dim=-1
)
outputs = model.generate(**inputs, past_key_values=voice_cache)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio(
    [torch.cat(audio[: len(chunks)]), audio[-1]], ["long.wav", "hello.wav"]
)

ドリフトするチェックポイント

チェックポイント自身のボイスを使用する場合も、使い方は同じです。

from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from transformers import AutoModelForTextToWaveform, AutoProcessor, DynamicCache

model_id = "eustlb/pocket-tts-english-drifting"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")

voice = load_file(hf_hub_download(model_id, "voices/alba.safetensors"))
layers = []
for i, layer in enumerate(model.model.layers):
    device = layer.self_attn.k_proj.weight.device
    layers.append(
        (voice[f"layers.{i}.keys"].to(device), voice[f"layers.{i}.values"].to(device))
    )

conversation = [
    {
        "role": "user",
        "content": [{"type": "text", "text": "Hello world. I am Kyutai's Pocket TTS."}],
    }
]
inputs = processor.apply_chat_template(
    conversation, tokenize=True, return_dict=True, add_generation_prompt=True
).to(model.device)

outputs = model.generate(
    **inputs, past_key_values=DynamicCache(layers, config=model.config)
)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio(audio, "drifting.wav")

トレーニング

assistant ターンにターゲットオーディオを配置します。プロセッサはラテンをlabelsとして返し、モデルは元の損失(LSD フロー損失にconfig.eos_loss_weightを掛けた発話終了損失を加えたもの)を返します。音声プロンプトは、通常、同じ発話の冒頭部分です。

import torch
from transformers import AutoModelForTextToWaveform, AutoProcessor

model_id = "eustlb/pocket-tts"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")
model.train()

conversation = [
    {
        "role": "user",
        "content": [
            {"type": "audio", "audio": voice_prompt},
            {"type": "text", "text": target_text},
        ],
    },
    {"role": "assistant", "content": [{"type": "audio", "audio": target_audio}]},
]
inputs = processor.apply_chat_template(
    conversation, tokenize=True, return_dict=True
).to(model.device)
loss = model(**inputs).loss
loss.backward()
  • ボイスはキャッシュではなく、録音または潜在変数として指定してください。
  • Classifier-free guidance を行う場合は、user ターン内の audio または text の項目を削除します(元の処理では、それぞれ 0.2 の確率で削除されます)。
  • 事前計算された潜在変数はprocessor_kwargs={"audio_prompt_latents": [...], "labels": [...]}に格納され、空の{"type": "audio"}アイテムがプレースホルダーとして使用されます。
  • 元のレシピ: AdamW、learning_rate=2e-5(新しい言語の場合は 2e-4)、adam_beta2=0.95、weight_decay=0.1、max_grad_norm=1.0、1000 ステップのウォームアップ後に一定、重みの EMA(減衰 0.999)。

PocketTTSConfig

クラス transformers.PocketTTSConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneflow_head_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonevocab_size: int = 4004hidden_size: int = 1024num_hidden_layers: int = 6num_attention_heads: int = 16num_key_value_heads: int | None = Nonehead_dim: int | None = Noneintermediate_size: int = 4096hidden_act: str = 'gelu_pytorch_tanh'layer_norm_eps: float = 1e-05attention_bias: bool = Falseattention_dropout: float = 0.0max_position_embeddings: int = 8192rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Nonelatent_dim: int = 32pad_token_id: int = 3bos_token_id: int | None = Noneeos_token_id: int | None = Noneaudio_prompt_token_id: int = 4000audio_latent_token_id: int = 4001audio_prompt_bos_token_id: int = 4002audio_bos_token_id: int = 4003frame_rate: float = 12.5initializer_range: float = 0.02use_cache: bool = Trueeos_loss_weight: float = 0.1flow_loss_num_samples: int = 4lsd_distill_probability: float = 0.25lsd_diagonal_weight: float = 0.75lsd_time_logit_mean: float = 0.4lsd_time_logit_std: float = 1.0latent_stats_ema_steps: int = 1000latent_stats_ema_decay: float = 0.999 )

パラメータ

  • flow_head_config (Union[PocketTTSFlowHeadConfig, dict]、省略可) — バックボーンの隠れ状態から各潜在変数をサンプリングするフローヘッドの設定です。
  • vocab_size (int、任意、デフォルトは 4004) — モデルの語彙サイズです。input_ids で表現できるトークンの種類数を定義します。
  • hidden_size (int、任意、デフォルトは 1024) — 隠れ表現の次元数。
  • num_hidden_layers (int、任意、デフォルトは 6) — Transformer デコーダーの隠れ層の数。
  • num_attention_heads (int、任意、デフォルトは 16) — Transformer デコーダーの各アテンション層におけるアテンションヘッドの数。
  • num_key_value_heads (int, 任意) — 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 ヘッドは、そのグループ内の元のすべてのヘッドを平均プーリングして構築する必要があります。詳細については、この論文を参照してください。指定されない場合、デフォルトで num_attention_heads が使用されます。
  • head_dim (int、省略可) — アテンションヘッドの次元です。None の場合、hidden_size // num_attention_heads がデフォルトとして使用されます。
  • intermediate_size (int、任意、デフォルトは4096) — MLP 表現の次元数。
  • hidden_act (str、任意、デフォルトは gelu_pytorch_tanh) — デコーダーで使用する非線形活性化関数(関数または文字列)です。例えば、"gelu"、 "relu"、"silu" などです。
  • layer_norm_eps (float、任意、デフォルトは 1e-05) — バックボーンのレイヤーノーマライゼーションの epsilon。
  • attention_bias (bool、任意、デフォルトはFalse) — 自己注意機構において、クエリ、キー、バリュー、出力の投影層にバイアスを使用するかどうかを指定します。
  • attention_dropout (float、任意、デフォルトは 0.0) — アテンション確率のドロップアウト率です。
  • max_position_embeddings (int、任意、デフォルトは 8192) — このモデルが使用される可能性のある最大シーケンス長です。
  • rope_parameters (Union[~modeling_rope_utils.RopeParameters, dict], 省略可) — RoPE 埋め込みの設定パラメータを含む辞書です。この辞書には rope_theta の値が含まれており、より長い max_position_embeddings で RoPE を使用する場合にスケーリングに使用されるパラメータが任意で含まれます。
  • latent_dim (int、任意、デフォルト値は 32)— バックボーンが入力として受け取るオーディオ潜在変数の次元数(audio_prompt_latents、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、任意、デフォルトは 4000)— input_ids における音声プロンプトフレームのプレースホルダトークン ID。
  • audio_latent_token_id (int、任意、デフォルト値は 4001) — input_ids におけるオーディオ潜在位置のプレースホルダトークン ID。
  • audio_prompt_bos_token_id (int、任意、デフォルト値は 4002) — 音声プロンプトの前に配置されるトークン ID。その埋め込みベクトルは、オリジナルが音声の先頭に付加する学習済みベクトルです。
  • audio_bos_token_id (int, 任意、デフォルトは 4003) — プロンプトを閉じる最初のオーディオ位置のトークン ID です。学習済みの BOS 潜在変数を持ち、そこから最初のフレームが生成されます。
  • frame_rate (float、任意、デフォルト値は 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、任意、デフォルト値は 4) — フロー損失におけるターゲットフレームごとのノイズサンプリング回数。
  • lsd_distill_probability (float、任意、デフォルト値 0.25) — LSD ロスの自己蒸留項を計算する確率(期待損失を一定に保つため、重み付けが適用されます)。1 を指定すると、すべてのステップで計算されます。
  • lsd_diagonal_weight (float、任意、デフォルト値は 0.75) — LSD ロスの対角項(瞬間フロー項)の重み。自己蒸留項が残り(1 - 0.75)の重みを担います。
  • lsd_time_logit_mean (float、任意、デフォルト値は 0.4) — LSD ロスによってサンプリングされるフロー時間のロジット正規分布の平均値です。
  • lsd_time_logit_std (float、任意、デフォルト値は 1.0)— LSD ロスによってサンプリングされるフロー時間のロジット正規分布の標準偏差です。
  • latent_stats_ema_steps (int、任意、デフォルト値は 1000)— latent_mean と latent_std が、ターゲットの潜在変数に対する指数移動平均に従う最初の学習ステップ数です。0 に設定すると、これらは固定されます。
  • latent_stats_ema_decay (float、任意、デフォルト値は 0.999) — この移動平均の減衰率です。

これはPocketTTSModelの設定を保存するための設定クラスです。指定された引数に基づいてPocket Ttsモデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、eustlb/pocket-ttsと類似した設定が得られます。

設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。

PocketTTSFlowHeadConfig

class transformers.PocketTTSFlowHeadConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 512num_hidden_layers: int = 6latent_dim: int = 32condition_dim: int = 1024frequency_embedding_size: int = 256hidden_act: str = 'silu'layer_norm_eps: float = 1e-06rms_norm_eps: float = 1e-05max_period: float = 10000.0flow_type: typing.Literal['lsd', 'drifting'] = 'lsd'loss_weighting_hidden_size: int = 32loss_weighting_num_layers: int = 3 )

パラメータ

  • hidden_size (int、任意、デフォルトは 512) — 隠れ表現の次元数。
  • num_hidden_layers (int、任意、デフォルトは 6) — Transformer デコーダーの隠れ層の数。
  • latent_dim (int、任意、デフォルトは 32) — ヘッドが予測する連続オーディオ潜在変数の次元(オーディオトークナイザーの潜在次元)。
  • condition_dim (int、任意、デフォルトは 1024) — ヘッドが条件付けられるバックボーンの隠れ状態の次元数(バックボーンの hidden_size)。
  • frequency_embedding_size (int、任意、デフォルト値は 256) — フロー時間の正弦波埋め込みのサイズです。
  • hidden_act (str、任意、デフォルトは silu) — デコーダーで使用する非線形活性化関数(関数または文字列)。例えば、"gelu"、 "relu"、"silu" など。
  • layer_norm_eps (float、任意、デフォルトは 1e-06) — 残差ブロック内および最終層の層正規化における Epsilon 値。
  • rms_norm_eps (float, 任意、デフォルト値は 1e-05) — 時間埋め込みを閉じる正規化の epsilon。
  • max_period (float、任意、デフォルト値は 10000.0) — チェックポイントがfreqsとして保存する、正弦波時間埋め込みの最大周期です。
  • flow_type (str、任意、デフォルトは "lsd") — ヘッドが学習された目的であり、条件付けとサンプリングの方式を決定します。 "lsd"(Lagrangian self-distillation): フローステップの開始時刻と終了時刻で条件付けられ、ガウスノイズから Euler ステップでサンプリングされます。 "drifting": 時刻による条件付けはなく、ヘッドが 1 回の呼び出しでノイズを潜在変数にマッピングします。
  • loss_weighting_hidden_size (int, 任意、デフォルト値は 32) — LSD の損失項のフロータイムから不確実性重みを学習するための MLP の幅(学習時のみ使用)。
  • loss_weighting_num_layers (int、任意、デフォルト値は 3) — その MLP の隠れ層の数です。

これはPocketTTSModelの設定を保存するための設定クラスです。指定された引数に基づいてPocket Ttsモデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、eustlb/pocket-ttsと類似した設定が得られます。

設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。

PocketTTSFeatureExtractor

class transformers.PocketTTSFeatureExtractor

< >

( feature_size = 1sampling_rate = 24000padding_value = 0.0frame_size = 1920pad_to_multiple_of = 1920end_on_pause = Truepause_duration = 0.08fade_out_duration = 0.02silence_floor_db = 35.0analysis_frame_duration = 0.02**kwargs )

パラメータ

  • feature_size (int、任意、デフォルトは 1) — チャネル数です。
  • sampling_rate (int, 任意、デフォルトは 24000) — オーディオ波形をデジタル化するためのサンプリングレート (Hz)。
  • padding_value (float、任意、デフォルトは 0.0) — パディングに使用される値です。
  • frame_size (int、任意、デフォルトは 1920) — オーディオ トークナイザーの潜在フレームあたりのオーディオサンプル数(そのframe_size)。
  • pad_to_multiple_of (int、任意、デフォルト値は 1920) — オーディオをこの値の倍数にパディングします。frame_size の倍数にすると、すべての潜在フレームが完全に保持されます。
  • end_on_pause (bool、任意、デフォルトは True) — 各波形をちょうど pause_duration 秒の無音で終了させるかどうかを指定します。最大音量より silence_floor_db 低い無音部分(analysis_frame_duration 秒分のフレーム)が切り捨てられ、残りの最後の fade_out_duration 秒がフェードアウトされ、最後に pause_duration 秒分のゼロが追加されます。
  • pause_duration (float、任意、デフォルトは 0.08) — end_on_pause によって追加される無音の長さ(秒)。
  • fade_out_duration (float、任意、デフォルトは 0.02) — end_on_pause によってポーズ前に適用されるフェードアウトの持続時間(秒)。
  • silence_floor_db (float、任意、デフォルト値は 35.0) — 最も大きな解析フレームのレベルから、end_on_pause が末尾のフレームを無音とみなす閾値 (dB)。
  • analysis_frame_duration (float、任意、デフォルトは 0.02) — end_on_pause がレベルを測定するフレームの長さ(秒)。

Pocket TTS の特徴量抽出器を構築します。これは、音声プロンプトの波形をオーディオトークナイザーのエンコーダー用に準備します。

各波形は、短い休止で終わる場合があります(元のend_on_pause: トレーニング用のプロンプトは2つの単語間の休止の途中で終わっており、発話で止まるプロンプトはモデルにその続きを生成させ、長い沈黙で終わるプロンプトは発話の開始を遅らせます)。その後、バッチはトークナイザーのフレームサイズの倍数になるよう右パディングされます。

__call__

< >

( audio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor']]sampling_rate: int | None = Noneend_on_pause: bool | None = Nonepadding: bool | str | transformers.utils.generic.PaddingStrategy | None = Truepad_to_multiple_of: int | None = Nonemax_length: int | None = Nonereturn_attention_mask: bool | None = Truereturn_tensors: str | None = 'pt'**kwargs )

パラメータ

  • audio (np.ndarray、torch.Tensor、list[np.ndarray]、list[torch.Tensor]) — 音声プロンプトのモノラル波形、またはモノラル波形のバッチです。
  • sampling_rate (int, 任意) — audio 入力がサンプリングされたレートです。サイレントエラーを防ぐため、forward 呼び出し時に sampling_rate を渡すことを強く推奨します。
  • end_on_pause (bool、任意) — 短いポーズで各波形を終了するかどうか。クラス docstring を参照してください。デフォルトは self.end_on_pause です。
  • padding (bool、str または PaddingStrategy、任意、デフォルトは True) — バッチのパディング戦略です。pad() を参照してください。
  • pad_to_multiple_of (int, 省略可) — バッチをこの値の倍数にパディングします。デフォルトは self.pad_to_multiple_of です。

PocketTTSProcessor

class transformers.PocketTTSProcessor

< >

( feature_extractortokenizeraudio_tokenizer = Nonechat_template = Noneshort_text_max_words: int = 4frames_after_eos_short_text: int = 4frames_after_eos: int = 2fade_in_duration: float = 0.005 )

パラメータ

  • feature_extractor (PocketTTSFeatureExtractor) — フィーチャーエクストラクターは必須の入力です。
  • tokenizer (TokenizersBackend) — トークナイザーは必須の入力です。
  • audio_tokenizer (PocketTTSAudioTokenizerModel、任意) — コーデックです。オーディオを潜在変数にエンコードし、生成された潜在変数をオーディオにデコードします。
  • chat_template (str) — チャット内のメッセージのリストをトークン化可能な文字列に変換するための Jinja テンプレート。
  • short_text_max_words (int、任意、デフォルトは 4) — 単語数がこれ以下のテキストには、発話終了フレームの後に frames_after_eos_short_text フレームが追加されます。
  • frames_after_eos_short_text (int、任意、デフォルト値は 4)— 短いテキストの場合、発話終了フレームの後に生成されるフレーム数です。
  • frames_after_eos (int、任意、デフォルト値は 2)— 長いテキストの場合、発話終了フレームの後に生成されるフレーム数。
  • fade_in_duration (float, 任意、デフォルト値は 0.005) — デコードされた各波形の先頭に適用されるリニアフェードインの秒数です。新しいデコーダー状態は小さなステップから始まるため、クリック音として聞こえます。

PocketTTSProcessor を構築します。このクラスは、フィーチャーエクストラクターとトークナイザーを単一のプロセッサーにラップします。

PocketTTSProcessor は、PocketTTSFeatureExtractor と TokenizersBackend のすべての機能を提供します。詳細については、~PocketTTSFeatureExtractor および ~TokenizersBackend を参照してください。

__call__

< >

( text: str | list[str] | None = Noneaudio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor'], NoneType] = Noneaudio_prompt_latents: list[torch.Tensor] | None = Nonelabels: list[torch.Tensor] | None = None**kwargs: *<class 'transformers.models.pocket_tts.processing_pocket_tts.PocketTTSProcessorKwargs'> )

パラメータ

  • text (str または list[str]) — apply_chat_template() によってレンダリングされたプロンプトです。
  • audio (np.ndarray、torch.Tensor、またはそれらのリスト、任意) — 会話の波形です。モノラル、24 kHz、会話の順序に従います。各音声、および学習時には各ターゲットです。
  • audio_prompt_latents (list[torch.Tensor], 任意) — 波形の代わりに、各ボイスプレースホルダーごとに (num_frames, latent_dim) のテンソルとして、事前計算されたボイスを指定します。
  • labels (list[torch.Tensor]、任意) — 波形の代わりに、各ターゲットプレースホルダーごとに (num_frames, latent_dim) のテンソルとして与えられる、事前計算済みのターゲット(学習用)。
  • end_on_pause (bool、kwargs、任意) — 元の音声クローン処理と同様に、各音声プロンプトの波形を短いポーズで終了させるかどうかを指定します。 デフォルトでは、フィーチャーエクストラクターのend_on_pauseが使用されます。
  • return_tensors (str または TensorType, 省略可) — 設定すると、特定のフレームワークのテンソルを返します。使用可能な値は以下の通りです:
    • 'pt': PyTorchのtorch.Tensorオブジェクトを返します。
    • 'np': NumPyのnp.ndarrayオブジェクトを返します。
  • **kwargs (ProcessingKwargs、任意) — 各モダリティ(テキスト、画像、動画、音声)の追加処理オプション。モデル固有のパラメータは上記にリストされています。サポートされている引数の完全なリストについては、TypedDictクラスを参照してください。

split_text

< >

( text: strmax_tokens: int = 50 )

パラメータ

  • text (str) — 分割するテキスト。
  • max_tokens (int、任意、デフォルト値は 50)— チャンクあたりの最大トークン数。

text を、元の split_into_best_sentences と同様に、最大 max_tokens トークンまでの文境界に整列したチャンクに分割します。準備されたテキストは、文の終了後に切り詰められます(小数点では切り詰めません)。max_tokens を超える文は句読点の後に切り詰められ、それらの断片は貪欲にグループ化されます。各チャンクは、バッチの1つの会話として扱われることを意図しています。

decode

< >

( audio_latents: torch.Tensoraudio_latents_mask: torch.Tensor | None = None )

パラメータ

  • audio_latents (torch.Tensor、shape (batch_size, num_frames, latent_dim) または (num_frames, latent_dim)) — generate が返す latents (PocketTTSGenerateOutput.audio_latents) を、1 バッチとしてデコードしたもの、または 1 サンプルの latents です。
  • audio_latents_mask (torch.Tensor、形状 (batch_size, num_frames)、任意) — 各サンプルのフレームのマスク (PocketTTSGenerateOutput.audio_latents_mask)。これを指定しない場合、すべての行がフルレングスでデコードされます。

生成された潜在変数をオーディオトークナイザーで波形にデコードし、元の動作と同様に、各波形の最初のfade_in_duration秒間をフェードインします。

save_audio

< >

( audio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor']]saving_path: str | pathlib.Path | list[str | pathlib.Path]sampling_rate: int | None = None )

生成された波形をWAVファイルに書き込みます。

audio (torch.Tensor、np.ndarray、またはそれらのリスト): decode()によって返される波形です。 saving_path (str、Path、またはそれらのリスト): 波形ごとに1つのパスを指定します。 sampling_rate (int、省略可能): 波形のサンプリングレートです。デフォルトでは、フィーチャーエクストラクター(オーディオトークナイザー)の値が使用されます。

PocketTTSModel

class transformers.PocketTTSModel

< >

( config: PocketTTSConfig )

パラメータ

  • config (PocketTTSConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。

Pocket TTSのバックボーン: 音声プロンプト、テキストトークン、オーディオ潜在変数で構成される単一のストリームに対する因果型Transformerで、正規化された隠れ状態を返します。音声プロンプトとオーディオ潜在変数は、プロセッサが保持するオーディオトークナイザの潜在変数です。

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

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

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneaudio_prompt_latents: typing.Optional[torch.FloatTensor] = Noneaudio_prompt_latents_mask: typing.Optional[torch.Tensor] = Noneaudio_latents: typing.Optional[torch.FloatTensor] = Noneaudio_latents_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPast or tuple(torch.FloatTensor)

パラメータ

  • input_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。

    インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。

    入力IDとは何ですか?

  • audio_prompt_latents (torch.FloatTensor、shape (batch_size, num_prompt_frames, latent_dim)、任意) — audio tokenizer のボイスポンプトの潜在変数(processor によってエンコードされたもの、またはチェックポイントの voices/)。 バッチ内でもっとも長いボイスに合わせて右パディングされ、audio_prompt_token_id の位置に配置されます。
  • audio_prompt_latents_mask (torch.Tensor、形状 (batch_size, num_prompt_frames)、任意) — audio_prompt_latents における音声フレーム(1)とパディング(0)を区別するためのマスクです。
  • audio_latents (torch.FloatTensor、形状 (batch_size, num_latents, latent_dim)、任意) — 正規化されたオーディオ潜在変数です。audio_latent_token_id の位置に配置されます。その直前の audio_bos_token_id の位置は、プロンプトを閉じ、最初のフレームの生成を開始する位置であり、常に学習された BOS 潜在変数が割り当てられます。
  • audio_latents_mask (torch.Tensor、形状 (batch_size, num_latents)、任意) — 行ごとに潜在位置の数が異なる場合(学習時)、audio_latents における各行の潜在変数(1)とパディング(0)を区別するためのマスク。
  • attention_mask (torch.Tensor の形状 (batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。 [0, 1]:
    • マスクされていないトークンに対して1
    • マスクされたトークンに対しては 0 です。

    アテンションマスクとは?

  • position_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、任意) — 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックス。範囲 [0, config.n_positions - 1].

    ポジションIDとは?

  • past_key_values (~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返した past_key_values であり、 use_cache=True または config.use_cache=True.

    入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。 past_key_values が渡されない場合、デフォルトで DynamicCache が初期化されます。

    モデルは、入力として与えられたのと同じキャッシュ形式を出力します。

    past_key_values を使用する場合、すべての input_ids(形状 (batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理の input_ids(形状 (batch_size, unprocessed_length))のみを入力することになります。

  • inputs_embeds (torch.FloatTensor、形状 (batch_size, sequence_length, hidden_size)、任意) — input_ids を渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_ids のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。
  • use_cache (bool、任意) — True に設定すると、past_key_values のキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_values を参照)。

戻り値

BaseModelOutputWithPast または tuple(torch.FloatTensor)

torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または BaseModelOutputWithPast。設定(PocketTTSConfig)や入力に応じて、さまざまな要素で構成されます。

PocketTTSModelの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 (Cache、任意、use_cache=True が渡された場合または config.use_cache=True の場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。

    自己アテンションブロック(および config.is_encoder_decoder=True の場合、クロスカレンションブロック)の事前計算済みヒドゥンステート(キーとバリュー)を保持します。これらは逐次デコーディングを高速化するために使用できます(past_key_values 入力参照)。

  • 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、および任意の初期埋め込み出力。

  • attentions (tuple(torch.FloatTensor)、optional、output_attentions=True が渡された場合または config.output_attentions=True の場合に返されます)— torch.FloatTensor のタプル(各レイヤーごとに1つ)、形状は (batch_size, num_heads, sequence_length, sequence_length)。

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

PocketTTSForConditionalGeneration

クラス transformers.PocketTTSForConditionalGeneration

< >

( config: PocketTTSConfig )

パラメータ

  • config (PocketTTSConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。

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

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

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

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneaudio_prompt_latents: typing.Optional[torch.FloatTensor] = Noneaudio_prompt_latents_mask: typing.Optional[torch.Tensor] = Noneaudio_latents: typing.Optional[torch.FloatTensor] = Nonelabels: typing.Optional[torch.FloatTensor] = Nonelabels_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → PocketTTSOutputWithPast or tuple(torch.FloatTensor)

パラメータ

  • input_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。

    インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。

    入力IDとは何ですか?

  • audio_prompt_latents (torch.FloatTensor、形状 (batch_size, num_prompt_frames, latent_dim)、任意) — 音声トークナイザーの音声プロンプトの潜在変数です。右パディングが適用され、audio_prompt_token_id の位置に配置されています。
  • audio_prompt_latents_mask (torch.Tensor、形状 (batch_size, num_prompt_frames)、任意) — audio_prompt_latents における音声フレーム(1)とパディング(0)を区別するためのマスクです。
  • audio_latents (torch.FloatTensor、shape (batch_size, num_latents, latent_dim)、任意) — audio_latent_token_id の位置に分散配置された、正規化されたオーディオ潜在変数です。
  • labels (torch.FloatTensor、shape (batch_size, num_frames, latent_dim)、任意) — 音声トークナイザーのターゲット潜在変数(学習用)、右パディング済み。各行のプロンプトは、audio_bos_token_id の位置で始まり、その後、フレームごとに 1 つの audio_latent_token_id 位置が続きます。モデルは正規化されたターゲット(ティーチャージング)を入力し、BOS および最後のフレームを除くすべてのフレームの出力にフロー損失を適用します(これらはフレームを予測します)。また、すべてのフレームに発話終了損失を適用し、最後のフレームが発話の終了を表します。
  • labels_mask (torch.Tensor、形状 (batch_size, num_frames)、任意) — labels における各行のターゲットフレーム(1)とパディング(0)を区別するためのマスク。
  • attention_mask (torch.Tensor の形状 (batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。 [0, 1]:
    • マスクされていないトークンに対して1
    • マスクされたトークンに対しては 0 です。

    アテンションマスクとは?

  • position_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、任意) — 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックス。範囲 [0, config.n_positions - 1].

    ポジションIDとは?

  • past_key_values (~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返した past_key_values であり、 use_cache=True または config.use_cache=True.

    入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。 past_key_values が渡されない場合、デフォルトで DynamicCache が初期化されます。

    モデルは、入力として与えられたのと同じキャッシュ形式を出力します。

    past_key_values を使用する場合、すべての input_ids(形状 (batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理の input_ids(形状 (batch_size, unprocessed_length))のみを入力することになります。

  • inputs_embeds (torch.FloatTensor、形状 (batch_size, sequence_length, hidden_size)、任意) — input_ids を渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_ids のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。
  • use_cache (bool、任意) — True に設定すると、past_key_values のキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_values を参照)。

戻り値

PocketTTSOutputWithPast または tuple(torch.FloatTensor)

PocketTTSOutputWithPast、またはtorch.FloatTensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(PocketTTSConfig)や入力に応じて、さまざまな要素で構成されます。

PocketTTSForConditionalGenerationのforwardメソッドは、__call__特殊メソッドをオーバーライドします。

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

  • loss (torch.FloatTensor、shape ()、optional、labels が渡された場合に返されます) — 学習損失: ターゲットの潜在変数の LSD フロー損失に、config.eos_loss_weight 倍の end-of-speech 損失を加えた値。

  • logits (torch.FloatTensor、形状 (batch_size, sequence_length, 1)) — 音声終了の logits。各位置ごとに1つ。

  • past_key_values (Cache、任意、use_cache=True が渡された場合または config.use_cache=True の場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。

    逐次デコーディングを高速化するために使用できる(past_key_values 入力参照)、事前計算済みの隠れ状態(自己注意ブロックのキーとバリュー)が含まれます。

  • 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、および任意の初期埋め込み出力。

  • attentions (tuple(torch.FloatTensor)、optional、output_attentions=True が渡された場合または config.output_attentions=True の場合に返されます)— torch.FloatTensor のタプル(各レイヤーごとに1つ)、形状は (batch_size, num_heads, sequence_length, sequence_length)。

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

  • last_hidden_state (torch.FloatTensor、shape (batch_size, sequence_length, hidden_size)) — フローヘッドを条件づける、バックボーンの正規化された隠れ状態です。

例:

>>> from transformers import AutoProcessor, PocketTTSForConditionalGeneration

>>> model = PocketTTSForConditionalGeneration.from_pretrained("eustlb/pocket-tts")

>>> processor = AutoProcessor.from_pretrained("eustlb/pocket-tts")
>>> inputs = processor(text="Hello, my dog is cute", return_tensors="pt")

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

generate

< >

( inputs: typing.Optional[torch.Tensor] = None**kwargs )

パラメータ

  • inputs (torch.LongTensor、形状 (batch_size, sequence_length)、任意) — 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(デフォルトでは生成設定の値が使用されます)。

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

sample_latent

< >

( condition: Tensornoise: Tensornum_flow_steps: int ) → torch.FloatTensor of shape (batch_size, latent_dim)

パラメータ

  • condition (torch.FloatTensor、形状 (batch_size, hidden_size)) — 生成対象の位置の Backbone の隠れ状態です。
  • noise (torch.FloatTensor、形状 (batch_size, latent_dim)) — sqrt(temperature) 倍でスケーリングされたガウスノイズ、またはゼロ。
  • num_flow_steps (int) — LSD サンプラーの Euler ステップ数です(drifting head は 1 回の呼び出しで処理するため、無視されます)。

戻り値

torch.FloatTensor、形状 (batch_size, latent_dim)

正規化空間におけるサンプリングされた潜在変数。

フローヘッドを使用して、noiseから次の潜在変数をサンプリングします。

denormalize_latents

< >

( audio_latents: Tensor )

フローヘッドの正規化空間から、オーディオトークナイザーの空間へ潜在変数をマッピングします。

PocketTTSGenerateOutput

クラス transformers.models.pocket_tts.generation_pocket_tts.PocketTTSGenerateOutput

< >

( sequences: LongTensorscores: tuple[torch.FloatTensor] | None = Nonelogits: tuple[torch.FloatTensor] | None = Noneattentions: tuple[tuple[torch.FloatTensor]] | None = Nonehidden_states: tuple[tuple[torch.FloatTensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneaudio_latents: typing.Optional[torch.FloatTensor] = Noneaudio_latents_mask: typing.Optional[torch.LongTensor] = None )

パラメータ

  • sequences (torch.LongTensor、shape (batch_size, sequence_length)) — プロンプトのトークン ID の後に、生成された各フレームごとに 1 つの audio_latent_token_id が続きます。音声データ自体は audio_latents に格納されています。
  • scores (tuple(torch.FloatTensor) 任意、output_scores=True の場合に返されます) — 生成された各フレームの end-of-speech logit です。フレームごとに (batch_size,) の形状を持つテンソルが 1 つ返されます。
  • logits (tuple(torch.FloatTensor) 任意、output_logits=True の場合のみ返却) — scores と同じです。Pocket TTS には語彙がないため、両者の間に処理するものはありません。
  • attentions (tuple(tuple(torch.FloatTensor))、任意、output_attentions=True の場合のみ返されます) — torch.FloatTensor のタプルのタプル(生成された各フレームごとに1要素、各レイヤーごとに1要素)で、形状は (batch_size, num_heads, generated_length, sequence_length) です。
  • hidden_states (tuple(tuple(torch.FloatTensor))、任意、output_hidden_states=True の場合のみ返されます)— 生成された各フレームに対応する要素を 1 つずつ持つタプルで、各要素は各レイヤーに対応する要素を 1 つずつ持つ torch.FloatTensor のタプルです。形状は (batch_size, generated_length, hidden_size) です。
  • past_key_values (Cache、任意、use_cache=True の場合のみ返されます)— 生成が終了した時点のバックボーンのキー/バリューキャッシュです。
  • audio_latents (torch.FloatTensor、shape (batch_size, num_frames, latent_dim)) — 生成された潜在変数です。audio tokenizer の潜在空間における値で、各サンプル自身のフレーム数を超えた部分はゼロで右パディングされています。PocketTTSProcessor.decode() を使用すると、これらを波形に変換できます。
  • audio_latents_mask (torch.LongTensor、形状 (batch_size, num_frames)) — 各サンプルのフレームのマスクです。パディング (0) とは異なり、発話終了フレームおよびそれ以降のフレームを含む部分 (1) を示します。

PocketTTSForConditionalGeneration.generateの出力。

Update on GitHub