Transformers 文档

WavLM

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

开始使用

WavLM

PyTorch

概述

WavLM 模型在 WavLM: Large-Scale Self-Supervised Pre-Training for Full Stack Speech Processing 一文中提出,作者为 Sanyuan Chen, Chengyi Wang, Zhengyang Chen, Yu Wu, Shujie Liu, Zhuo Chen, Jinyu Li, Naoyuki Kanda, Takuya Yoshioka, Xiong Xiao, Jian Wu, Long Zhou, Shuo Ren, Yanmin Qian, Yao Qian, Jian Wu, Michael Zeng, Furu Wei。

该论文的摘要如下:

自监督学习 (SSL) 在语音识别领域取得了巨大成功,但在其他语音处理任务中的探索仍然有限。由于语音信号包含多方面的信息,包括说话人身份、副语言学特征、口语内容等,因此为所有语音任务学习通用表示具有挑战性。在本文中,我们提出了一个新的预训练模型 WavLM,以解决全栈下游语音任务。WavLM 基于 HuBERT 框架构建,重点是口语内容建模和说话人身份保留。我们首先为 Transformer 结构配备门控相对位置偏置,以提高其在识别任务中的能力。为了更好地进行说话人区分,我们提出了一种话语混合训练策略,其中额外重叠的话语以无监督的方式创建并在模型训练期间合并。最后,我们将训练数据集从 6 万小时扩大到 9.4 万小时。WavLM Large 在 SUPERB 基准测试中取得了最先进的性能,并为各种语音处理任务的代表性基准带来了显著的改进。

相关的检查点可以在 https://huggingface.co/models?other=wavlm 下找到。

此模型由 patrickvonplaten 贡献。作者的代码可以在 这里 找到。

使用技巧

  • WavLM 是一个语音模型,它接受对应于语音信号原始波形的浮点数组。请使用 Wav2Vec2Processor 进行特征提取。
  • WavLM 模型可以使用连接时序分类 (CTC) 进行微调,因此模型输出必须使用 Wav2Vec2CTCTokenizer 进行解码。
  • WavLM 在说话人验证、说话人识别和说话人日志分割任务中表现尤其出色。

资源

WavLMConfig

class transformers.WavLMConfig

< >

( vocab_size = 32 hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout = 0.1 activation_dropout = 0.1 attention_dropout = 0.1 feat_proj_dropout = 0.0 final_dropout = 0.1 layerdrop = 0.1 initializer_range = 0.02 layer_norm_eps = 1e-05 feat_extract_norm = 'group' feat_extract_activation = 'gelu' conv_dim = (512, 512, 512, 512, 512, 512, 512) conv_stride = (5, 2, 2, 2, 2, 2, 2) conv_kernel = (10, 3, 3, 3, 3, 2, 2) conv_bias = False num_conv_pos_embeddings = 128 num_conv_pos_embedding_groups = 16 num_buckets = 320 max_bucket_distance = 800 do_stable_layer_norm = False apply_spec_augment = True mask_time_prob = 0.05 mask_time_length = 10 mask_time_min_masks = 2 mask_feature_prob = 0.0 mask_feature_length = 10 num_codevectors_per_group = 320 num_codevector_groups = 2 contrastive_logits_temperature = 0.1 num_negatives = 100 codevector_dim = 256 proj_codevector_dim = 256 diversity_loss_weight = 0.1 ctc_loss_reduction = 'mean' ctc_zero_infinity = False use_weighted_layer_sum = False classifier_proj_size = 256 tdnn_dim = (512, 512, 512, 512, 1500) tdnn_kernel = (5, 3, 3, 1, 1) tdnn_dilation = (1, 2, 3, 1, 1) xvector_output_dim = 512 num_ctc_classes = 80 pad_token_id = 0 bos_token_id = 1 eos_token_id = 2 add_adapter = False adapter_kernel_size = 3 adapter_stride = 2 num_adapter_layers = 3 output_hidden_size = None **kwargs )

参数

  • vocab_size (int, 可选, 默认为 32) — WavLM 模型的词汇表大小。定义了调用 WavLMModel 时传递的 inputs_ids 可以表示的不同 token 的数量。模型的词汇表大小。定义了传递给 WavLMModel 的前向方法的 inputs_ids 可以表示的不同 token。
  • hidden_size (int, 可选, 默认为 768) — 编码器层和池化器层的维度。
  • num_hidden_layers (int, 可选, 默认为 12) — Transformer 编码器中的隐藏层数。
  • num_attention_heads (int, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数。
  • intermediate_size (int, 可选, 默认为 3072) — Transformer 编码器中“中间”(即,前馈)层的维度。
  • hidden_act (strfunction, 可选, 默认为 "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持 "gelu""relu""selu""gelu_new"
  • hidden_dropout (float, 可选, 默认为 0.1) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。
  • activation_dropout (float, 可选, 默认为 0.1) — 全连接层内部激活的 dropout 比率。
  • attention_dropout (float, 可选, 默认为 0.1) — 注意力概率的 dropout 比率。
  • final_dropout (float, 可选, 默认为 0.1) — WavLMForCTC 最终投影层的 dropout 概率。
  • layerdrop (float, 可选, 默认为 0.1) — LayerDrop 概率。 详见 https://arxiv.org/abs/1909.11556 了解更多细节。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。
  • layer_norm_eps (float, 可选, 默认为 1e-12) — 层归一化层使用的 epsilon 值。
  • feat_extract_norm (str, 可选, 默认为 "group") — 应用于特征编码器中 1D 卷积层的标准化类型。 可选 "group" (仅对第一个 1D 卷积层进行组归一化) 或 "layer" (对所有 1D 卷积层进行层归一化)。
  • feat_proj_dropout (float, 可选, 默认为 0.0) — 特征编码器输出的 dropout 概率。
  • feat_extract_activation (str, 可选, 默认为 “gelu”) -- 特征提取器 1D 卷积层中的非线性激活函数(函数或字符串)。 如果是字符串,则支持 “gelu”, “relu”, “selu”“gelu_new”
  • conv_dim (Tuple[int]List[int], 可选, 默认为 (512, 512, 512, 512, 512, 512, 512)) — 一个整数元组,定义特征编码器中每个 1D 卷积层的输入和输出通道数。 conv_dim 的长度定义了 1D 卷积层的数量。
  • conv_stride (Tuple[int]List[int], 可选, 默认为 (5, 2, 2, 2, 2, 2, 2)) — 一个整数元组,定义特征编码器中每个 1D 卷积层的步幅。 conv_stride 的长度定义了卷积层的数量,并且必须与 conv_dim 的长度匹配。
  • conv_kernel (Tuple[int]List[int], 可选, 默认为 (10, 3, 3, 3, 3, 3, 3)) — 一个整数元组,定义特征编码器中每个 1D 卷积层的内核大小。 conv_kernel 的长度定义了卷积层的数量,并且必须与 conv_dim 的长度匹配。
  • conv_bias (bool, 可选, 默认为 False) — 1D 卷积层是否具有偏置。
  • num_conv_pos_embeddings (int, 可选, 默认为 128) — 卷积位置嵌入的数量。 定义 1D 卷积位置嵌入层的内核大小。
  • num_conv_pos_embedding_groups (int, 可选, 默认为 16) — 1D 卷积位置嵌入层的组数。
  • do_stable_layer_norm (bool, 可选, 默认为 False) — 是否应用 Transformer 编码器的稳定层归一化架构。 do_stable_layer_norm is True 对应于在注意力层之前应用层归一化,而 do_stable_layer_norm is False 对应于在注意力层之后应用层归一化。
  • apply_spec_augment (bool, 可选, 默认为 True) — 是否对特征编码器的输出应用 SpecAugment 数据增强。 参考 SpecAugment: A Simple Data Augmentation Method for Automatic Speech Recognition
  • mask_time_prob (float, 可选, 默认为 0.05) — 沿时间轴的每个特征向量被选为要掩码的向量跨度起点的概率。 大约 mask_time_prob * sequence_length // mask_time_length 个特征向量将沿时间轴被掩码。 这仅在 apply_spec_augment is True 时相关。
  • mask_time_length (int, 可选, 默认为 10) — 沿时间轴的向量跨度长度。
  • mask_time_min_masks (int, 可选, 默认为 2), — 沿时间轴生成的长度为 mask_feature_length 的掩码的最小数量,每个时间步,与 mask_feature_prob 无关。 仅在 ”mask_time_prob*len(time_axis)/mask_time_length < mask_time_min_masks” 时相关。
  • mask_feature_prob (float, 可选, 默认为 0.0) — 沿特征轴的每个特征向量被选为要掩码的向量跨度起点的概率。 大约 mask_time_prob * hidden_size // mask_time_length 个特征向量将沿时间轴被掩码。 这仅在 apply_spec_augment is True 时相关。
  • mask_feature_length (int, 可选, 默认为 10) — 沿特征轴的向量跨度长度。
  • num_codevectors_per_group (int, 可选, 默认为 320) — 每个量化码本(组)中的条目数。
  • num_codevector_groups (int, 可选, 默认为 2) — 用于乘积码本向量量化的码本向量组数。
  • contrastive_logits_temperature (float, 可选, 默认为 0.1) — 对比损失中的温度系数 kappa
  • num_negatives (int, 可选, 默认为 100) — 对比损失的负样本数。
  • codevector_dim (int, 可选, 默认为 256) — 量化特征向量的维度。
  • proj_codevector_dim (int, 可选, 默认为 256) — 量化特征和 Transformer 特征最终投影的维度。
  • diversity_loss_weight (int, 可选, 默认为 0.1) — 码本多样性损失分量的权重。
  • ctc_loss_reduction (str, 可选, 默认为 "mean") — 指定应用于 torch.nn.CTCLoss 输出的缩减方式。仅当训练 WavLMForCTC 实例时相关。
  • ctc_zero_infinity (bool, 可选, 默认为 False) — 是否将 torch.nn.CTCLoss 的无限损失及其相关的梯度置零。当输入过短而无法与目标对齐时,主要会发生无限损失。仅当训练 WavLMForCTC 实例时相关。
  • use_weighted_layer_sum (bool, 可选, 默认为 False) — 是否使用层输出的加权平均值和学习权重。仅当使用 WavLMForSequenceClassification 实例时相关。
  • classifier_proj_size (int, 可选, 默认为 256) — 用于分类的 token 均值池化之前的投影维度。
  • tdnn_dim (Tuple[int]List[int], 可选, 默认为 (512, 512, 512, 512, 1500)) — 定义 XVector 模型的 TDNN 模块中每个 1D 卷积层的输出通道数的整数元组。 tdnn_dim 的长度定义了 TDNN 层的数量。
  • tdnn_kernel (Tuple[int]List[int], 可选, 默认为 (5, 3, 3, 1, 1)) — 定义 XVector 模型的 TDNN 模块中每个 1D 卷积层的内核大小的整数元组。 tdnn_kernel 的长度必须与 tdnn_dim 的长度匹配。
  • tdnn_dilation (Tuple[int]List[int], 可选, 默认为 (1, 2, 3, 1, 1)) — 定义 XVector 模型的 TDNN 模块中每个 1D 卷积层的扩张因子的整数元组。 tdnn_dilation 的长度必须与 tdnn_dim 的长度匹配。
  • xvector_output_dim (int, 可选, 默认为 512) — XVector 嵌入向量的维度。
  • add_adapter (bool, 可选, 默认为 False) — 是否应在 Wav2Vec2 编码器之上堆叠卷积网络。 对于 SpeechEncoderDecoder 模型的热启动 Wav2Vec2 非常有用。
  • adapter_kernel_size (int, 可选, 默认为 3) — 适配器网络中卷积层的内核大小。 仅当 add_adapter is True 时相关。
  • adapter_stride (int, 可选, 默认为 2) — 适配器网络中卷积层的步幅。 仅当 add_adapter is True 时相关。
  • num_adapter_layers (int, 可选, 默认为 3) — 适配器网络中应使用的卷积层数。 仅当 add_adapter is True 时相关。
  • output_hidden_size (int, 可选) — 编码器输出层的维度。 如果未定义,则默认为 hidden-size。 仅当 add_adapter is True 时相关。

这是用于存储 WavLMModel 配置的配置类。 它用于根据指定的参数实例化 WavLM 模型,定义模型架构。 使用默认值实例化配置将产生与 WavLM microsoft/wavlm-base 架构类似的配置。

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

示例

示例

>>> from transformers import WavLMConfig, WavLMModel

>>> # Initializing a WavLM facebook/wavlm-base-960h style configuration
>>> configuration = WavLMConfig()

>>> # Initializing a model (with random weights) from the facebook/wavlm-base-960h style configuration
>>> model = WavLMModel(configuration)

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

WavLMModel

class transformers.WavLMModel

< >

( config: WavLMConfig )

参数

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

裸 WavLM 模型 Transformer 输出原始隐藏状态,顶部没有任何特定的 head。 WavLM 在 WavLM: Unified Speech Representation Learning with Labeled and Unlabeled Data 中提出,作者包括 Sanyuan Chen, Chengyi Wang, Zhengyang Chen, Yu Wu, Shujie Liu, Zhuo Chen, Jinyu Li, Naoyuki Kanda, Takuya Yoshioka, Xiong Xiao, Jian Wu, Long Zhou, Shuo Ren, Yanmin Qian, Yao Qian, Jian Wu, Michael Zeng, Xiangzhan Yu, Furu Wei。

此模型继承自 PreTrainedModel。 查看超类文档以获取库为其所有模型实现的通用方法(例如下载或保存等)。

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

forward

< >

( input_values: typing.Optional[torch.Tensor] attention_mask: typing.Optional[torch.Tensor] = None mask_time_indices: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.Wav2Vec2BaseModelOutput or tuple(torch.FloatTensor)

参数

  • input_values (torch.FloatTensor,形状为 (batch_size, sequence_length)) — 输入原始语音波形的浮点值。 值可以通过将 .flac.wav 音频文件加载到 List[float] 类型的数组或 numpy.ndarray 中获得,例如 通过 soundfile 库 (pip install soundfile)。 为了将数组准备为 input_values,应使用 AutoProcessor 进行填充并转换为 torch.FloatTensor 类型的张量。 有关详细信息,请参阅 Wav2Vec2Processor.call()
  • attention_mask (torch.LongTensor,形状为 (batch_size, sequence_length), 可选) — 用于避免在填充 token 索引上执行卷积和注意力的掩码。 掩码值在 [0, 1] 中选择:

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

    什么是注意力掩码?

    只有当相应的处理器具有 config.return_attention_mask == True 时,才应传递 attention_mask。 对于所有处理器具有 config.return_attention_mask == False 的模型,不应传递 attention_mask,以避免在执行批量推理时性能下降。 对于此类模型,input_values 应简单地用 0 填充并在不使用 attention_mask 的情况下传递。 请注意,这些模型的结果也会因 input_values 是否填充而略有不同。

  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。

返回值

transformers.modeling_outputs.Wav2Vec2BaseModelOutputtuple(torch.FloatTensor)

transformers.modeling_outputs.Wav2Vec2BaseModelOutputtorch.FloatTensor 元组(如果传递 return_dict=False 或当 config.return_dict=False 时),包括各种元素,具体取决于配置 (WavLMConfig) 和输入。

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

  • extract_features (torch.FloatTensor,形状为 (batch_size, sequence_length, conv_dim[-1])) — 模型最后一个卷积层的提取特征向量序列。

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

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

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

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

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

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

示例

>>> from transformers import AutoProcessor, WavLMModel
>>> import torch
>>> from datasets import load_dataset

>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation", trust_remote_code=True)
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate

>>> processor = AutoProcessor.from_pretrained("patrickvonplaten/wavlm-libri-clean-100h-base-plus")
>>> model = WavLMModel.from_pretrained("patrickvonplaten/wavlm-libri-clean-100h-base-plus")

>>> # audio file is decoded on the fly
>>> inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
>>> with torch.no_grad():
...     outputs = model(**inputs)

>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 292, 768]

WavLMForCTC

class transformers.WavLMForCTC

< >

( config target_lang: typing.Optional[str] = None )

参数

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

WavLM 模型,顶部带有一个用于连接时序分类 (CTC) 的 language modeling 头。WavLM 在 WavLM: Unified Speech Representation Learning with Labeled and Unlabeled Data 中提出,作者为 Sanyuan Chen, Chengyi Wang, Zhengyang Chen, Yu Wu, Shujie Liu, Zhuo Chen, Jinyu Li, Naoyuki Kanda, Takuya Yoshioka, Xiong Xiao, Jian Wu, Long Zhou, Shuo Ren, Yanmin Qian, Yao Qian, Jian Wu, Michael Zeng, Xiangzhan Yu, Furu Wei。

此模型继承自 PreTrainedModel。 查看超类文档以获取库为其所有模型实现的通用方法(例如下载或保存等)。

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

forward

< >

( input_values: typing.Optional[torch.Tensor] attention_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None ) transformers.modeling_outputs.CausalLMOutput or tuple(torch.FloatTensor)

参数

  • input_values (torch.FloatTensor,形状为 (batch_size, sequence_length)) — 输入原始语音波形的浮点值。值可以通过将 .flac.wav 音频文件加载到 List[float] 类型的数组或 numpy.ndarray 中获得,例如 通过 soundfile 库 (pip install soundfile)。要将数组准备为 input_values,应使用 AutoProcessor 进行填充并转换为 torch.FloatTensor 类型的张量。 有关详细信息,请参阅 Wav2Vec2Processor.call()
  • attention_mask (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 掩码,用于避免对填充 token 索引执行卷积和注意力机制。掩码值在 [0, 1] 中选择:

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

    什么是注意力掩码?

    只有当对应的 processor 的 config.return_attention_mask == True 时,才应传递 attention_mask。对于所有 processor 的 config.return_attention_mask == False 的模型,应传递 attention_mask,以避免在进行批量推理时性能下降。对于此类模型,input_values 应仅用 0 填充并传递,而无需 attention_mask。请注意,这些模型也会产生略有不同的结果,具体取决于 input_values 是否填充。

  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。
  • labels (torch.LongTensor,形状为 (batch_size, target_length)可选) — 用于连接时序分类的标签。 请注意,target_length 必须小于或等于输出 logits 的序列长度。 索引在 [-100, 0, ..., config.vocab_size - 1] 中选择。 所有设置为 -100 的标签都将被忽略(掩码),损失仅针对 [0, ..., config.vocab_size - 1] 中的标签计算。

返回值

transformers.modeling_outputs.CausalLMOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.CausalLMOutput 或一个 torch.FloatTensor 元组(如果传递 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置 (WavLMConfig) 和输入。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供 labels 时返回) — 语言建模损失(用于下一个 token 预测)。

  • logits (torch.FloatTensor,形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇 token 的分数)。

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

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

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

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

WavLMForCTC 前向方法,覆盖了 __call__ 特殊方法。

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

示例

>>> from transformers import AutoProcessor, WavLMForCTC
>>> from datasets import load_dataset
>>> import torch

>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation", trust_remote_code=True)
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate

>>> processor = AutoProcessor.from_pretrained("patrickvonplaten/wavlm-libri-clean-100h-base-plus")
>>> model = WavLMForCTC.from_pretrained("patrickvonplaten/wavlm-libri-clean-100h-base-plus")

>>> # audio file is decoded on the fly
>>> inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
>>> with torch.no_grad():
...     logits = model(**inputs).logits
>>> predicted_ids = torch.argmax(logits, dim=-1)

>>> # transcribe speech
>>> transcription = processor.batch_decode(predicted_ids)
>>> transcription[0]
'mister quilter is the aposle of the middle classes and we are glad to welcome his gospel'

>>> inputs["labels"] = processor(text=dataset[0]["text"], return_tensors="pt").input_ids

>>> # compute loss
>>> loss = model(**inputs).loss
>>> round(loss.item(), 2)
12.51

WavLMForSequenceClassification

class transformers.WavLMForSequenceClassification

< >

( config )

参数

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

WavLM 模型,顶部带有一个序列分类头(池化输出上的线性层),用于诸如 SUPERB 关键词检测之类的任务。

WavLM 在 WavLM: Unified Speech Representation Learning with Labeled and Unlabeled Data 中提出,作者为 Sanyuan Chen, Chengyi Wang, Zhengyang Chen, Yu Wu, Shujie Liu, Zhuo Chen, Jinyu Li, Naoyuki Kanda, Takuya Yoshioka, Xiong Xiao, Jian Wu, Long Zhou, Shuo Ren, Yanmin Qian, Yao Qian, Jian Wu, Michael Zeng, Xiangzhan Yu, Furu Wei。

此模型继承自 PreTrainedModel。 查看超类文档以获取库为其所有模型实现的通用方法(例如下载或保存等)。

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

forward

< >

( input_values: typing.Optional[torch.Tensor] attention_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None ) transformers.modeling_outputs.SequenceClassifierOutput or tuple(torch.FloatTensor)

参数

  • input_values (torch.FloatTensor,形状为 (batch_size, sequence_length)) — 输入原始语音波形的浮点值。值可以通过将 .flac.wav 音频文件加载到 List[float] 类型的数组或 numpy.ndarray 中获得,例如 通过 soundfile 库 (pip install soundfile)。要将数组准备为 input_values,应使用 AutoProcessor 进行填充并转换为 torch.FloatTensor 类型的张量。 有关详细信息,请参阅 Wav2Vec2Processor.call()
  • attention_mask (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 掩码,用于避免对填充 token 索引执行卷积和注意力机制。掩码值在 [0, 1] 中选择:

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

    什么是注意力掩码?

    只有当对应的 processor 的 config.return_attention_mask == True 时,才应传递 attention_mask。对于所有 processor 的 config.return_attention_mask == False 的模型,应传递 attention_mask,以避免在进行批量推理时性能下降。对于此类模型,input_values 应仅用 0 填充并传递,而无需 attention_mask。请注意,这些模型也会产生略有不同的结果,具体取决于 input_values 是否填充。

  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算序列分类/回归损失的标签。 索引应在 [0, ..., config.num_labels - 1] 中。 如果 config.num_labels == 1,则计算回归损失(均方误差损失),如果 config.num_labels > 1,则计算分类损失(交叉熵)。

返回值

transformers.modeling_outputs.SequenceClassifierOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.SequenceClassifierOutput 或一个 torch.FloatTensor 元组(如果传递 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置 (WavLMConfig) 和输入。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供 labels 时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。

  • logits (torch.FloatTensor,形状为 (batch_size, config.num_labels)) — 分类分数(如果 config.num_labels==1,则为回归分数)(SoftMax 之前)。

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

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

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

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

WavLMForSequenceClassification 前向方法,覆盖了 __call__ 特殊方法。

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

示例

>>> from transformers import AutoFeatureExtractor, WavLMForSequenceClassification
>>> from datasets import load_dataset
>>> import torch

>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation", trust_remote_code=True)
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate

>>> feature_extractor = AutoFeatureExtractor.from_pretrained("patrickvonplaten/wavlm-libri-clean-100h-base-plus")
>>> model = WavLMForSequenceClassification.from_pretrained("patrickvonplaten/wavlm-libri-clean-100h-base-plus")

>>> # audio file is decoded on the fly
>>> inputs = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_ids = torch.argmax(logits, dim=-1).item()
>>> predicted_label = model.config.id2label[predicted_class_ids]

>>> # compute loss - target_label is e.g. "down"
>>> target_label = model.config.id2label[0]
>>> inputs["labels"] = torch.tensor([model.config.label2id[target_label]])
>>> loss = model(**inputs).loss

WavLMForAudioFrameClassification

class transformers.WavLMForAudioFrameClassification

< >

( config )

参数

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

带有帧分类头的 WavLM 模型,用于诸如说话人分割之类的任务。

WavLM 在 WavLM: Unified Speech Representation Learning with Labeled and Unlabeled Data 中提出,作者为 Sanyuan Chen, Chengyi Wang, Zhengyang Chen, Yu Wu, Shujie Liu, Zhuo Chen, Jinyu Li, Naoyuki Kanda, Takuya Yoshioka, Xiong Xiao, Jian Wu, Long Zhou, Shuo Ren, Yanmin Qian, Yao Qian, Jian Wu, Michael Zeng, Xiangzhan Yu, Furu Wei。

此模型继承自 PreTrainedModel。 查看超类文档以获取库为其所有模型实现的通用方法(例如下载或保存等)。

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

forward

< >

( input_values: typing.Optional[torch.Tensor] attention_mask: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.TokenClassifierOutputtuple(torch.FloatTensor)

参数

  • input_values (torch.FloatTensor,形状为 (batch_size, sequence_length)) — 输入原始语音波形的浮点值。这些值可以通过将 .flac.wav 音频文件加载到 List[float] 类型的数组或 numpy.ndarray 中获得,例如 通过 soundfile 库 (pip install soundfile)。为了将数组准备为 input_values,应该使用 AutoProcessor 进行填充和转换为 torch.FloatTensor 类型的张量。有关详细信息,请参阅 Wav2Vec2Processor.call()
  • attention_mask (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 用于避免在填充 token 索引上执行卷积和注意力的掩码。掩码值在 [0, 1] 中选择:

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

    什么是注意力掩码?

    只有当对应的 processor 具有 config.return_attention_mask == True 时,才应传递 attention_mask。对于所有 processor 具有 config.return_attention_mask == False 的模型,为了避免在执行批量推理时性能下降,不应 传递 attention_mask。对于此类模型,input_values 应该简单地用 0 填充,并在不使用 attention_mask 的情况下传递。请注意,这些模型的结果也会因 input_values 是否填充而略有不同。

  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是纯元组。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算序列分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 中。如果 config.num_labels == 1,则计算回归损失(均方误差损失);如果 config.num_labels > 1,则计算分类损失(交叉熵损失)。

返回值

transformers.modeling_outputs.TokenClassifierOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.TokenClassifierOutput 或一个 torch.FloatTensor 元组(如果传递 return_dict=False 或当 config.return_dict=False 时),其中包含各种元素,具体取决于配置 (WavLMConfig) 和输入。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供 labels 时返回) — 分类损失。

  • logits (torch.FloatTensor,形状为 (batch_size, sequence_length, config.num_labels)) — 分类得分(SoftMax 之前)。

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

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

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

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

WavLMForAudioFrameClassification 的 forward 方法,覆盖了 __call__ 特殊方法。

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

示例

>>> from transformers import AutoFeatureExtractor, WavLMForAudioFrameClassification
>>> from datasets import load_dataset
>>> import torch

>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation", trust_remote_code=True)
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate

>>> feature_extractor = AutoFeatureExtractor.from_pretrained("microsoft/wavlm-base-plus-sd")
>>> model = WavLMForAudioFrameClassification.from_pretrained("microsoft/wavlm-base-plus-sd")

>>> # audio file is decoded on the fly
>>> inputs = feature_extractor(dataset[0]["audio"]["array"], return_tensors="pt", sampling_rate=sampling_rate)
>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> probabilities = torch.sigmoid(logits[0])
>>> # labels is a one-hot array of shape (num_frames, num_speakers)
>>> labels = (probabilities > 0.5).long()
>>> labels[0].tolist()
[0, 0]

WavLMForXVector

class transformers.WavLMForXVector

< >

( config )

参数

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

带有 XVector 特征提取头的 WavLM 模型,用于诸如说话人验证之类的任务。

WavLM 在 WavLM: Unified Speech Representation Learning with Labeled and Unlabeled Data 中提出,作者为 Sanyuan Chen, Chengyi Wang, Zhengyang Chen, Yu Wu, Shujie Liu, Zhuo Chen, Jinyu Li, Naoyuki Kanda, Takuya Yoshioka, Xiong Xiao, Jian Wu, Long Zhou, Shuo Ren, Yanmin Qian, Yao Qian, Jian Wu, Michael Zeng, Xiangzhan Yu, Furu Wei。

此模型继承自 PreTrainedModel。 查看超类文档以获取库为其所有模型实现的通用方法(例如下载或保存等)。

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

forward

< >

( input_values: typing.Optional[torch.Tensor] attention_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None ) transformers.modeling_outputs.XVectorOutputtuple(torch.FloatTensor)

参数

  • input_values (torch.FloatTensor,形状为 (batch_size, sequence_length)) — 输入原始语音波形的浮点值。这些值可以通过将 .flac.wav 音频文件加载到 List[float] 类型的数组或 numpy.ndarray 中获得,例如 通过 soundfile 库 (pip install soundfile)。为了将数组准备为 input_values,应该使用 AutoProcessor 进行填充和转换为 torch.FloatTensor 类型的张量。有关详细信息,请参阅 Wav2Vec2Processor.call()
  • attention_mask (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 用于避免在填充 token 索引上执行卷积和注意力的掩码。掩码值在 [0, 1] 中选择:

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

    什么是注意力掩码?

    只有当对应的 processor 具有 config.return_attention_mask == True 时,才应传递 attention_mask。对于所有 processor 具有 config.return_attention_mask == False 的模型,为了避免在执行批量推理时性能下降,不应 传递 attention_mask。对于此类模型,input_values 应该简单地用 0 填充,并在不使用 attention_mask 的情况下传递。请注意,这些模型的结果也会因 input_values 是否填充而略有不同。

  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是纯元组。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算序列分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 中。如果 config.num_labels == 1,则计算回归损失(均方误差损失);如果 config.num_labels > 1,则计算分类损失(交叉熵损失)。

返回值

transformers.modeling_outputs.XVectorOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.XVectorOutput 或一个 torch.FloatTensor 元组(如果传递 return_dict=False 或当 config.return_dict=False 时),其中包含各种元素,具体取决于配置 (WavLMConfig) 和输入。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供 labels 时返回) — 分类损失。

  • logits (torch.FloatTensor,形状为 (batch_size, config.xvector_output_dim)) — AMSoftmax 之前的分类隐藏状态。

  • embeddings (torch.FloatTensor,形状为 (batch_size, config.xvector_output_dim)) — 用于基于向量相似度检索的话语嵌入。

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

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

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

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

WavLMForXVector 的 forward 方法,覆盖了 __call__ 特殊方法。

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

示例

>>> from transformers import AutoFeatureExtractor, WavLMForXVector
>>> from datasets import load_dataset
>>> import torch

>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation", trust_remote_code=True)
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate

>>> feature_extractor = AutoFeatureExtractor.from_pretrained("microsoft/wavlm-base-plus-sv")
>>> model = WavLMForXVector.from_pretrained("microsoft/wavlm-base-plus-sv")

>>> # audio file is decoded on the fly
>>> inputs = feature_extractor(
...     [d["array"] for d in dataset[:2]["audio"]], sampling_rate=sampling_rate, return_tensors="pt", padding=True
... )
>>> with torch.no_grad():
...     embeddings = model(**inputs).embeddings

>>> embeddings = torch.nn.functional.normalize(embeddings, dim=-1).cpu()

>>> # the resulting embeddings can be used for cosine similarity-based retrieval
>>> cosine_sim = torch.nn.CosineSimilarity(dim=-1)
>>> similarity = cosine_sim(embeddings[0], embeddings[1])
>>> threshold = 0.7  # the optimal threshold is dataset-dependent
>>> if similarity < threshold:
...     print("Speakers are not the same!")
>>> round(similarity.item(), 2)
0.97
< > Update on GitHub