Transformers documentation

FastSpeech2Conformer

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2020-10-26 在 HF papers 上发布,并于 2024-01-03 贡献至 Hugging Face Transformers。

FastSpeech2Conformer

概述

FastSpeech2Conformer 模型由 Pengcheng Guo、Florian Boyer、Xuankai Chang、Tomoki Hayashi、Yosuke Higuchi、Hirofumi Inaguma、Naoyuki Kamo、Chenda Li、Daniel Garcia-Romero、Jiatong Shi、Jing Shi、Shinji Watanabe、Kun Wei、Wangyou Zhang 和 Yuekai Zhang 在论文 Recent Developments On Espnet Toolkit Boosted By Conformer 中提出。

原始 FastSpeech2 论文的摘要如下:

非自回归文本转语音(TTS)模型,例如 FastSpeech(Ren et al., 2019),能够以与先前自回归模型相当的质量,显著更快地合成语音。FastSpeech 模型的训练依赖于一个自回归教师模型来进行时长预测(以提供更多输入信息)和知识蒸馏(以简化输出中的数据分布),这有助于缓解 TTS 中的一对多映射问题(即多种语音变体对应同一段文本)。然而,FastSpeech 存在几个缺点:1)教师-学生蒸馏流程复杂且耗时;2)从教师模型中提取的时长不够准确,且从教师模型蒸馏出的目标梅尔频谱因数据简化而存在信息损失,这两点都限制了语音质量。在本文中,我们提出了 FastSpeech 2,它通过以下方式解决了 FastSpeech 中的问题,并更好地解决了 TTS 中的一对多映射问题:1)直接使用真实目标(ground-truth target)而非教师模型的简化输出来训练模型;2)引入更多语音变化信息(例如音高、能量以及更准确的时长)作为条件输入。具体而言,我们从语音波形中提取时长、音高和能量,并在训练时直接将其作为条件输入,在推理时使用预测值。我们进一步设计了 FastSpeech 2s,这是首次尝试并行地从文本直接生成语音波形,从而享有完全端到端推理的优势。实验结果表明:1)FastSpeech 2 相比 FastSpeech 实现了 3 倍的训练加速,而 FastSpeech 2s 拥有更快的推理速度;2)FastSpeech 2 和 2s 在语音质量上优于 FastSpeech,且 FastSpeech 2 甚至可以超越自回归模型。音频样本可在 https://speechresearch.github.io/fastspeech2/ 获取。

该模型由 Connor Henderson 贡献。原始代码可在此处找到。

🤗 模型架构

实现了 FastSpeech2 的通用结构,其中包含 Mel 频谱图解码器,并且像 ESPnet 库中那样,将传统的 transformer 块替换为 conformer 块。

FastSpeech2 模型架构

FastSpeech2 Model Architecture

Conformer 块

Conformer Blocks

卷积模块

Convolution Module

🤗 Transformers 用法

您可以使用 🤗 Transformers 库在本地运行 FastSpeech2Conformer。

  1. 首先安装 🤗 Transformers 库 和 g2p-en:
pip install --upgrade pip
pip install --upgrade transformers g2p-en
  1. 使用 Transformers 建模代码,分别通过模型和 hifigan 运行推理
import soundfile as sf

from transformers import FastSpeech2ConformerHifiGan, FastSpeech2ConformerModel, FastSpeech2ConformerTokenizer


tokenizer = FastSpeech2ConformerTokenizer.from_pretrained("espnet/fastspeech2_conformer")
inputs = tokenizer("Hello, my dog is cute.", return_tensors="pt").to(model.device)
input_ids = inputs["input_ids"]

model = FastSpeech2ConformerModel.from_pretrained("espnet/fastspeech2_conformer", device_map="auto")
output_dict = model(input_ids, return_dict=True)
spectrogram = output_dict["spectrogram"]

hifigan = FastSpeech2ConformerHifiGan.from_pretrained("espnet/fastspeech2_conformer_hifigan")
waveform = hifigan(spectrogram)

sf.write("speech.wav", waveform.squeeze().detach().numpy(), samplerate=22050)
  1. 通过 Transformers 建模代码运行推理,将模型与 hifigan 结合使用
import soundfile as sf

from transformers import FastSpeech2ConformerTokenizer, FastSpeech2ConformerWithHifiGan


tokenizer = FastSpeech2ConformerTokenizer.from_pretrained("espnet/fastspeech2_conformer")
inputs = tokenizer("Hello, my dog is cute.", return_tensors="pt").to(model.device)
input_ids = inputs["input_ids"]

model = FastSpeech2ConformerWithHifiGan.from_pretrained("espnet/fastspeech2_conformer_with_hifigan")
output_dict = model(input_ids, return_dict=True)
waveform = output_dict["waveform"]

sf.write("speech.wav", waveform.squeeze().detach().numpy(), samplerate=22050)
  1. 使用 pipeline 运行推理并指定要使用的 vocoder
import soundfile as sf

from transformers import FastSpeech2ConformerHifiGan, pipeline


vocoder = FastSpeech2ConformerHifiGan.from_pretrained("espnet/fastspeech2_conformer_hifigan")
synthesiser = pipeline(model="espnet/fastspeech2_conformer", vocoder=vocoder)

speech = synthesiser("Hello, my dog is cooler than you!")

sf.write("speech.wav", speech["audio"].squeeze(), samplerate=speech["sampling_rate"])

FastSpeech2ConformerConfig

class transformers.FastSpeech2ConformerConfig

< >

( 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 = 0id2label: 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 = Noneis_encoder_decoder: bool = Truehidden_size: int = 384vocab_size: int = 78num_mel_bins: int = 80encoder_num_attention_heads: int = 2encoder_layers: int = 4encoder_linear_units: int = 1536decoder_layers: int = 4decoder_num_attention_heads: int = 2decoder_linear_units: int = 1536speech_decoder_postnet_layers: int = 5speech_decoder_postnet_units: int = 256speech_decoder_postnet_kernel: int = 5positionwise_conv_kernel_size: int = 3encoder_normalize_before: bool = Falsedecoder_normalize_before: bool = Falseencoder_concat_after: bool = Falsedecoder_concat_after: bool = Falsereduction_factor: int = 1speaking_speed: float = 1.0use_macaron_style_in_conformer: bool = Trueuse_cnn_in_conformer: bool = Trueencoder_kernel_size: int = 7decoder_kernel_size: int = 31duration_predictor_layers: int = 2duration_predictor_channels: int = 256duration_predictor_kernel_size: int = 3energy_predictor_layers: int = 2energy_predictor_channels: int = 256energy_predictor_kernel_size: int = 3energy_predictor_dropout: float | int = 0.5energy_embed_kernel_size: int = 1energy_embed_dropout: float | int = 0.0stop_gradient_from_energy_predictor: bool = Falsepitch_predictor_layers: int = 5pitch_predictor_channels: int = 256pitch_predictor_kernel_size: int = 5pitch_predictor_dropout: float | int = 0.5pitch_embed_kernel_size: int = 1pitch_embed_dropout: float | int = 0.0stop_gradient_from_pitch_predictor: bool = Trueencoder_dropout_rate: float | int = 0.2encoder_positional_dropout_rate: float | int = 0.2encoder_attention_dropout_rate: float | int = 0.2decoder_dropout_rate: float | int = 0.2decoder_positional_dropout_rate: float | int = 0.2decoder_attention_dropout_rate: float | int = 0.2duration_predictor_dropout_rate: float | int = 0.2speech_decoder_postnet_dropout: float | int = 0.5max_source_positions: int = 5000use_masking: bool = Trueuse_weighted_masking: bool = Falsenum_speakers: int | None = Nonenum_languages: int | None = Nonespeaker_embed_dim: int | None = Noneconvolution_bias: bool = True )

参数

  • is_encoder_decoder (bool,可选,默认为 True) — 指示该模型是否用作编码器/解码器。
  • hidden_size (int,可选,默认为 384) — 隐藏表示的维度。
  • vocab_size (int,可选,默认为 78) — 模型的词汇表大小。定义了 input_ids 可以表示的不同 token 的数量。
  • num_mel_bins (int,可选,默认为 80) — 每个输入帧使用的 mel 特征数量。应与 AutoFeatureExtractor 类中使用的值相对应。
  • encoder_num_attention_heads (int,可选,默认为 2) — 编码器中注意力头的数量。
  • encoder_layers (int,可选,默认为 4) — Transformer 编码器中的隐藏层数量。如果未设置,将使用与 num_layers 相同的值。
  • encoder_linear_units (int,可选,默认为 1536) — 编码器线性层中的单元数量。
  • decoder_layers (int, 可选,默认为 4) — Transformer 解码器中的隐藏层数量。如果未设置,将使用与 num_layers 相同的值。
  • decoder_num_attention_heads (int,可选,默认为 2) — Transformer 解码器中每个注意力层的注意力头数量。
  • decoder_linear_units (int,可选,默认为 1536) — 解码器线性层中的单元数量。
  • speech_decoder_postnet_layers (int, 可选,默认为 5) — 语音解码器后网络(post-net)的层数。
  • speech_decoder_postnet_units (int,可选,默认值为 256) — 语音解码器后网络层中的单元数量。
  • speech_decoder_postnet_kernel (int,可选,默认值为 5) — 语音解码器后处理网络(post-net)中的卷积核大小。
  • positionwise_conv_kernel_size (int,可选,默认为 3) — 逐位置层中使用的卷积核大小。
  • encoder_normalize_before (bool,可选,默认为 False) — 指定是否在编码器层之前进行归一化。
  • decoder_normalize_before (bool,可选,默认为 False) — 指定是否在解码器层之前进行归一化。
  • encoder_concat_after (bool,可选,默认为 False) — 指定是否在编码器层之后进行拼接。
  • decoder_concat_after (bool,可选,默认为 False) — 指定是否在解码器层之后进行拼接。
  • reduction_factor (int,可选,默认为 1) — 用于降低语音帧率的因子。
  • speaking_speed(float,可选,默认值为 1.0)—— 生成语音的速度。
  • use_macaron_style_in_conformer (bool,可选,默认为 True) — 指定是否在 conformer 中使用 macaron 风格。
  • use_cnn_in_conformer (bool,可选,默认为 True) — 指定是否在 conformer 中使用卷积神经网络。
  • encoder_kernel_size (int,可选,默认为 7) — 编码器中使用的卷积核大小。
  • decoder_kernel_size (int,可选,默认为 31) — 解码器中使用的卷积核大小。
  • duration_predictor_layers (int,可选,默认为 2) — 时长预测器中的层数。
  • duration_predictor_channels (int,可选,默认为 256) — 时长预测器中的通道数。
  • duration_predictor_kernel_size (int,可选,默认为 3) — 时长预测器中使用的卷积核大小。
  • energy_predictor_layers (int, 可选,默认为 2) — 能量预测器的层数。
  • energy_predictor_channels (int,可选,默认为 256) — 能量预测器中的通道数。
  • energy_predictor_kernel_size (int, 可选,默认为 3) — 能量预测器中使用的卷积核大小。
  • energy_predictor_dropout (float,可选,默认值为 0.5) — 能量预测器中的 dropout 率。
  • energy_embed_kernel_size (int,可选,默认为 1) — 能量嵌入层中使用的卷积核大小。
  • energy_embed_dropout (float,可选,默认值为 0.0) — 能量嵌入层中的 dropout 率。
  • stop_gradient_from_energy_predictor (bool,可选,默认为 False) — 指定是否停止来自能量预测器的梯度。
  • pitch_predictor_layers (int, 可选,默认为 5) — 音高预测器的层数。
  • pitch_predictor_channels (int, 可选,默认为 256) — 音高预测器的通道数。
  • pitch_predictor_kernel_size (int,可选,默认为 5) — 音高预测器中使用的卷积核大小。
  • pitch_predictor_dropout (float, 可选,默认为 0.5) — 音高预测器中的 dropout 率。
  • pitch_embed_kernel_size (int, 可选,默认为 1) — 音高嵌入层中使用的卷积核大小。
  • pitch_embed_dropout (float,可选,默认值为 0.0) — 音高嵌入层的 dropout 率。
  • stop_gradient_from_pitch_predictor (bool,可选,默认为 True) — 指定是否停止来自音高预测器的梯度。
  • encoder_dropout_rate (float,可选,默认值为 0.2) — 编码器中的 dropout 率。
  • encoder_positional_dropout_rate (float,可选,默认值为 0.2) — 编码器中的位置 dropout 率。
  • encoder_attention_dropout_rate (float,可选,默认值为 0.2) — 编码器中的注意力 dropout 率。
  • decoder_dropout_rate (float,可选,默认值为 0.2) — 解码器中的 dropout 率。
  • decoder_positional_dropout_rate (float,可选,默认值为 0.2) — 解码器中的位置 dropout 率。
  • decoder_attention_dropout_rate (float,可选,默认值为 0.2) — 解码器中的注意力 dropout 率。
  • duration_predictor_dropout_rate (float,可选,默认为 0.2) — 时长预测器中的 dropout 率。
  • speech_decoder_postnet_dropout (float,可选,默认值为 0.5) — 语音解码器后网络中的 dropout 率。
  • max_source_positions (int,可选,默认为 5000) — 如果使用 "relative" 位置嵌入,则定义源输入的最大位置数。
  • use_masking (bool,可选,默认为 True) — 指定是否在模型中使用掩码。
  • use_weighted_masking (bool,可选,默认为 False) — 指定是否在模型中使用加权掩码。
  • num_speakers (int, 可选) — 说话人数量。如果设置为 > 1,则假定说话人 ID 将作为输入提供,并使用说话人 ID 嵌入层。
  • num_languages (int, 可选) — 语言数量。如果设置为 > 1,则假定语言 ID 将作为输入提供,并使用语言 ID 嵌入层。
  • speaker_embed_dim (int, 可选) — 说话人嵌入维度。如果设置为 > 0,则假定将提供 speaker_embedding 作为输入。
  • convolution_bias (bool,可选,默认为 True) — 指定 conformer 的卷积模块中的卷积是否使用偏置。

这是用于存储 FastSpeech2ConformerModel 配置的类。它根据指定的参数实例化 Fastspeech2 Conformer 模型,并定义模型架构。使用默认值实例化配置将得到与 espnet/fastspeech2_conformer 类似的配置。

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

示例:

>>> from transformers import FastSpeech2ConformerModel, FastSpeech2ConformerConfig

>>> # Initializing a FastSpeech2Conformer style configuration
>>> configuration = FastSpeech2ConformerConfig()

>>> # Initializing a model from the FastSpeech2Conformer style configuration
>>> model = FastSpeech2ConformerModel(configuration)

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

FastSpeech2ConformerHifiGanConfig

类 transformers.FastSpeech2ConformerHifiGanConfig

< >

( 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 = Nonemodel_in_dim: int = 80upsample_initial_channel: int = 512upsample_rates: list[int] | tuple[int, ...] = (8, 8, 2, 2)upsample_kernel_sizes: list[int] | tuple[int, ...] = (16, 16, 4, 4)resblock_kernel_sizes: list[int] | tuple[int, ...] = (3, 7, 11)resblock_dilation_sizes: list | tuple | None = Noneinitializer_range: float = 0.01leaky_relu_slope: float = 0.1normalize_before: bool = True )

参数

  • model_in_dim (int,可选,默认为 80) — 输入对数梅尔频谱图中的频率分箱数量。
  • upsample_initial_channel (int, 可选,默认为 512) — 上采样网络的输入通道数。
  • upsample_rates (tuple[int] 或 list[int],可选,默认为 [8, 8, 2, 2]) — 一个整数元组,用于定义上采样网络中每个一维卷积层的步长。upsample_rates 的长度决定了卷积层的数量,并且必须与 upsample_kernel_sizes 的长度相匹配。
  • upsample_kernel_sizes (tuple[int] 或 list[int],可选,默认为 [16, 16, 4, 4]) — 一个整数元组,用于定义上采样网络中每个一维卷积层的卷积核大小。upsample_kernel_sizes 的长度定义了卷积层的数量,并且必须与 upsample_rates 的长度相匹配。
  • resblock_kernel_sizes (tuple[int] 或 list[int],可选,默认为 [3, 7, 11]) — 一个整数元组,用于定义多感受野融合(MRF)模块中一维卷积层的卷积核大小。
  • resblock_dilation_sizes (tuple[tuple[int]] 或 list[list[int]],可选,默认为 [[1, 3, 5], [1, 3, 5], [1, 3, 5]]) — 一个嵌套的整数元组,用于定义多感受野融合(MRF)模块中膨胀一维卷积层的膨胀率。
  • initializer_range (float,可选,默认为 0.01) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • leaky_relu_slope (float,可选,默认为 0.1) — Leaky ReLU 激活函数所使用的负斜率角度。
  • normalize_before (bool,可选,默认为 True) — 是否在使用声码器进行声码化之前,利用声码器学习到的均值和方差对频谱图进行归一化。

这是用于存储 FastSpeech2ConformerModel 配置的类。它根据指定的参数实例化 Fastspeech2 Conformer 模型,并定义模型架构。使用默认值实例化配置,将得到与 espnet/fastspeech2_conformer_with_hifigan 类似的配置。

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

示例:

>>> from transformers import FastSpeech2ConformerHifiGan, FastSpeech2ConformerHifiGanConfig

>>> # Initializing a FastSpeech2ConformerHifiGan configuration
>>> configuration = FastSpeech2ConformerHifiGanConfig()

>>> # Initializing a model (with random weights) from the configuration
>>> model = FastSpeech2ConformerHifiGan(configuration)

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

FastSpeech2ConformerWithHifiGanConfig

class transformers.FastSpeech2ConformerWithHifiGanConfig

< >

( 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 = Nonemodel_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonevocoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None )

参数

  • model_config (FastSpeech2ConformerConfig | dict,可选) — 文本转语音模型的配置。
  • vocoder_config (FastSpeech2ConformerHiFiGanConfig | dict, 可选) — 声码器模型的配置。

这是用于存储 FastSpeech2ConformerModel 配置的类。它根据指定的参数实例化 Fastspeech2 Conformer 模型,并定义模型架构。使用默认值实例化配置,将得到与 espnet/fastspeech2_conformer_with_hifigan 类似的配置。

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

示例:

>>> from transformers import (
...     FastSpeech2ConformerConfig,
...     FastSpeech2ConformerHifiGanConfig,
...     FastSpeech2ConformerWithHifiGanConfig,
...     FastSpeech2ConformerWithHifiGan,
... )

>>> # Initializing FastSpeech2ConformerWithHifiGan sub-modules configurations.
>>> model_config = FastSpeech2ConformerConfig()
>>> vocoder_config = FastSpeech2ConformerHifiGanConfig()

>>> # Initializing a FastSpeech2ConformerWithHifiGan module style configuration
>>> configuration = FastSpeech2ConformerWithHifiGanConfig(model_config.to_dict(), vocoder_config.to_dict())

>>> # Initializing a model (with random weights)
>>> model = FastSpeech2ConformerWithHifiGan(configuration)

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

FastSpeech2ConformerTokenizer

class transformers.FastSpeech2ConformerTokenizer

< >

( vocab_filebos_token = '<sos/eos>'eos_token = '<sos/eos>'pad_token = '<blank>'unk_token = '<unk>'should_strip_spaces = False**kwargs )

参数

  • vocab_file (str) — 词汇表文件的路径。
  • bos_token(str,可选,默认为 "<sos/eos>") — 序列起始标记。请注意,对于 FastSpeech2,它与 eos_token 相同。
  • eos_token (str,可选,默认为 "<sos/eos>") — 序列结束标记。请注意,对于 FastSpeech2,它与 bos_token 相同。
  • pad_token (str,可选,默认为 "<blank>") — 用于填充的标记,例如在对长度不同的序列进行批处理时。
  • unk_token (str,可选,默认为 "<unk>") — 未知标记。不在词汇表中的标记无法转换为 ID,因此会被设置为该标记。
  • should_strip_spaces (bool,可选,默认为 False) — 是否去除 token 列表中的空格。

构建一个 FastSpeech2Conformer 分词器。

__call__

< >

( text: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = Nonetext_pair: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = Nonetext_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = Nonetext_pair_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = Noneadd_special_tokens: bool = Truepadding: bool | str | PaddingStrategy = Falsetruncation: bool | str | TruncationStrategy | None = Nonemax_length: int | None = Nonestride: int = 0is_split_into_words: bool = Falsepad_to_multiple_of: int | None = Nonepadding_side: str | None = Nonereturn_tensors: str | TensorType | None = Nonereturn_token_type_ids: bool | None = Nonereturn_attention_mask: bool | None = Nonereturn_overflowing_tokens: bool = Falsereturn_special_tokens_mask: bool = Falsereturn_offsets_mapping: bool = Falsereturn_length: bool = Falseverbose: bool = Truetokenizer_kwargs: dict[str, Any] | None = None**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(以消除与序列批次的歧义)。
  • tokenizer_kwargs (dict[str, Any], 可选) — 传递给 tokenizer 的额外 kwargs。这些 kwargs 将与显式参数及其他 kwargs 合并,其中显式参数具有更高的优先级。
  • add_special_tokens (bool,可选,默认为 True) — 在编码序列时是否添加特殊标记。此操作将使用底层的 PretrainedTokenizerBase.build_inputs_with_special_tokens 函数,该函数定义了哪些标记会自动添加到输入 ID 中。如果您希望自动添加 bos 或 eos 标记,此功能非常有用。
  • padding (bool, str 或 PaddingStrategy, ,可选, ,默认为 False) — 启用并控制填充。接受以下值:
    • True 或 'longest':填充至批次中最长的序列(如果仅提供单个序列,则不进行填充)。
    • 'max_length':填充至由参数 max_length 指定的最大长度;若未提供该参数,则填充至模型可接受的最大输入长度。
    • False 或 'do_not_pad'(默认值):不进行填充(即可以输出包含不同长度序列的批次)。
  • truncation (bool, str 或 TruncationStrategy, ,可选, ,默认为 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),则禁用截断/填充到最大长度的功能。

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

  • stride (int,可选,默认为 0) — 如果与 max_length 一起设置为某个数值,则当 return_overflowing_tokens=True 时,返回的溢出 token 将包含截断序列末尾的若干 token,以在截断序列和溢出序列之间提供一定的重叠。此参数的值定义了重叠 token 的数量。
  • is_split_into_words (bool,可选,默认为 False) — 输入是否已经预先分词(例如,已拆分为单词)。如果设置为 True,分词器将假设输入已经拆分为单词(例如,通过按空白字符拆分),然后对其进行分词。这对于命名实体识别(NER)或 token 分类非常有用。
  • pad_to_multiple_of (int, 可选) — 如果设置,则将序列填充为所提供值的倍数。需要启用 padding。 这对于在计算能力为 >= 7.5(Volta)的 NVIDIA 硬件上启用 Tensor Cores 的使用特别有用。
  • padding_side (str, 可选) — 模型应应用填充的一侧。应在 [‘right’, ‘left’] 之间进行选择。 默认值取自同名的类属性。
  • return_tensors (str 或 TensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:
    • 'pt':返回 PyTorch torch.Tensor 对象。
    • 'np':返回 Numpy np.ndarray 对象。
  • return_token_type_ids (bool, 可选) — 是否返回 token type ID。如果保持默认值,将根据特定分词器的默认设置返回 token type ID,该设置由 return_outputs 属性定义。

    什么是 token type ID?

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

    什么是注意力掩码?

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

    此功能仅在继承自 PreTrainedTokenizerFast 的快速分词器上可用。如果使用 Python 分词器,此方法将抛出 NotImplementedError。

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

返回值

BatchEncoding

一个包含以下字段的 BatchEncoding:

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

    什么是输入 ID?

  • token_type_ids — 要输入模型的 token 类型 ID 列表(当 return_token_type_ids=True 或 self.model_input_names 中包含 “token_type_ids” 时)。

    什么是 token type ID?

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

    什么是注意力掩码?

  • 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 表示添加的特殊标记,0 表示常规序列标记(当 add_special_tokens=True 且 return_special_tokens_mask=True 时)。

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

用于对一条或多条序列,或一对或多对序列进行分词并准备输入模型的主要方法。

save_vocabulary

< >

( save_directory: strfilename_prefix: str | None = None ) → Tuple(str)

参数

  • save_directory (str) — 用于保存词汇表的目录。

返回值

Tuple(str)

已保存文件的路径。

将词汇表和特殊标记文件保存到目录中。

decode

< >

( token_ids**kwargs )

batch_decode

< >

( sequences: list[int] | list[list[int]] | np.ndarray | torch.Tensorskip_special_tokens: bool = Falseclean_up_tokenization_spaces: bool | None = None**kwargs ) → list[str]

参数

  • sequences (Union[list[int], list[list[int]], np.ndarray, torch.Tensor]) — 分词后的输入 ID 列表。可通过 __call__ 方法获取。
  • skip_special_tokens(bool,可选,默认为 False)— 是否在解码过程中移除特殊标记。
  • clean_up_tokenization_spaces (bool, 可选) — 是否清理分词空格。如果为 None,则默认为 self.clean_up_tokenization_spaces。
  • kwargs(额外的关键字参数,可选) — 将传递给底层模型特定的解码方法。

返回值

list[str]

解码后的句子列表。

通过调用 decode,将 token id 的列表的列表转换为字符串列表。

此方法是为了向后兼容而提供的。decode 方法现在原生支持批量输入,因此您可以直接使用 decode 而无需使用 batch_decode。

FastSpeech2ConformerModel

class transformers.FastSpeech2ConformerModel

< >

( config: FastSpeech2ConformerConfig )

参数

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

FastSpeech2Conformer 模型。

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

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

forward

< >

( input_ids: LongTensorattention_mask: typing.Optional[torch.LongTensor] = Nonespectrogram_labels: typing.Optional[torch.Tensor] = Noneduration_labels: typing.Optional[torch.LongTensor] = Nonepitch_labels: typing.Optional[torch.Tensor] = Noneenergy_labels: typing.Optional[torch.Tensor] = Nonespeaker_ids: typing.Optional[torch.LongTensor] = Nonelang_ids: typing.Optional[torch.LongTensor] = Nonespeaker_embedding: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = None**kwargs ) → FastSpeech2ConformerModelOutput or tuple(torch.Tensor)

参数

  • input_ids(形状为 (batch_size, sequence_length) 的 torch.LongTensor)— 输入文本向量序列。
  • attention_mask (torch.LongTensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充(padding)标记索引执行注意力机制的掩码。掩码值取自 [0, 1]:1 表示未屏蔽的标记,0 表示被屏蔽的标记。什么是注意力掩码? [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • spectrogram_labels (torch.Tensor,形状为 (batch_size, max_spectrogram_length, num_mel_bins),可选,默认为 None) — 填充后的目标特征批次。
  • duration_labels(形状为 (batch_size, sequence_length + 1) 的 torch.LongTensor,可选,默认为 None) — 填充后的时长批次。
  • pitch_labels(形状为 (batch_size, sequence_length + 1, 1) 的 torch.Tensor,可选,默认为 None) — 填充后的按 token 平均的音高批次。
  • energy_labels (torch.Tensor,形状为 (batch_size, sequence_length + 1, 1),可选,默认为 None) — 一批填充后的 token 平均能量。
  • speaker_ids(形状为 (batch_size, 1) 的 torch.LongTensor,可选,默认为 None) — 用于条件化模型语音输出特征的说话人 ID。
  • lang_ids (torch.LongTensor,形状为 (batch_size, 1),可选,默认为 None) — 用于条件化模型语音输出特征的语种 ID。
  • speaker_embedding (torch.Tensor,形状为 (batch_size, embedding_dim),可选,默认为 None) — 包含语音特征条件信号的嵌入。
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量中的 attentions。
  • output_hidden_states (bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的 hidden_states。

返回值

FastSpeech2ConformerModelOutput 或 tuple(torch.Tensor)

FastSpeech2ConformerModelOutput 或 torch.Tensor 元组(如果传入 return_dict=False 或 config.return_dict=False),包含根据配置(FastSpeech2ConformerConfig)和输入而定的各种元素。

FastSpeech2ConformerModel 的 forward 方法会重写 __call__ 特殊方法。

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

  • loss(形状为 (1,) 的 torch.Tensor,可选,在提供 labels 时返回)— 频谱图生成损失。

  • 频谱图(形状为 (batch_size, sequence_length, num_bins) 的 torch.Tensor,可选)— 预测的频谱图。

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

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

    编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

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

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

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

    解码器在每一层输出处的隐藏状态,以及初始嵌入输出。

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

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

  • duration_outputs(形状为 (batch_size, max_text_length + 1) 的 torch.LongTensor,可选)— 时长预测器的输出。

  • pitch_outputs(形状为 (batch_size, max_text_length + 1, 1) 的 torch.Tensor,可选)— 音高预测器的输出。

  • energy_outputs(形状为 (batch_size, max_text_length + 1, 1) 的 torch.Tensor,可选)— 能量预测器的输出。

示例:

>>> from transformers import (
...     FastSpeech2ConformerTokenizer,
...     FastSpeech2ConformerModel,
...     FastSpeech2ConformerHifiGan,
... )

>>> tokenizer = FastSpeech2ConformerTokenizer.from_pretrained("espnet/fastspeech2_conformer")
>>> inputs = tokenizer("some text to convert to speech", return_tensors="pt")
>>> input_ids = inputs["input_ids"]

>>> model = FastSpeech2ConformerModel.from_pretrained("espnet/fastspeech2_conformer")
>>> output_dict = model(input_ids, return_dict=True)
>>> spectrogram = output_dict["spectrogram"]

>>> vocoder = FastSpeech2ConformerHifiGan.from_pretrained("espnet/fastspeech2_conformer_hifigan")
>>> waveform = vocoder(spectrogram)
>>> print(waveform.shape)
torch.Size([1, 49664])

FastSpeech2ConformerHifiGan

class transformers.FastSpeech2ConformerHifiGan

< >

( config: FastSpeech2ConformerHifiGanConfig )

参数

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

HiFi-GAN 声码器。

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

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

forward

< >

( spectrogram: Tensor**kwargs ) → torch.Tensor

参数

  • spectrogram (torch.Tensor) — 包含对数梅尔频谱图的张量。可以是批处理形式,形状为 (batch_size, sequence_length, config.model_in_dim),也可以是非批处理形式,形状为 (sequence_length, config.model_in_dim)。

返回值

torch.Tensor

包含语音波形的张量。如果输入频谱图是批处理的,其形状为 (batch_size, num_frames,)。如果未进行批处理,其形状为 (num_frames,)。

将 log-mel 频谱图转换为语音波形。传入一批 log-mel 频谱图将返回一批语音波形。传入单个未批处理的 log-mel 频谱图将返回单个未批处理的语音波形。

FastSpeech2ConformerWithHifiGan

class transformers.FastSpeech2ConformerWithHifiGan

< >

( config: FastSpeech2ConformerWithHifiGanConfig )

参数

配备 FastSpeech2ConformerHifiGan 声码器头的 FastSpeech2ConformerModel,用于执行文本转语音(波形)。

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

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

forward

< >

( input_ids: LongTensorattention_mask: typing.Optional[torch.LongTensor] = Nonespectrogram_labels: typing.Optional[torch.Tensor] = Noneduration_labels: typing.Optional[torch.LongTensor] = Nonepitch_labels: typing.Optional[torch.Tensor] = Noneenergy_labels: typing.Optional[torch.Tensor] = Nonespeaker_ids: typing.Optional[torch.LongTensor] = Nonelang_ids: typing.Optional[torch.LongTensor] = Nonespeaker_embedding: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = None**kwargs ) → FastSpeech2ConformerModelOutput or tuple(torch.Tensor)

参数

  • input_ids(形状为 (batch_size, sequence_length) 的 torch.LongTensor)— 输入文本向量序列。
  • attention_mask (torch.LongTensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充(padding)标记索引执行注意力机制的掩码。掩码值取自 [0, 1]:1 表示未屏蔽的标记,0 表示被屏蔽的标记。什么是注意力掩码? [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • spectrogram_labels (torch.Tensor,形状为 (batch_size, max_spectrogram_length, num_mel_bins),可选,默认为 None) — 填充后的目标特征批次。
  • duration_labels(形状为 (batch_size, sequence_length + 1) 的 torch.LongTensor,可选,默认为 None) — 填充后的时长批次。
  • pitch_labels(形状为 (batch_size, sequence_length + 1, 1) 的 torch.Tensor,可选,默认为 None) — 填充后的按 token 平均的音高批次。
  • energy_labels (torch.Tensor,形状为 (batch_size, sequence_length + 1, 1),可选,默认为 None) — 一批填充后的 token 平均能量。
  • speaker_ids(形状为 (batch_size, 1) 的 torch.LongTensor,可选,默认为 None) — 用于条件化模型语音输出特征的说话人 ID。
  • lang_ids (torch.LongTensor,形状为 (batch_size, 1),可选,默认为 None) — 用于条件化模型语音输出特征的语种 ID。
  • speaker_embedding (torch.Tensor,形状为 (batch_size, embedding_dim),可选,默认为 None) — 包含语音特征条件信号的嵌入。
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量中的 attentions。
  • output_hidden_states (bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的 hidden_states。

返回值

FastSpeech2ConformerModelOutput 或 tuple(torch.Tensor)

FastSpeech2ConformerModelOutput 或 torch.Tensor 元组(如果传入 return_dict=False 或 config.return_dict=False),包含根据配置(FastSpeech2ConformerConfig)和输入而定的各种元素。

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

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

  • loss(形状为 (1,) 的 torch.Tensor,可选,在提供 labels 时返回)— 频谱图生成损失。

  • 频谱图(形状为 (batch_size, sequence_length, num_bins) 的 torch.Tensor,可选)— 预测的频谱图。

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

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

    编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

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

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

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

    解码器在每一层输出处的隐藏状态,以及初始嵌入输出。

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

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

  • duration_outputs(形状为 (batch_size, max_text_length + 1) 的 torch.LongTensor,可选)— 时长预测器的输出。

  • pitch_outputs(形状为 (batch_size, max_text_length + 1, 1) 的 torch.Tensor,可选)— 音高预测器的输出。

  • energy_outputs(形状为 (batch_size, max_text_length + 1, 1) 的 torch.Tensor,可选)— 能量预测器的输出。

示例:

>>> from transformers import (
...     FastSpeech2ConformerTokenizer,
...     FastSpeech2ConformerWithHifiGan,
... )

>>> tokenizer = FastSpeech2ConformerTokenizer.from_pretrained("espnet/fastspeech2_conformer")
>>> inputs = tokenizer("some text to convert to speech", return_tensors="pt")
>>> input_ids = inputs["input_ids"]

>>> model = FastSpeech2ConformerWithHifiGan.from_pretrained("espnet/fastspeech2_conformer_with_hifigan")
>>> output_dict = model(input_ids, return_dict=True)
>>> waveform = output_dict["waveform"]
>>> print(waveform.shape)
torch.Size([1, 49664])
Update on GitHub