Transformers 文档

WavLM

WavLM

概述

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结构配备了门控相对位置偏差,以提高其在识别任务中的能力。为了更好地进行说话者区分,我们提出了一种话语混合训练策略,其中无监督地创建了额外的重叠话语,并在模型训练中加以利用。最后,我们将训练数据集从60k小时扩展到94k小时。WavLM Large在SUPERB基准测试中实现了最先进的性能,并在各种语音处理任务的代表性基准测试中带来了显著的改进。

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

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

使用提示

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

资源

WavLMConfig

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, optional, 默认为 32) — WavLM 模型的词汇量大小。定义了调用 WavLMModel 时传递的 inputs_ids 可以表示的不同标记的数量。模型的词汇量大小。定义了传递给 WavLMModelinputs_ids 可以表示的不同标记的数量。
  • hidden_size (int, optional, 默认为 768) — 编码器层和池化层的维度。
  • num_hidden_layers (int, optional, 默认为 12) — Transformer 编码器中的隐藏层数量。
  • num_attention_heads (int, optional, defaults to 12) — Transformer编码器中每个注意力层的注意力头数量。
  • intermediate_size (int, optional, 默认为 3072) — Transformer 编码器中“中间”(即前馈)层的维度。
  • hidden_act (strfunction, 可选, 默认为 "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持 "gelu""relu""selu""gelu_new"
  • hidden_dropout (float, optional, 默认为 0.1) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。
  • activation_dropout (float, optional, defaults to 0.1) — 全连接层内部激活的dropout比率。
  • attention_dropout (float, optional, 默认为 0.1) — 注意力概率的丢弃比例。
  • final_dropout (float, optional, 默认为 0.1) — WavLMForCTC 的最终投影层的 dropout 概率。
  • layerdrop (float, optional, 默认为 0.1) — LayerDrop 概率。更多详情请参阅 [LayerDrop 论文](see https://arxiv.org/abs/1909.11556)。
  • initializer_range (float, optional, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • layer_norm_eps (float, optional, defaults to 1e-12) — 层归一化层使用的epsilon值。
  • feat_extract_norm (str, 可选, 默认为 "group") — 应用于特征编码器中1D卷积层的归一化方法。可以是 "group" 用于仅对第一个1D卷积层进行组归一化,或者 "layer" 用于对所有1D卷积层进行层归一化。
  • feat_proj_dropout (float, optional, defaults to 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)) — 一个整数元组,定义了特征编码器中每个一维卷积层的步幅。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, optional, defaults to False) — 一维卷积层是否具有偏置。
  • num_conv_pos_embeddings (int, 可选, 默认为 128) — 卷积位置嵌入的数量。定义了1D卷积位置嵌入层的核大小。
  • num_conv_pos_embedding_groups (int, optional, 默认为 16) — 1D 卷积位置嵌入层的组数。
  • do_stable_layer_norm (bool, optional, 默认为 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 为 True 时相关。
  • mask_time_length (int, optional, defaults to 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, optional, 默认为 0.0) — 沿特征轴选择每个特征向量作为要掩码的向量跨度的起始点的概率。大约 mask_time_prob * hidden_size // mask_time_length 个特征向量将沿时间轴被掩码。这仅在 apply_spec_augment 为 True 时相关。
  • mask_feature_length (int, optional, defaults to 10) — 沿特征轴的向量跨度长度。
  • num_codevectors_per_group (int, optional, 默认为 320) — 每个量化码本(组)中的条目数。
  • num_codevector_groups (int, 可选, 默认为 2) — 用于产品码向量量化的码向量组数量。
  • contrastive_logits_temperature (float, optional, defaults to 0.1) — 对比损失中的温度 kappa.
  • num_negatives (int, optional, defaults to 100) — 对比损失的负样本数量。
  • codevector_dim (int, optional, defaults to 256) — 量化特征向量的维度。
  • proj_codevector_dim (int, optional, 默认为 256) — 量化特征和变压器特征的最终投影的维度。
  • diversity_loss_weight (int, optional, 默认为 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, optional, 默认为 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模块的每个1D卷积层的核大小。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, optional, 默认为 512) — XVector 嵌入向量的维度。
  • add_adapter (bool, 可选, 默认为 False) — 是否应该在Wav2Vec2编码器之上堆叠一个卷积网络。这对于为SpeechEncoderDecoder模型预热Wav2Vec2非常有用。
  • adapter_kernel_size (int, optional, 默认为 3) — 适配器网络中卷积层的核大小。仅在 add_adapter is True 时相关。
  • adapter_stride (int, 可选, 默认为 2) — 适配器网络中卷积层的步幅。仅在 add_adapter 为 True 时相关。
  • num_adapter_layers (int, 可选, 默认为 3) — 适配器网络中应使用的卷积层数。仅在 add_adapter is True 时相关。
  • output_hidden_size (int, optional) — 编码器输出层的维度。如果未定义,则默认为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

transformers.WavLMModel

< >

( config: WavLMConfig )

参数

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

裸WavLM模型输出原始隐藏状态,没有任何特定的头部。 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, Xiangzhan Yu, Furu Wei在WavLM: Unified Speech Representation Learning with Labeled and Unlabeled Data中提出的。

该模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存等)。

该模型是一个PyTorch torch.nn.Module 子类。将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。

前进

< >

( 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.FloatTensor of shape (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 of shape (batch_size, sequence_length), optional) — Mask to avoid performing convolution and attention on padding token indices. Mask values selected in [0, 1]:
    • 1 for tokens that are not masked,
    • 0 for tokens that are masked.

    什么是注意力掩码?

    attention_mask 只有在相应的处理器具有 config.return_attention_mask == True 时才应传递。对于所有处理器具有 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.Wav2Vec2BaseModelOutput 或一个由 torch.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 的前向方法,重写了 __call__ 特殊方法。

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

transformers.WavLMForCTC

< >

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

参数

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

WavLM 模型,顶部带有语言建模头,用于连接时序分类(CTC)。 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、Xiangzhan Yu、Furu Wei 在 WavLM: Unified Speech Representation Learning with Labeled and Unlabeled Data 中提出的。

该模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存等)。

该模型是一个PyTorch torch.nn.Module 子类。将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。

前进

< >

( 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.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 of shape (batch_size, sequence_length), optional) — Mask to avoid performing convolution and attention on padding token indices. Mask values selected in [0, 1]:
    • 1 for tokens that are not masked,
    • 0 for tokens that are masked.

    什么是注意力掩码?

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

  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
  • return_dict (bool, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。
  • labels (torch.LongTensor of shape (batch_size, target_length), optional) — 用于连接时序分类的标签。注意 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 时返回) — 语言建模损失(用于下一个标记预测)。

  • logits (torch.FloatTensor 形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(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 后的注意力权重,用于计算自注意力头中的加权平均值。

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", 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

transformers.WavLMForSequenceClassification

< >

( config )

参数

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

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

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, Xiangzhan Yu, Furu Wei 在 WavLM: Unified Speech Representation Learning with Labeled and Unlabeled Data 中提出的。

该模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存等)。

该模型是一个PyTorch torch.nn.Module 子类。将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。

前进

< >

( 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 of shape (batch_size, sequence_length)) — Float values of input raw speech waveform. Values can be obtained by loading a .flac or .wav audio file into an array of type List[float] or a numpy.ndarray, e.g. via the soundfile library (pip install soundfile). To prepare the array into input_values, the AutoProcessor should be used for padding and conversion into a tensor of type torch.FloatTensor. See Wav2Vec2Processor.call() for details.
  • attention_mask (torch.LongTensor of shape (batch_size, sequence_length), optional) — Mask to avoid performing convolution and attention on padding token indices. Mask values selected in [0, 1]:
    • 1 for tokens that are not masked,
    • 0 for tokens that are masked.

    什么是注意力掩码?

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

  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
  • return_dict (bool, 可选) — 是否返回一个ModelOutput而不是一个普通的元组。
  • labels (torch.LongTensor of shape (batch_size,), optional) — 用于计算序列分类/回归损失的标签。索引应在 [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__ 特殊方法。

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

transformers.WavLMForAudioFrameClassification

< >

( config )

参数

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

WavLM 模型,顶部带有帧分类头,适用于说话人日志等任务。

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, Xiangzhan Yu, Furu Wei 在 WavLM: Unified Speech Representation Learning with Labeled and Unlabeled Data 中提出的。

该模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存等)。

该模型是一个PyTorch torch.nn.Module 子类。将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。

前进

< >

( 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 of shape (batch_size, sequence_length)) — Float values of input raw speech waveform. Values can be obtained by loading a .flac or .wav audio file into an array of type List[float] or a numpy.ndarray, e.g. via the soundfile library (pip install soundfile). To prepare the array into input_values, the AutoProcessor should be used for padding and conversion into a tensor of type torch.FloatTensor. See Wav2Vec2Processor.call() for details.
  • attention_mask (torch.LongTensor of shape (batch_size, sequence_length), optional) — Mask to avoid performing convolution and attention on padding token indices. Mask values selected in [0, 1]:
    • 1 for tokens that are not masked,
    • 0 for tokens that are masked.

    什么是注意力掩码?

    attention_mask 只有在相应的处理器具有 config.return_attention_mask == True 时才应传递。对于所有处理器具有 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 的前向方法,重写了 __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", 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

transformers.WavLMForXVector

< >

( config )

参数

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

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

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, Xiangzhan Yu, Furu Wei 在 WavLM: Unified Speech Representation Learning with Labeled and Unlabeled Data 中提出的。

该模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存等)。

该模型是一个PyTorch torch.nn.Module 子类。将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。

前进

< >

( 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 of shape (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 of shape (batch_size, sequence_length), optional) — Mask to avoid performing convolution and attention on padding token indices. Mask values selected in [0, 1]:
    • 1 for tokens that are not masked,
    • 0 for tokens that are masked.

    什么是注意力掩码?

    attention_mask 只有在相应的处理器具有 config.return_attention_mask == True 时才应传递。对于所有处理器具有 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 的前向方法,重写了 __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", 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