Transformers 文档

WavLM

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

WavLM

PyTorch

概述

WavLM 模型由 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 在论文 WavLM: Large-Scale Self-Supervised Pre-Training for Full Stack Speech Processing 中提出。

论文摘要如下:

自监督学习(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 可以表示的不同词元数量。模型的词汇表大小。定义了传递给 WavLMModel 的前向方法的 *inputs_ids* 可以表示的不同词元。
  • 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) — 嵌入、编码器和池化器中所有全连接层的丢弃概率。
  • activation_dropout (float, 可选, 默认为 0.1) — 全连接层内激活函数的丢弃率。
  • attention_dropout (float, 可选, 默认为 0.1) — 注意力概率的丢弃率。
  • final_dropout (float, 可选, 默认为 0.1) — WavLMForCTC 最终投影层的丢弃概率。
  • layerdrop (float, 可选, 默认为 0.1) — LayerDrop 概率。更多细节请参见 [LayerDrop 论文](参见 https://huggingface.co/papers/1909.11556)。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • layer_norm_eps (float, 可选, 默认为 1e-12) — 层归一化层使用的 epsilon 值。
  • feat_extract_norm (str, 可选, 默认为 "group") — 应用于特征编码器中 1D 卷积层的归一化方法。"group" 表示仅对第一个 1D 卷积层进行组归一化,"layer" 表示对所有 1D 卷积层进行层归一化。
  • feat_proj_dropout (float, 可选, 默认为 0.0) — 特征编码器输出的丢弃概率。
  • 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 为 True` 对应于在注意力层之前应用层归一化,而 `do_stable_layer_norm 为 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 为 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 为 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) — 分类任务中,词元均值池化前投影的维度。
  • 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 模块内每个一维卷积层内核大小的整数元组。tdnn_kernel 的长度必须与 tdnn_dim 的长度相匹配。
  • tdnn_dilation (tuple[int]list[int]可选,默认为 (1, 2, 3, 1, 1)) — 定义 XVector 模型中 TDNN 模块内每个一维卷积层扩张因子的整数元组。tdnn_dilation 的长度必须与 tdnn_dim 的长度相匹配。
  • xvector_output_dim (int可选,默认为 512) — XVector 嵌入向量的维度。
  • add_adapter (bool可选,默认为 False) — 是否在 Wav2Vec2 编码器之上堆叠一个卷积网络。这对于 SpeechEncoderDecoder 模型的 Wav2Vec2 热启动非常有用。
  • adapter_kernel_size (int可选,默认为 3) — 适配器网络中卷积层的内核大小。仅在 `add_adapter 为 True` 时相关。
  • adapter_stride (int可选,默认为 2) — 适配器网络中卷积层的步长。仅在 `add_adapter 为 True` 时相关。
  • num_adapter_layers (int可选,默认为 3) — 适配器网络中应使用的卷积层数量。仅在 `add_adapter 为 True` 时相关。
  • output_hidden_size (int可选) — 编码器输出层的维度。如果未定义,则默认为 *hidden-size*。仅在 `add_adapter 为 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 模型,输出原始的隐藏状态,顶部没有任何特定的头。

该模型继承自 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.Wav2Vec2BaseModelOutputtuple(torch.FloatTensor)

参数

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

    • 1 表示标记未被遮蔽
    • 0 表示标记已被遮蔽

    什么是注意力掩码?

  • mask_time_indices (torch.BoolTensor,形状为 (batch_size, sequence_length)可选) — 用于掩蔽提取特征以进行对比损失的索引。在训练模式下,模型学习在 *config.proj_codevector_dim* 空间中预测被掩蔽的提取特征。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。
  • return_dict (bool可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。

返回

transformers.modeling_outputs.Wav2Vec2BaseModelOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.Wav2Vec2BaseModelOutput 或一个 torch.FloatTensor 的元组(如果传递了 return_dict=Falseconfig.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=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于嵌入层的输出,一个用于每层的输出)。

    模型在每个层输出的隐藏状态加上初始嵌入输出。

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

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

WavLMModel 的前向方法会覆盖 `__call__` 特殊方法。

尽管前向传递的流程需要在此函数中定义,但之后应该调用 `Module` 实例而不是此函数,因为前者会处理预处理和后处理步骤,而后者会静默忽略它们。

WavLMForCTC

class transformers.WavLMForCTC

< >

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

参数

  • config (WavLMForCTC) — 包含模型所有参数的模型配置类。使用配置文件进行初始化不会加载与模型相关的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。
  • target_lang (str可选) — 适配器权重的语言 ID。适配器权重以 adapter.<lang>.safetensors 或 adapter.<lang>.bin 的格式存储。仅在使用带适配器的 WavLMForCTC 实例时相关。默认使用‘eng’。

WavLM 模型顶部带有一个用于连接时序分类(CTC)的 `语言建模` 头。

该模型继承自 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.CausalLMOutputtuple(torch.FloatTensor)

参数

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

    • 1 表示标记未被遮蔽
    • 0 表示标记已被遮蔽

    什么是注意力掩码?

  • 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=Falseconfig.return_dict=False),包含根据配置(WavLMConfig)和输入而变化的不同元素。

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

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

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

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

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

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

WavLMForCTC 的前向方法会覆盖 `__call__` 特殊方法。

尽管前向传递的流程需要在此函数中定义,但之后应该调用 `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")
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate

>>> processor = AutoProcessor.from_pretrained("microsoft/wavlm-base")
>>> model = WavLMForCTC.from_pretrained("microsoft/wavlm-base")

>>> # 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]
...

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

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

WavLMForSequenceClassification

class transformers.WavLMForSequenceClassification

< >

( config )

参数

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

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

该模型继承自 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.SequenceClassifierOutputtuple(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 类型的张量。有关详细信息,请参阅 WavLMProcessor.__call__
  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 用于避免在填充标记索引上执行注意力机制的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示标记未被遮蔽
    • 0 表示标记已被遮蔽

    什么是注意力掩码?

  • 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=Falseconfig.return_dict=False),包含根据配置(WavLMConfig)和输入而变化的不同元素。

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

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

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

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

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

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

WavLMForSequenceClassification 的前向方法会覆盖 `__call__` 特殊方法。

尽管前向传递的流程需要在此函数中定义,但之后应该调用 `Module` 实例而不是此函数,因为前者会处理预处理和后处理步骤,而后者会静默忽略它们。

单标签分类示例

>>> import torch
>>> from transformers import AutoTokenizer, WavLMForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/wavlm-base")
>>> model = WavLMForSequenceClassification.from_pretrained("microsoft/wavlm-base")

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

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

>>> predicted_class_id = logits.argmax().item()
>>> model.config.id2label[predicted_class_id]
...

>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = WavLMForSequenceClassification.from_pretrained("microsoft/wavlm-base", num_labels=num_labels)

>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...

多标签分类示例

>>> import torch
>>> from transformers import AutoTokenizer, WavLMForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/wavlm-base")
>>> model = WavLMForSequenceClassification.from_pretrained("microsoft/wavlm-base", problem_type="multi_label_classification")

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

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

>>> predicted_class_ids = torch.arange(0, logits.shape[-1])[torch.sigmoid(logits).squeeze(dim=0) > 0.5]

>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = WavLMForSequenceClassification.from_pretrained(
...     "microsoft/wavlm-base", num_labels=num_labels, problem_type="multi_label_classification"
... )

>>> labels = torch.sum(
...     torch.nn.functional.one_hot(predicted_class_ids[None, :].clone(), num_classes=num_labels), dim=1
... ).to(torch.float)
>>> loss = model(**inputs, labels=labels).loss

WavLMForAudioFrameClassification

class transformers.WavLMForAudioFrameClassification

< >

( config )

参数

Wavlm 模型顶部带有一个帧分类头,用于诸如说话人日志分割等任务。

该模型继承自 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 类型的张量。有关详细信息,请参阅 WavLMProcessor.__call__
  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 用于避免在填充标记索引上执行注意力机制的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示标记未被遮蔽
    • 0 表示标记已被遮蔽

    什么是注意力掩码?

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

返回

transformers.modeling_outputs.TokenClassifierOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.TokenClassifierOutput 或一个 torch.FloatTensor 的元组(如果传递了 return_dict=Falseconfig.return_dict=False),包含根据配置(WavLMConfig)和输入而变化的不同元素。

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

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

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

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

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

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

WavLMForAudioFrameClassification 的前向方法会覆盖 `__call__` 特殊方法。

尽管前向传递的流程需要在此函数中定义,但之后应该调用 `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")
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate

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

>>> # 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()
...

WavLMForXVector

class transformers.WavLMForXVector

< >

( config )

参数

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

WavLM 模型,顶部带有一个用于说话人验证等任务的 XVector 特征提取头。

该模型继承自 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 类型的张量。有关详细信息,请参阅 WavLMProcessor.__call__
  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 用于避免在填充标记索引上执行注意力机制的掩码。掩码值的选择范围为 [0, 1]

    • 1 表示标记未被遮盖
    • 0 表示标记已被遮盖

    什么是注意力掩码?

  • 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 (形状为 (1,)torch.FloatTensor可选,当提供 labels 时返回) — 分类损失。

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

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

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

    模型在每个层输出的隐藏状态加上初始嵌入输出。

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

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

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

尽管前向传递的流程需要在此函数中定义,但之后应该调用 `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")
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate

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

>>> # 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)
...
< > 在 GitHub 上更新