🚀 基于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 许可证。