pipeline_tag: 音频分类
language:
- 英文
tags:
- 情绪识别
- 语音识别
- wav2vec2
🎤 基于Wav2Vec2的英语语音情绪识别模型
🧠 模型概述
🔹 模型名称: dihuzz/wav2vec2-ser-english-finetuned
✨ 该模型基于Wav2Vec2架构微调训练,专门用于识别英语语音中的情绪状态,可检测以下六种情绪:
- 😢 悲伤
- 😠 愤怒
- 🤢 厌恶
- 😨 恐惧
- 😊 快乐
- 😐 中性
🔧 本模型通过在多个主流英语语音情绪识别数据集上微调r-f/wav2vec-english-speech-emotion-recognition
基础模型而构建。
📊 性能指标:
- 🎯 准确率: 92.42%
- 📉 损失值: 0.219
🏋️ 训练过程
⚙️ 训练参数
- 基础模型:
r-f/wav2vec-english-speech-emotion-recognition
- 💻 硬件配置: Kaggle平台P100显卡
- ⏱ 训练周期: 10轮
- 📚 学习率: 5e-4
- 🧩 批次大小: 4
- 📈 梯度累积步数: 8
- ⚖️ 优化器: AdamW (β₁=0.9, β₂=0.999)
- 📉 损失函数: 交叉熵损失
- ⏳ 学习率调度器: 未使用
📜 训练结果
轮次 |
损失值 |
准确率 |
1 |
1.0257 |
61.20% |
2 |
0.7025 |
73.88% |
3 |
0.5901 |
78.25% |
4 |
0.4960 |
81.56% |
5 |
0.4105 |
85.04% |
6 |
0.3516 |
87.70% |
7 |
0.3140 |
88.87% |
8 |
0.2649 |
90.45% |
9 |
0.2178 |
92.42% |
10 |
0.2187 |
92.29% |
🛠 使用指南
🔌 环境安装
pip install transformers torch torchaudio
💻 使用示例
以下演示如何对.wav格式的英文语音文件进行情绪分类:
import torch
from transformers import Wav2Vec2ForSequenceClassification, Wav2Vec2FeatureExtractor
import torchaudio
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print("当前设备:", device)
model_name = "dihuzz/wav2vec2-ser-english-finetuned"
model = Wav2Vec2ForSequenceClassification.from_pretrained(model_name).to(device)
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained(model_name)
model.eval()
def predict_emotion(audio_path):
waveform, sample_rate = torchaudio.load(audio_path)
if sample_rate != 16000:
resampler = torchaudio.transforms.Resample(orig_freq=sample_rate, new_freq=16000)
waveform = resampler(waveform)
if waveform.shape[0] > 1:
waveform = torch.mean(waveform, dim=0, keepdim=True)
inputs = feature_extractor(
waveform.squeeze().numpy(),
sampling_rate=16000,
return_tensors="pt",
padding=True
)
inputs = {k: v.to(device) for k, v in inputs.items()}
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
predicted_class_id = torch.argmax(logits, dim=-1).item()
label = model.config.id2label[predicted_class_id]
return label
audio_file = "/path/to/your/audio.wav"
predicted_emotion = predict_emotion(audio_file)
print(f"预测情绪: {predicted_emotion}")
📝 输出示例
模型将返回字符串格式的情绪预测结果:
预测情绪: <情绪标签>
局限性说明
📌 注意事项: 本模型存在以下重要限制:
- 🌐 语言限制: 仅支持英语
- 🗣️ 口音敏感性: 对不同口音的识别效果存在差异
- 🎧 音质要求: 需要清晰干净的录音素材
- ⚖️ 潜在偏差: 可能反映训练数据中的文化偏见
- 6️⃣ 类别有限: 仅支持6种基础情绪识别
- 🧠 语境无关: 不考虑语音内容的语义信息