Transformers 文档

VITS

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

VITS

概述

VITS 模型在 Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech (作者: Jaehyeon Kim, Jungil Kong, Juhee Son) 中提出。

VITS (Variational Inference with adversarial learning for end-to-end Text-to-Speech) 是一种端到端语音合成模型,可以预测以输入文本序列为条件的语音波形。它是一种条件变分自动编码器 (VAE),由后验编码器、解码器和条件先验组成。

一组基于频谱图的声学特征由基于流的模块预测,该模块由基于 Transformer 的文本编码器和多个耦合层组成。频谱图使用一系列转置卷积层进行解码,风格与 HiFi-GAN 声码器非常相似。由于 TTS 问题的多对一性质(即相同的文本输入可以用多种方式说出),该模型还包括一个随机时长预测器,该预测器允许模型从相同的输入文本合成具有不同节奏的语音。

该模型通过变分下界和对抗训练中获得的损失组合进行端到端训练。为了提高模型的表达能力,将归一化流应用于条件先验分布。在推理过程中,文本编码根据时长预测模块进行上采样,然后使用流模块和 HiFi-GAN 解码器的级联映射到波形中。由于时长预测器的随机性,该模型是非确定性的,因此需要固定种子才能生成相同的语音波形。

论文摘要如下:

最近提出了几种端到端文本到语音 (TTS) 模型,这些模型支持单阶段训练和并行采样,但它们的样本质量与两阶段 TTS 系统不相上下。在这项工作中,我们提出了一种并行的端到端 TTS 方法,该方法生成的音频比当前的两阶段模型更自然。我们的方法采用了变分推理,并结合了归一化流和对抗训练过程,从而提高了生成建模的表现力。我们还提出了一个随机时长预测器,用于从输入文本合成具有不同节奏的语音。通过对潜在变量的不确定性建模和随机时长预测器,我们的方法表达了自然的一对多关系,即一个文本输入可以通过不同的音调和节奏以多种方式说出。在 LJ Speech(一个单说话人数据集)上进行的主观人工评估(平均意见得分,或 MOS)表明,我们的方法优于目前公开的最佳 TTS 系统,并达到了与真实音频相当的 MOS。

此模型还可以与来自 海量多语种语音 (MMS) 的 TTS 检查点一起使用,因为这些检查点使用相同的架构和略微修改过的 tokenizer。

此模型由 Matthijssanchit-gandhi 贡献。 原始代码可以在这里找到。

使用示例

VITS 和 MMS-TTS 检查点都可以使用相同的 API。由于基于 flow 的模型是非确定性的,因此最好设置一个种子以确保输出的可重复性。对于使用罗马字母表的语言(如英语或法语),可以直接使用 tokenizer 来预处理文本输入。以下代码示例使用 MMS-TTS 英语检查点运行前向传播

import torch
from transformers import VitsTokenizer, VitsModel, set_seed

tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-eng")
model = VitsModel.from_pretrained("facebook/mms-tts-eng")

inputs = tokenizer(text="Hello - my dog is cute", return_tensors="pt")

set_seed(555)  # make deterministic

with torch.no_grad():
   outputs = model(**inputs)

waveform = outputs.waveform[0]

生成的波形可以保存为 .wav 文件

import scipy

scipy.io.wavfile.write("techno.wav", rate=model.config.sampling_rate, data=waveform)

或在 Jupyter Notebook / Google Colab 中显示

from IPython.display import Audio

Audio(waveform, rate=model.config.sampling_rate)

对于某些使用非罗马字母表的语言(如阿拉伯语、普通话或印地语),需要 uroman perl 包来将文本输入预处理为罗马字母。

您可以通过检查预训练的 tokenizeris_uroman 属性来检查您的语言是否需要 uroman

from transformers import VitsTokenizer

tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-eng")
print(tokenizer.is_uroman)

如果 is_uroman 属性为 True,则 tokenizer 将自动将 uroman 包应用于您的文本输入,但您需要安装 uroman(如果尚未安装),使用以下命令:

pip install --upgrade uroman

注意:使用 uroman 作为 python 包所需的 Python 版本应 >= 3.10。您可以像往常一样使用 tokenizer,无需任何额外的预处理步骤

import torch
from transformers import VitsTokenizer, VitsModel, set_seed
import os
import subprocess

tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-kor")
model = VitsModel.from_pretrained("facebook/mms-tts-kor")
text = "이봐 무슨 일이야"
inputs = tokenizer(text=text, return_tensors="pt")

set_seed(555)  # make deterministic
with torch.no_grad():
   outputs = model(inputs["input_ids"])

waveform = outputs.waveform[0]

如果您不想升级到 python >= 3.10,那么您可以使用 uroman perl 包将文本输入预处理为罗马字母。为此,首先将 uroman 存储库克隆到您的本地计算机,并将 bash 变量 UROMAN 设置为本地路径

git clone https://github.com/isi-nlp/uroman.git
cd uroman
export UROMAN=$(pwd)

然后,您可以使用以下代码片段预处理文本输入。您可以依赖于使用 bash 变量 UROMAN 指向 uroman 存储库,或者您可以将 uroman 目录作为参数传递给 uromanize 函数

import torch
from transformers import VitsTokenizer, VitsModel, set_seed
import os
import subprocess

tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-kor")
model = VitsModel.from_pretrained("facebook/mms-tts-kor")

def uromanize(input_string, uroman_path):
    """Convert non-Roman strings to Roman using the `uroman` perl package."""
    script_path = os.path.join(uroman_path, "bin", "uroman.pl")

    command = ["perl", script_path]

    process = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    # Execute the perl command
    stdout, stderr = process.communicate(input=input_string.encode())

    if process.returncode != 0:
        raise ValueError(f"Error {process.returncode}: {stderr.decode()}")

    # Return the output as a string and skip the new-line character at the end
    return stdout.decode()[:-1]

text = "이봐 무슨 일이야"
uromanized_text = uromanize(text, uroman_path=os.environ["UROMAN"])

inputs = tokenizer(text=uromanized_text, return_tensors="pt")

set_seed(555)  # make deterministic
with torch.no_grad():
   outputs = model(inputs["input_ids"])

waveform = outputs.waveform[0]

VitsConfig

class transformers.VitsConfig

< >

( vocab_size = 38 hidden_size = 192 num_hidden_layers = 6 num_attention_heads = 2 window_size = 4 use_bias = True ffn_dim = 768 layerdrop = 0.1 ffn_kernel_size = 3 flow_size = 192 spectrogram_bins = 513 hidden_act = 'relu' hidden_dropout = 0.1 attention_dropout = 0.1 activation_dropout = 0.1 initializer_range = 0.02 layer_norm_eps = 1e-05 use_stochastic_duration_prediction = True num_speakers = 1 speaker_embedding_size = 0 upsample_initial_channel = 512 upsample_rates = [8, 8, 2, 2] upsample_kernel_sizes = [16, 16, 4, 4] resblock_kernel_sizes = [3, 7, 11] resblock_dilation_sizes = [[1, 3, 5], [1, 3, 5], [1, 3, 5]] leaky_relu_slope = 0.1 depth_separable_channels = 2 depth_separable_num_layers = 3 duration_predictor_flow_bins = 10 duration_predictor_tail_bound = 5.0 duration_predictor_kernel_size = 3 duration_predictor_dropout = 0.5 duration_predictor_num_flows = 4 duration_predictor_filter_channels = 256 prior_encoder_num_flows = 4 prior_encoder_num_wavenet_layers = 4 posterior_encoder_num_wavenet_layers = 16 wavenet_kernel_size = 5 wavenet_dilation_rate = 1 wavenet_dropout = 0.0 speaking_rate = 1.0 noise_scale = 0.667 noise_scale_duration = 0.8 sampling_rate = 16000 **kwargs )

参数

  • vocab_size (int, 可选, 默认为 38) — VITS 模型的词汇表大小。定义了可以由传递给 VitsModel 的前向方法的 inputs_ids 表示的不同 tokens 的数量。
  • hidden_size (int, 可选, 默认为 192) — 文本编码器层的维度。
  • num_hidden_layers (int, 可选, 默认为 6) — Transformer 编码器中隐藏层的数量。
  • num_attention_heads (int, 可选, 默认为 2) — Transformer 编码器中每个注意力层的注意力头数。
  • window_size (int, 可选, 默认为 4) — Transformer 编码器注意力层中相对位置嵌入的窗口大小。
  • use_bias (bool, 可选, 默认为 True) — 是否在 Transformer 编码器中的 key、query、value 投影层中使用 bias。
  • ffn_dim (int, 可选, 默认为 768) — Transformer 编码器中“中间”(即,前馈)层的维度。
  • layerdrop (float, 可选, 默认为 0.1) — 编码器的 LayerDrop 概率。 有关更多详细信息,请参阅 [LayerDrop 论文](see https://arxiv.org/abs/1909.11556)。
  • ffn_kernel_size (int, 可选, 默认为 3) — Transformer 编码器中前馈网络使用的 1D 卷积层的核大小。
  • flow_size (int, 可选, 默认为 192) — flow 层的维度。
  • spectrogram_bins (int, 可选, 默认为 513) — 目标 spectrogram 中的频率 bins 的数量。
  • hidden_act (strfunction, 可选, 默认为 "relu") — 编码器和 pooler 中的非线性激活函数(函数或字符串)。 如果是字符串,则支持 "gelu""relu""selu""gelu_new"
  • hidden_dropout (float, 可选, 默认为 0.1) — 嵌入层和编码器中所有全连接层的 dropout 概率。
  • attention_dropout (float, 可选, 默认为 0.1) — 注意力概率的 dropout 比率。
  • activation_dropout (float, 可选, 默认为 0.1) — 全连接层内部激活的 dropout 比率。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • layer_norm_eps (float, optional, defaults to 1e-05) — 层归一化层使用的 epsilon 值。
  • use_stochastic_duration_prediction (bool, optional, defaults to True) — 是否使用随机时长预测模块,或者使用常规时长预测器。
  • num_speakers (int, optional, defaults to 1) — 如果是多说话人模型,则为说话人数量。
  • speaker_embedding_size (int, optional, defaults to 0) — 说话人嵌入使用的通道数。对于单说话人模型,此值为零。
  • upsample_initial_channel (int, optional, defaults to 512) — HiFi-GAN 上采样网络的输入通道数。
  • upsample_rates (Tuple[int]List[int], optional, defaults to [8, 8, 2, 2]) — 定义 HiFi-GAN 上采样网络中每个 1D 卷积层步长的整数元组。 upsample_rates 的长度定义了卷积层的数量,并且必须与 upsample_kernel_sizes 的长度匹配。
  • upsample_kernel_sizes (Tuple[int]List[int], optional, defaults to [16, 16, 4, 4]) — 定义 HiFi-GAN 上采样网络中每个 1D 卷积层内核大小的整数元组。 upsample_kernel_sizes 的长度定义了卷积层的数量,并且必须与 upsample_rates 的长度匹配。
  • resblock_kernel_sizes (Tuple[int]List[int], optional, defaults to [3, 7, 11]) — 定义 HiFi-GAN 多感受野融合 (MRF) 模块中 1D 卷积层内核大小的整数元组。
  • resblock_dilation_sizes (Tuple[Tuple[int]]List[List[int]], optional, defaults to [[1, 3, 5], [1, 3, 5], [1, 3, 5]]) — 定义 HiFi-GAN 多感受野融合 (MRF) 模块中扩张 1D 卷积层扩张率的嵌套整数元组。
  • leaky_relu_slope (float, optional, defaults to 0.1) — Leaky ReLU 激活函数使用的负斜率角度。
  • depth_separable_channels (int, optional, defaults to 2) — 每个深度可分离块中使用的通道数。
  • depth_separable_num_layers (int, optional, defaults to 3) — 每个深度可分离块中使用的卷积层数。
  • duration_predictor_flow_bins (int, optional, defaults to 10) — 在时长预测模型中使用无约束有理样条映射的通道数。
  • duration_predictor_tail_bound (float, optional, defaults to 5.0) — 在时长预测模型中计算无约束有理样条时,尾箱边界的值。
  • duration_predictor_kernel_size (int, optional, defaults to 3) — 时长预测模型中使用的 1D 卷积层的内核大小。
  • duration_predictor_dropout (float, optional, defaults to 0.5) — 时长预测模型的 dropout 比率。
  • duration_predictor_num_flows (int, optional, defaults to 4) — 时长预测模型使用的流动阶段数。
  • duration_predictor_filter_channels (int, optional, defaults to 256) — 时长预测模型中使用的卷积层的通道数。
  • prior_encoder_num_flows (int, optional, defaults to 4) — 先验编码器流动模型使用的流动阶段数。
  • prior_encoder_num_wavenet_layers (int, optional, defaults to 4) — 先验编码器流动模型使用的 WaveNet 层数。
  • posterior_encoder_num_wavenet_layers (int, optional, defaults to 16) — 后验编码器模型使用的 WaveNet 层数。
  • wavenet_kernel_size (int, optional, defaults to 5) — WaveNet 模型中使用的 1D 卷积层的内核大小。
  • wavenet_dilation_rate (int, optional, defaults to 1) — WaveNet 模型中使用的扩张 1D 卷积层的扩张率。
  • wavenet_dropout (float, optional, defaults to 0.0) — WaveNet 层的 dropout 比率。
  • speaking_rate (float, optional, defaults to 1.0) — 语速。值越大,合成语音速度越快。
  • noise_scale (float, optional, defaults to 0.667) — 语音预测的随机程度。值越大,预测语音的变化越大。
  • noise_scale_duration (float, optional, defaults to 0.8) — 时长预测的随机程度。值越大,预测时长的变化越大。
  • sampling_rate (int, optional, defaults to 16000) — 输出音频波形数字化的采样率,以赫兹 (Hz) 为单位。

这是用于存储 VitsModel 配置的配置类。它用于根据指定的参数实例化 VITS 模型,定义模型架构。使用默认值实例化配置将产生与 VITS facebook/mms-tts-eng 架构类似的配置。

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

示例

>>> from transformers import VitsModel, VitsConfig

>>> # Initializing a "facebook/mms-tts-eng" style configuration
>>> configuration = VitsConfig()

>>> # Initializing a model (with random weights) from the "facebook/mms-tts-eng" style configuration
>>> model = VitsModel(configuration)

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

VitsTokenizer

class transformers.VitsTokenizer

< >

( vocab_file pad_token = '<pad>' unk_token = '<unk>' language = None add_blank = True normalize = True phonemize = True is_uroman = False **kwargs )

参数

  • vocab_file (str) — 词汇表文件的路径。
  • language (str, 可选) — 语言标识符。
  • add_blank (bool, 可选, 默认为 True) — 是否在其他 token 之间插入 token id 0。
  • normalize (bool, 可选, 默认为 True) — 是否通过移除所有大小写和标点符号来标准化输入文本。
  • phonemize (bool, 可选, 默认为 True) — 是否将输入文本转换为音素。
  • is_uroman (bool, 可选, 默认为 False) — 在 token 化之前,是否需要将 uroman 罗马化器应用于输入文本。

构建 VITS tokenizer。 也支持 MMS-TTS。

此 tokenizer 继承自 PreTrainedTokenizer,其中包含大多数主要方法。 用户应参考此超类以获取有关这些方法的更多信息。

__call__

< >

( text: Union = None text_pair: Union = None text_target: Union = None text_pair_target: Union = None add_special_tokens: bool = True padding: Union = False truncation: Union = None max_length: Optional = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: Optional = None padding_side: Optional = None return_tensors: Union = None return_token_type_ids: Optional = None return_attention_mask: Optional = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True **kwargs ) BatchEncoding

参数

  • text (str, List[str], List[List[str]], 可选) — 要编码的序列或序列批次。 每个序列可以是字符串或字符串列表(预 token 化字符串)。 如果序列以字符串列表(预 token 化)形式提供,则必须设置 is_split_into_words=True (以消除与序列批次的歧义)。
  • text_pair (str, List[str], List[List[str]], 可选) — 要编码的序列或序列批次。 每个序列可以是字符串或字符串列表(预 token 化字符串)。 如果序列以字符串列表(预 token 化)形式提供,则必须设置 is_split_into_words=True (以消除与序列批次的歧义)。
  • text_target (str, List[str], List[List[str]], 可选) — 要编码为目标文本的序列或序列批次。 每个序列可以是字符串或字符串列表(预 token 化字符串)。 如果序列以字符串列表(预 token 化)形式提供,则必须设置 is_split_into_words=True (以消除与序列批次的歧义)。
  • text_pair_target (str, List[str], List[List[str]], 可选) — 要编码为目标文本的序列或序列批次。 每个序列可以是字符串或字符串列表(预 token 化字符串)。 如果序列以字符串列表(预 token 化)形式提供,则必须设置 is_split_into_words=True (以消除与序列批次的歧义)。
  • add_special_tokens (bool, 可选, 默认为 True) — 在编码序列时是否添加特殊 token。 这将使用底层的 PretrainedTokenizerBase.build_inputs_with_special_tokens 函数,该函数定义了哪些 token 会自动添加到输入 id 中。 如果您想自动添加 boseos token,这将非常有用。
  • padding (bool, strPaddingStrategy, 可选, 默认为 False) — 激活和控制填充。 接受以下值:

    • True'longest':填充到批次中最长的序列(如果仅提供单个序列,则不填充)。
    • 'max_length':填充到由参数 max_length 指定的最大长度,如果未提供该参数,则填充到模型可接受的最大输入长度。
    • False'do_not_pad' (默认):不填充(即,可以输出具有不同长度序列的批次)。
  • truncation (bool, strTruncationStrategy, 可选, 默认为 False) — 激活和控制截断。 接受以下值:

    • True'longest_first':截断为由参数 max_length 指定的最大长度,如果未提供该参数,则截断为模型可接受的最大输入长度。 如果提供了一对序列(或一批对),这将逐个 token 截断,从该对中最长的序列中移除 token。
    • 'only_first':截断为由参数 max_length 指定的最大长度,如果未提供该参数,则截断为模型可接受的最大输入长度。 如果提供了一对序列(或一批对),这将仅截断该对的第一个序列。
    • 'only_second':截断为由参数 max_length 指定的最大长度,如果未提供该参数,则截断为模型可接受的最大输入长度。 如果提供了一对序列(或一批对),这将仅截断该对的第二个序列。
    • False'do_not_truncate' (默认):不截断(即,可以输出序列长度大于模型最大允许输入大小的批次)。
  • max_length (int, 可选) — 控制截断/填充参数之一使用的最大长度。

    如果未设置或设置为 None,如果截断/填充参数之一需要最大长度,则将使用预定义的模型最大长度。 如果模型没有特定的最大输入长度(如 XLNet),则将停用截断/填充到最大长度。

  • stride (int, 可选, 默认为 0) — 如果与 max_length 一起设置为数字,则当 return_overflowing_tokens=True 时返回的溢出 token 序列将包含截断序列末尾的一些 token,以在截断序列和溢出序列之间提供一些重叠。 此参数的值定义了重叠 token 的数量。
  • is_split_into_words (bool, 可选, 默认为 False) — 输入是否已预 token 化(例如,拆分为单词)。 如果设置为 True,则 tokenizer 假定输入已拆分为单词(例如,通过在空格上拆分),它将对其进行 token 化。 这对于 NER 或 token 分类很有用。
  • pad_to_multiple_of (int, 可选) — 如果设置,将序列填充为提供值的倍数。 需要激活 padding。 这对于在计算能力 >= 7.5 (Volta) 的 NVIDIA 硬件上启用 Tensor Core 的使用尤其有用。
  • padding_side (str, 可选) — 模型应在其上应用填充的一侧。 应在 [‘right’, ‘left’] 之间选择。 默认值是从同名的类属性中选择的。
  • return_tensors (strTensorType, 可选) — 如果设置,将返回 tensor 而不是 python 整数列表。 可接受的值为:

    • 'tf':返回 TensorFlow tf.constant 对象。
    • 'pt':返回 PyTorch torch.Tensor 对象。
    • 'np':返回 Numpy np.ndarray 对象。
  • return_token_type_ids (bool, 可选) — 是否返回 token 类型 ID。 如果保留为默认值,将根据特定 tokenizer 的默认值返回 token 类型 ID,由 return_outputs 属性定义。

    什么是 token 类型 ID?

  • return_attention_mask (bool, 可选) — 是否返回 attention mask。 如果保留为默认值,将根据特定 tokenizer 的默认值返回 attention mask,由 return_outputs 属性定义。

    什么是 attention mask?

  • return_overflowing_tokens (bool, 可选, 默认为 False) — 是否返回溢出的 token 序列。 如果提供了一对输入 id 序列(或一批对)且 truncation_strategy = longest_firstTrue,则会引发错误,而不是返回溢出的 token。
  • return_special_tokens_mask (bool, 可选, 默认为 False) — 是否返回特殊 token 掩码信息。
  • return_offsets_mapping (bool, 可选, 默认为 False) — 是否为每个 token 返回 (char_start, char_end)

    这仅适用于继承自 PreTrainedTokenizerFast 的快速 tokenizer,如果使用 Python 的 tokenizer,则此方法将引发 NotImplementedError

  • return_length (bool, 可选, 默认为 False) — 是否返回编码输入的长度。
  • verbose (bool, 可选, 默认为 True) — 是否打印更多信息和警告。 **kwargs — 传递给 self.tokenize() 方法

返回

BatchEncoding

一个 BatchEncoding,包含以下字段

  • input_ids — 输入模型的 token id 列表。

    什么是输入 IDs?

  • token_type_ids — 输入模型的 token 类型 id 列表 (当 return_token_type_ids=True 或如果 “token_type_ids”self.model_input_names 中时)。

    什么是 token 类型 IDs?

  • attention_mask — 指定模型应关注哪些 token 的索引列表 (当 return_attention_mask=True 或如果 “attention_mask”self.model_input_names 中时)。

    什么是 attention masks?

  • overflowing_tokens — 溢出的 token 序列列表 (当指定了 max_length 并且 return_overflowing_tokens=True 时)。

  • num_truncated_tokens — 截断的 token 数量 (当指定了 max_length 并且 return_overflowing_tokens=True 时)。

  • special_tokens_mask — 0 和 1 的列表,其中 1 指定添加的特殊 token,0 指定常规序列 token (当 add_special_tokens=True 并且 return_special_tokens_mask=True 时)。

  • length — 输入的长度 (当 return_length=True 时)

用于 token 化和为模型准备一个或多个序列或一对或多对序列的主要方法。

save_vocabulary

< >

( save_directory: str filename_prefix: Optional = None )

VitsModel

class transformers.VitsModel

< >

( config: VitsConfig )

参数

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

完整的 VITS 模型,用于文本到语音合成。 此模型继承自 PreTrainedModel。 查看超类文档,了解库为其所有模型实现的通用方法 (例如下载或保存、调整输入嵌入大小、剪枝头等)。

此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与常规用法和行为相关的所有事项。

forward

< >

( input_ids: Optional = None attention_mask: Optional = None speaker_id: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None labels: Optional = None ) transformers.models.vits.modeling_vits.VitsModelOutput or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 token 的索引。 如果您提供 padding,默认情况下会被忽略。

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

    什么是输入 IDs?

  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length), 可选) — 用于避免对 padding token 索引执行卷积和 attention 的掩码。 掩码值在 [0, 1] 中选择:

    • 1 表示 未被掩盖 的 token,
    • 0 表示 被掩盖 的 token。

    什么是 attention masks?

  • speaker_id (int, 可选) — 要使用的说话人嵌入。 仅用于多说话人模型。
  • output_attentions (bool, 可选) — 是否返回所有 attention 层的 attention 张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的 hidden state。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • labels (torch.FloatTensor,形状为 (batch_size, config.spectrogram_bins, sequence_length), 可选) — 目标频谱图的浮点值。 设置为 -100.0 的时间步长在损失计算中会被忽略 (掩盖)。

返回

transformers.models.vits.modeling_vits.VitsModelOutputtuple(torch.FloatTensor)

一个 transformers.models.vits.modeling_vits.VitsModelOutputtorch.FloatTensor 元组 (如果传递了 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置 (VitsConfig) 和输入。

  • waveform (torch.FloatTensor,形状为 (batch_size, sequence_length)) — 模型预测的最终音频波形。

  • sequence_lengths (torch.FloatTensor,形状为 (batch_size,)) — waveform 批次中每个元素的样本长度。

  • spectrogram (torch.FloatTensor,形状为 (batch_size, sequence_length, num_bins)) — 在 flow 模型输出端预测的 log-mel 频谱图。 此频谱图被传递到 Hi-Fi GAN 解码器模型以获得最终音频波形。

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

    模型在每一层输出端的 Hidden state,加上可选的初始嵌入输出。

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

    attention softmax 后的 Attention 权重,用于计算 self-attention 头中的加权平均值。

VitsModel forward 方法,覆盖了 __call__ 特殊方法。

虽然 forward 传递的配方需要在该函数中定义,但应该在之后调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

示例

>>> from transformers import VitsTokenizer, VitsModel, set_seed
>>> import torch

>>> tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-eng")
>>> model = VitsModel.from_pretrained("facebook/mms-tts-eng")

>>> inputs = tokenizer(text="Hello - my dog is cute", return_tensors="pt")

>>> set_seed(555)  # make deterministic

>>> with torch.no_grad():
...     outputs = model(inputs["input_ids"])
>>> outputs.waveform.shape
torch.Size([1, 45824])
< > 在 GitHub 上更新