Transformers 文档

VITS

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验的访问权限

开始使用

VITS

概述

VITS 模型由 Jaehyeon Kim、Jungil Kong 和 Juhee Son 在 基于对抗学习的端到端文本到语音的条件变分自动编码器 中提出。

VITS(**V**ariational **I**nference with adversarial learning for end-to-end **T**ext-to-**S**peech)是一种端到端的语音合成模型,它根据输入文本序列预测语音波形。它是一个条件变分自动编码器(VAE),包含一个后验编码器、解码器和条件先验。

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

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

论文摘要如下

近年来,人们提出了几种支持单阶段训练和并行采样的端到端文本到语音 (TTS) 模型,但其样本质量无法与两阶段 TTS 系统相媲美。在本研究中,我们提出了一种并行端到端 TTS 方法,它能生成比当前两阶段模型更自然的声音音频。我们的方法采用了增强了归一化流的变分推理和对抗训练过程,从而提升了生成模型的表达能力。我们还提出了一种随机持续时间预测器,用于根据输入文本合成具有多种节奏的语音。通过对潜在变量的进行不确定性建模和使用随机持续时间预测器,我们的方法表达了文本输入可以以多种音调和节奏发声的自然一对多关系。对单说话人数据集 LJ Speech 的主观人工评估(平均意见得分,或 MOS)表明,我们的方法优于公开可用的最佳 TTS 系统,并达到了与地面真实值相当的 MOS。

此模型也可以与来自 大规模多语言语音 (MMS) 的 TTS 检查点一起使用,因为这些检查点使用相同的架构和略微修改的词语标记器。

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

使用示例

VITS 和 MMS-TTS 检查点都可以使用相同的 API。由于基于流的模型是非确定性的,因此设置种子以确保输出的可重复性是一个好习惯。对于英语或法语等使用罗马字母的语言,词语标记器可以直接用于预处理文本输入。以下代码示例使用 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)

如果需要,您应该在将文本输入传递给 VitsTokenizer 之前将 uroman 包应用于您的文本输入,因为当前词语标记器不支持执行预处理本身。

为此,首先将 uroman 存储库克隆到您的本地机器,并将 bash 变量 UROMAN 设置为本地路径

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

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

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 = "이봐 무슨 일이야"
uromaized_text = uromanize(text, uroman_path=os.environ["UROMAN"])

inputs = tokenizer(text=uromaized_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 )

参数

  • 词汇量 (int, optional, defaults to 38) — VITS 模型的词汇量。定义了传递到 VitsModel 正向方法的 inputs_ids 可以表示的不同标记的数量。
  • 隐藏层大小 (int, optional, defaults to 192) — 文本编码器层的维度。
  • 隐藏层数量 (int, optional, defaults to 6) — Transformer 编码器中的隐藏层数量。
  • 注意力头数 (int, optional, defaults to 2) — Transformer 编码器中每个注意力层的注意力头数。
  • 窗口大小 (int, optional, defaults to 4) — Transformer 编码器注意力层中相对位置嵌入的窗口大小。
  • 使用偏置 (bool, optional, defaults to True) — 是否在 Transformer 编码器中的键、查询、值投影层中使用偏置。
  • 前馈层维度 (int, optional, defaults to 768) — Transformer 编码器中“中间”(即前馈)层的维度。
  • 层下降 (float, optional, defaults to 0.1) — 编码器的层下降概率。有关更多详细信息,请参见 [层下降论文](see https://arxiv.org/abs/1909.11556)。
  • 前馈核大小 (int, optional, defaults to 3) — Transformer 编码器中前馈网络使用的 1D 卷积层的核大小。
  • 流大小 (int, optional, defaults to 192) — 流层的维度。
  • hidden_act (strfunction可选,默认为 "relu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持 "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) — 初始化所有权重矩阵的截断正态初始化的标准差。
  • layer_norm_eps (float可选,默认为 1e-05) — 层归一化层使用的 epsilon。
  • use_stochastic_duration_prediction (bool可选,默认为 True) — 是否使用随机持续时间预测模块或常规持续时间预测器。
  • num_speakers (int可选,默认为 1) — 如果这是多说话人模型,则为说话人数量。
  • speaker_embedding_size (int可选,默认为 0) — 说话人嵌入使用的通道数。对于单说话人模型,该值为零。
  • upsample_initial_channel (int可选,默认为 512) — 输入到 HiFi-GAN 上采样网络的通道数。
  • upsample_kernel_sizes (Tuple[int]List[int], 可选, 默认值为 [16, 16, 4, 4]) — 定义 HiFi-GAN 上采样网络中每个一维卷积层的核大小的整数元组。upsample_kernel_sizes 的长度定义了卷积层的数量,必须与 upsample_rates 的长度匹配。
  • resblock_kernel_sizes (Tuple[int]List[int], 可选, 默认值为 [3, 7, 11]) — 定义 HiFi-GAN 多感受野融合 (MRF) 模块中一维卷积层的核大小的整数元组。
  • resblock_dilation_sizes (Tuple[Tuple[int]]List[List[int]], 可选, 默认值为 [[1, 3, 5], [1, 3, 5], [1, 3, 5]]) — 定义 HiFi-GAN 多感受野融合 (MRF) 模块中膨胀一维卷积层的膨胀率的嵌套整数元组。
  • leaky_relu_slope (float, 可选, 默认值为 0.1) — Leaky ReLU 激活函数使用的负斜率的角度。
  • depth_separable_channels (int, 可选, 默认值为 2) — 每个深度可分离块中使用的通道数量。
  • depth_separable_num_layers (int, 可选, 默认值为 3) — 每个深度可分离块中使用的卷积层数量。
  • duration_predictor_flow_bins (int, 可选, 默认值为 10) — 使用持续时间预测模型中无约束有理样条映射的通道数量。
  • duration_predictor_tail_bound (float, 可选, 默认值为 5.0) — 在持续时间预测模型中计算无约束有理样条时尾部箱边界的值。
  • duration_predictor_kernel_size (int, 可选, 默认值为 3) — 持续时间预测模型中使用的一维卷积层的核大小。
  • duration_predictor_dropout (float, 可选, 默认值为 0.5) — 持续时间预测模型的 dropout 率。
  • 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层的丢弃率。
  • 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) — 时长预测的随机程度。较大的值会生成更多变化的预测时长。
  • 配置对象继承自 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) — 是否在其他标记之间插入标记 ID 0。
  • normalize (bool, 可选, 默认值为 True) — 是否通过删除所有大小写和标点符号来规范化输入文本。
  • phonemize (bool, 可选, 默认值为 True) — 是否将输入文本转换为音素。
  • is_uroman (bool, 可选, 默认值为 False) — 是否需要在标记化之前将 uroman 罗马化器应用于输入文本。

构建 VITS 标记器。也支持 MMS-TTS。

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

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

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

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

  • 步长 (int, 可选, 默认值为 0) — 如果与 max_length 一起设置为一个数字,则当 return_overflowing_tokens=True 时返回的溢出标记将包含来自截断序列末尾的某些标记,以在截断序列和溢出序列之间提供一些重叠。此参数的值定义重叠标记的数量。
  • 是否已拆分为单词 (bool, 可选, 默认值为 False) — 输入是否已经预先分词(例如,按空格拆分)。如果设置为 True,则分词器假设输入已经按单词拆分(例如,通过按空格拆分),它将对其进行分词。这对于 NER 或标记分类很有用。
  • 填充到倍数 (int, 可选) — 如果设置,则将序列填充到提供的值的倍数。需要激活 padding。这对于在具有计算能力 >= 7.5 (Volta) 的 NVIDIA 硬件上启用张量核的使用特别有用。
  • 返回张量 (strTensorType, 可选) — 如果设置,将返回张量而不是 python 整数列表。可接受的值为:

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

    标记类型 ID 是什么?

  • 返回注意力掩码 (bool, 可选) — 是否返回注意力掩码。如果保留默认值,将根据特定分词器的默认值返回注意力掩码,由 return_outputs 属性定义。

    注意力掩码是什么?

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

    此功能仅适用于继承自 PreTrainedTokenizerFast 的快速分词器,如果使用 Python 的分词器,此方法将引发 NotImplementedError

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

返回值

BatchEncoding

一个包含以下字段的 BatchEncoding

  • input_ids — 要馈送到模型的 token id 列表。

    什么是输入 ID?

  • token_type_ids — 要馈送到模型的 token 类型 id 列表(当 return_token_type_ids=True“token_type_ids”self.model_input_names 中时)。

    什么是 token 类型 ID?

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

    什么是注意力掩码?

  • overflowing_tokens — 溢出 token 序列列表(当指定 max_lengthreturn_overflowing_tokens=True 时)。

  • num_truncated_tokens — 被截断的 token 数量(当指定 max_lengthreturn_overflowing_tokens=True 时)。

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

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

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

保存词汇表

< >

( save_directory: str filename_prefix: Optional = None )

VitsModel

transformers.VitsModel

< >

( config: VitsConfig )

参数

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

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

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

正向

< >

( 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.VitsModelOutputtuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示未屏蔽的 token,
    • 0 表示屏蔽的 token。

    什么是注意力掩码?

  • speaker_id (int, 可选) — 要使用的哪种说话者嵌入。仅用于多说话者模型。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量中的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量中的 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=Falseconfig.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)) — 流模型输出处预测的对数梅尔频谱图。此频谱图传递给 Hi-Fi GAN 解码器模型以获得最终音频波形。

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

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

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

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

VitsModel 正向方法,覆盖 __call__ 特殊方法。

尽管正向传递的配方需要在此函数内定义,但之后应该调用 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 上更新