Transformers documentation

Gradium Phonon TTS

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。

Gradium Phonon TTS

概述

Gradium Phonon TTS 是 Gradium 的端侧文本转语音模型系列,采用 Pocket TTS 的训练方案:一个因果 Transformer 读取语音提示和文本,然后通过单步流头以 12.5 Hz 的频率在每一步输出一个连续的 32 维音频潜在表示,并由语音结束头判断语句何时结束。这些潜在表示由处理器持有的 Pocket TTS audio tokenizer 解码为 24 kHz 音频,该处理器即 Pocket TTS 的 PocketTTSProcessor。

它与 Pocket TTS 在语音条件化方面有所不同:语音提示由一个独立的说话人编解码器生成的 512 维潜在向量构成,并且会在每个音频潜在向量的位置上添加一个学习得到的说话人向量。由于该说话人编解码器并未公开,语音以预计算的潜在向量形式提供(包括每个检查点的 default-voice.safetensors 以及 gradium/phonon-voices 中的语音目录),且音频分词器仅包含解码器:因此无法从录音中克隆语音。

检查点参数语言许可证
gradium/phonon-31m-en31M英语Apache 2.0
gradium/phonon-40m-en40M英语CC BY-NC 4.0
gradium/phonon-40m-fr40M法语CC BY-NC 4.0
gradium/phonon-40m-de40M德语CC BY-NC 4.0
gradium/phonon-40m-es40M西班牙语CC BY-NC 4.0
gradium/phonon-40m-pt40M葡萄牙语CC BY-NC 4.0
gradium/phonon-40m-multilingual40M英语、法语、德语、西班牙语、葡萄牙语CC BY-NC 4.0

它们的加载方式都相同:切换检查点意味着更改仓库 ID。

该模型由 Eustache Le Bihan 贡献。原始代码为 gradium-ai/xn-ptts。

使用技巧

  • 使用 apply_chat_template() 准备输入:每段文本对应一条 user 消息,在语音所在位置放置一个空的 {"type": "audio"} 项,通过 processor_kwargs={"audio_prompt_latents": [...]} 传入语音潜变量,并设置 add_generation_prompt=True。
  • 分词器不会将数字、金额、符号或地址展开拼写,请参阅文本规范化。
  • generate 会返回 audio_latents 和 audio_latents_mask;请使用 PocketTTSProcessor.decode() 对其进行解码。
  • 像 Gradium 的运行时那样生成样本:temperature 设为 0.3(即流起始噪声的方差),并在语音结束 logit 超过 eos_threshold 后不久停止。do_sample=False 表示从零噪声开始流。
  • 模型以 bf16 加载,即其权重存储的数据类型;在 CPU 上请传入 dtype=torch.float32,以匹配 Gradium 在该环境下的运行时。
  • 使用 PocketTTSProcessor.split_text() 拆分长文本,每个分块对应一段对话。

用法

语音

声音是一个潜变量张量,形状为 (num_frames, 512)。每个检查点附带一个默认声音(default-voice.safetensors),而 gradium/phonon-voices 中还有约一百个其他声音,覆盖各种语言,每个声音都有对应的声音 ID(voices.jsonl 列出了它们的名称、语言和描述)。任何声音都可以与任何检查点配合使用。

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

批处理与长文本

批量处理多段文本,每段文本使用各自的声音,并将长文本拆分为多个片段:

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.aiWrite to jean@gradium.ai.Write to jean at gradium dot A-I.
It is 21°CIt is 21°C.It is 21 degrees Celsius.

对于这类情况,请使用 Gradium 运行时的文本规范化功能 ptts,或者将它们完整写出。

GradiumPhononTTSConfig

class transformers.GradiumPhononTTSConfig

< >

( 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 = 4001hidden_size: int = 768num_hidden_layers: int = 6num_attention_heads: int = 12num_key_value_heads: int | None = Nonehead_dim: int | None = Noneintermediate_size: int = 3072hidden_act: str = 'gelu'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 = 5audio_latent_token_id: int = 6audio_bos_token_id: int = 4frame_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.999audio_prompt_dim: int = 512num_speakers: int = 1num_speakers_vocab_size: int = 32num_speakers_embedding_dim: int = 16duration_delta: float = 0.0duration_delta_embedding_dim: int = 128duration_delta_scale: float = 1000.0duration_delta_max_period: float = 10000.0 )

参数

  • flow_head_config (Union[GradiumPhononTTSFlowHeadConfig, dict], 可选) — 用于从主干隐藏状态中采样每个潜在变量的 flow head 配置。
  • vocab_size (int,可选,默认为 4001) — 模型的词汇表大小。定义了 input_ids 可以表示的不同 token 的数量。
  • hidden_size (int,可选,默认为 768) — 隐藏表示的维度。
  • num_hidden_layers (int,可选,默认为 6) — Transformer 解码器中的隐藏层数量。
  • num_attention_heads (int,可选,默认为 12) — 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,可选,默认为 3072) — MLP 表示的维度。
  • hidden_act (str,可选,默认为 gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、 "relu"、"silu" 等。
  • layer_norm_eps (float,可选,默认值为 1e-05) — 骨干网络中层归一化的 epsilon 值。
  • attention_bias (bool,可选,默认为 False) — 在自注意力机制中,是否在 query、key、value 和 output 投影层中使用偏置。
  • attention_dropout (float,可选,默认为 0.0) — 注意力概率的 dropout 比率。
  • max_position_embeddings (int,可选,默认为 8192) — 该模型可能使用的最大序列长度。
  • rope_parameters (Union[~modeling_rope_utils.RopeParameters, dict], 可选) — 包含 RoPE 嵌入配置参数的字典。该字典应包含 rope_theta 的值,并且如果希望使用 RoPE 处理更长的 max_position_embeddings,则可选地包含用于缩放的参数。
  • latent_dim (int,可选,默认为 32) — 主干网络接收的音频潜在变量(audio_latents)的维度;等于 flow head 和音频 tokenizer 的 latent_dim。
  • pad_token_id (int,可选,默认为 3) — 词表中用于填充的 token id。
  • bos_token_id (int, 可选) — 词汇表中用于表示流起始的 Token id。
  • eos_token_id (int, 可选) — 词汇表中用于表示流结束(end-of-stream)的 token id。
  • audio_prompt_token_id (int,可选,默认为 5) — input_ids 中语音提示帧的占位符 token id(<|audio_prompt|>)。
  • audio_latent_token_id (int, 可选,默认为 6) — input_ids 中音频潜在位置占位符的 token id(<|audio_latent|>)。
  • audio_bos_token_id (int,可选,默认为 4) — 第一个音频位置的 Token id,用于闭合提示:它保存了学习到的 BOS 潜在向量,首帧即由此生成(<|audio_bos|>)。
  • frame_rate (float,可选,默认值为 12.5) — 每秒音频对应的音频潜在变量数量: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 损失中对角项(瞬时流项)的权重;自蒸馏项负责其余部分。
  • lsd_time_logit_mean (float, 可选,默认为 0.4) — LSD 损失所采样的流时间的 logit-normal 分布的均值。
  • lsd_time_logit_std (float, 可选,默认为 1.0) — LSD 损失所采样的流时间的 logit-normal 分布的标准差。
  • latent_stats_ema_steps (int,可选,默认为 1000) — 在最初多少个训练步骤中,latent_mean 和 latent_std 会跟随目标潜变量的指数移动平均;设为 0 则保持它们冻结不变。
  • latent_stats_ema_decay (float,可选,默认值为 0.999) — 该移动平均的衰减系数。
  • audio_prompt_dim (int,可选,默认值为 512) — 语音提示潜在变量(audio_prompt_latents)的维度,即 Gradium 说话人编解码器(Mimi 编码器,而非音频分词器)的未量化潜在变量,主干网络会将其投影到 hidden_size。
  • num_speakers(int,可选,默认为 1)— num_speakers 条件的取值:其查找表的一行,会加到每个音频潜在位置(audio latent position)上。
  • 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 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。

GradiumPhononTTSFlowHeadConfig

class transformers.GradiumPhononTTSFlowHeadConfig

< >

( 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 = 768frequency_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,可选,默认值为 768) — 头部所依赖的骨干网络隐藏状态的维度(即骨干网络的 hidden_size)。
  • frequency_embedding_size (int, 可选,默认为 256) — 流时间的正弦嵌入的维度。
  • hidden_act (str,可选,默认为 silu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、 "relu"、"silu" 等。
  • layer_norm_eps (float,可选,默认值为 1e-06) — 残差块内部及最终层中 layer normalization 的 epsilon 值。
  • rms_norm_eps (float,可选,默认值为 1e-05) — 用于结束时间嵌入的归一化的 epsilon 值。
  • max_period (float,可选,默认值为 10000.0) — 正弦时间嵌入的最大周期,检查点将其存储为 freqs。
  • flow_type (str,可选,默认为 "lsd") — 训练该 head 时所使用的目标函数,它决定了 head 的条件化方式和采样方式。"lsd"(Lagrangian self-distillation):以流步骤的起始时间和结束时间为条件,从高斯噪声出发,通过 Euler 步进行采样。"drifting":无时间条件,head 在一次调用中将噪声映射到潜在表示。
  • loss_weighting_hidden_size (int,可选,默认值为 32) — 用于从 LSD 损失项的流时间中学习不确定性加权的 MLP 的宽度(仅用于训练)。
  • loss_weighting_num_layers (int,可选,默认为 3) — 该 MLP 的隐藏层数量。

这是用于存储 GradiumPhononTTSModel 配置的类。它根据指定的参数实例化 Gradium Phonon Tts 模型,并定义模型架构。使用默认值实例化配置将得到与 gradium/phonon-31m-en 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。

GradiumPhononTTSModel

class transformers.GradiumPhononTTSModel

< >

( config: GradiumPhononTTSConfig )

参数

  • config (GradiumPhononTTSConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

Gradium Phonon TTS 骨干网络:一个因果 Transformer,作用于由语音提示(说话人-编解码器潜在变量)、文本标记和音频潜在变量组成的单一数据流,并返回归一化后的隐藏状态。

该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneaudio_prompt_latents: typing.Optional[torch.Tensor] = Noneaudio_prompt_latents_mask: typing.Optional[torch.Tensor] = Noneaudio_latents: typing.Optional[torch.Tensor] = 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.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPast or tuple(torch.Tensor)

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length), ,可选) — 输入序列中各 token 在词汇表中的索引。默认情况下,填充(padding)将被忽略。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。

    什么是输入 ID?

  • audio_prompt_latents (torch.Tensor,形状为 (batch_size, num_prompt_frames, latent_dim),可选) — 音频分词器的语音提示潜在表示(由处理器编码,或来自检查点的 voices/), 右侧填充至批次中最长的语音,并散布到 audio_prompt_token_id 对应的位置。
  • audio_prompt_latents_mask(形状为 (batch_size, num_prompt_frames) 的 torch.Tensor,可选) — audio_prompt_latents 中语音帧(1)与填充(0)的掩码。
  • audio_latents(形状为 (batch_size, num_latents, latent_dim) 的 torch.Tensor,可选) — 归一化的音频潜在变量,分散到 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), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • position_ids (torch.LongTensor 形状为 (batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为 [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, unprocessed_length),而不是形状为 (batch_size, sequence_length) 的全部 input_ids。

  • inputs_embeds(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor,可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入 input_ids。如果您希望对 input_ids 索引如何转换为相应向量拥有比模型内部嵌入查找矩阵更多的控制权,这将非常有用。
  • use_cache (bool,可选) — 如果设置为 True,则会返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。

返回值

BaseModelOutputWithPast 或 tuple(torch.Tensor)

一个 BaseModelOutputWithPast 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(GradiumPhononTTSConfig)和输入。

GradiumPhononTTSModel 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

  • last_hidden_state(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor)— 模型最后一层输出的隐藏状态序列。

    如果使用了 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.Tensor),可选,当传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。

  • attentions (tuple(torch.Tensor),可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。

GradiumPhononTTSForConditionalGeneration

类 transformers.GradiumPhononTTSForConditionalGeneration

< >

( config: GradiumPhononTTSConfig )

参数

  • config (GradiumPhononTTSConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

Gradium Phonon TTS 文本转语音模型:包括主干网络、每步采样一个音频潜变量的流式头部,以及语音结束头部。它生成音频分词器潜变量,处理器将其解码为 24 kHz 音频。

该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneaudio_prompt_latents: typing.Optional[torch.Tensor] = Noneaudio_prompt_latents_mask: typing.Optional[torch.Tensor] = Noneaudio_latents: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = 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.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → GradiumPhononTTSOutputWithPast or tuple(torch.Tensor)

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length), ,可选) — 输入序列中各 token 在词汇表中的索引。默认情况下,填充(padding)将被忽略。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。

    什么是输入 ID?

  • audio_prompt_latents (torch.Tensor,形状为 (batch_size, num_prompt_frames, latent_dim),可选) — 音频分词器的语音提示潜在表示,右侧填充,并分散到 audio_prompt_token_id 对应的位置。
  • audio_prompt_latents_mask(形状为 (batch_size, num_prompt_frames) 的 torch.Tensor,可选) — audio_prompt_latents 中语音帧(1)与填充(0)的掩码。
  • audio_latents(形状为 (batch_size, num_latents, latent_dim) 的 torch.Tensor,可选) — 归一化的音频潜在变量,散布在 audio_latent_token_id 位置。
  • labels (torch.Tensor,形状为 (batch_size, num_frames, latent_dim),可选) — 音频分词器的目标潜变量(用于训练),右侧填充。每一行的提示以 audio_bos_token_id 位置结尾,随后每个帧对应一个 audio_latent_token_id 位置:模型输入归一化后的目标(教师强制),对 BOS 及除最后一帧之外的所有帧的输出应用流损失,这些帧用于预测后续帧;并对所有帧应用语音结束损失,其中最后一帧即为语音结束。
  • labels_mask(形状为 (batch_size, num_frames) 的 torch.Tensor,可选) — labels 中每行目标帧(1)与填充(0)的掩码。
  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • position_ids (torch.LongTensor 形状为 (batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为 [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, unprocessed_length),而不是形状为 (batch_size, sequence_length) 的全部 input_ids。

  • inputs_embeds(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor,可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入 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)和输入。

GradiumPhononTTSForConditionalGeneration 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

  • loss (torch.Tensor,形状为 (),可选,在传入 labels 时返回) — 训练损失:目标潜变量的 LSD 流损失加上 config.eos_loss_weight 倍的语音结束损失。

  • logits(形状为 (batch_size, sequence_length, 1) 的 torch.Tensor)— 语音结束 logits,每个位置一个。

  • past_key_values(Cache,可选,在传入 use_cache=True 或 config.use_cache=True 时返回)—— 它是一个 Cache 实例。更多详情,请参阅我们的 kv cache 指南。

    包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见 past_key_values 输入)加速顺序解码。

  • hidden_states (tuple(torch.Tensor),可选,当传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。

  • attentions (tuple(torch.Tensor),可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。

  • last_hidden_state(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor)— 骨干网络的归一化隐藏状态,用于条件化流头。

示例:

>>> 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

< >

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

参数

  • inputs(形状为 (batch_size, sequence_length) 的 torch.LongTensor,可选)— 由 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)。其余部分均通过常规生成钩子处理。

Update on GitHub