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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.