🚀 基於Wav2vec 2.0的維度語音情感識別模型
本模型專為研究目的而設計。若你需要一個基於更多數據訓練的模型商業許可,可通過 audEERING 獲取。該模型以原始音頻信號作為輸入,輸出喚醒度、支配度和效價的預測值,範圍大致在 0 到 1 之間。此外,它還會提供最後一個Transformer層的池化狀態。此模型是通過在 MSP-Podcast(v1.7)上對 Wav2Vec2-Large-Robust 進行微調而創建的。在微調之前,模型從 24 個Transformer層修剪至 12 個。該模型的 ONNX 導出文件可從 doi:10.5281/zenodo.6221127 獲取。相關詳細信息可在關聯的 論文 和 教程 中找到。
🚀 快速開始
本模型主要用於維度語音情感識別,以原始音頻信號為輸入,輸出喚醒度、支配度和效價的預測值。
📦 安裝指南
文檔未提及具體安裝步驟,可參考相關庫的官方安裝指南,如 transformers
庫等。
💻 使用示例
基礎用法
import numpy as np
import torch
import torch.nn as nn
from transformers import Wav2Vec2Processor
from transformers.models.wav2vec2.modeling_wav2vec2 import (
Wav2Vec2Model,
Wav2Vec2PreTrainedModel,
)
class RegressionHead(nn.Module):
r"""Classification head."""
def __init__(self, config):
super().__init__()
self.dense = nn.Linear(config.hidden_size, config.hidden_size)
self.dropout = nn.Dropout(config.final_dropout)
self.out_proj = nn.Linear(config.hidden_size, config.num_labels)
def forward(self, features, **kwargs):
x = features
x = self.dropout(x)
x = self.dense(x)
x = torch.tanh(x)
x = self.dropout(x)
x = self.out_proj(x)
return x
class EmotionModel(Wav2Vec2PreTrainedModel):
r"""Speech emotion classifier."""
def __init__(self, config):
super().__init__(config)
self.config = config
self.wav2vec2 = Wav2Vec2Model(config)
self.classifier = RegressionHead(config)
self.init_weights()
def forward(
self,
input_values,
):
outputs = self.wav2vec2(input_values)
hidden_states = outputs[0]
hidden_states = torch.mean(hidden_states, dim=1)
logits = self.classifier(hidden_states)
return hidden_states, logits
device = 'cpu'
model_name = 'audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim'
processor = Wav2Vec2Processor.from_pretrained(model_name)
model = EmotionModel.from_pretrained(model_name).to(device)
sampling_rate = 16000
signal = np.zeros((1, sampling_rate), dtype=np.float32)
def process_func(
x: np.ndarray,
sampling_rate: int,
embeddings: bool = False,
) -> np.ndarray:
r"""Predict emotions or extract embeddings from raw audio signal."""
y = processor(x, sampling_rate=sampling_rate)
y = y['input_values'][0]
y = y.reshape(1, -1)
y = torch.from_numpy(y).to(device)
with torch.no_grad():
y = model(y)[0 if embeddings else 1]
y = y.detach().cpu().numpy()
return y
print(process_func(signal, sampling_rate))
print(process_func(signal, sampling_rate, embeddings=True))
高級用法
文檔未提及高級用法相關代碼示例。
📚 詳細文檔
模型以原始音頻信號作為輸入,輸出喚醒度、支配度和效價的預測值,範圍大致在 0 到 1 之間。還會提供最後一個Transformer層的池化狀態。模型是在 MSP-Podcast(v1.7)上對 Wav2Vec2-Large-Robust 進行微調得到的,微調前從 24 個Transformer層修剪至 12 個。模型的 ONNX 導出文件可從 doi:10.5281/zenodo.6221127 獲取,更多詳細信息可查看關聯的 論文 和 教程。
🔧 技術細節
本模型基於 Wav2vec 2.0 架構,通過在 MSP-Podcast 數據集上進行微調,實現維度語音情感識別。在微調前對模型進行了修剪,從 24 個Transformer層減少到 12 個,以提高效率。模型輸出包括喚醒度、支配度和效價的預測值,以及最後一個Transformer層的池化狀態。
📄 許可證
本模型採用 CC BY-NC-SA 4.0 許可證。