🚀 基于微调Wav2Vec 2.0的语音情感识别
本模型是针对语音情感识别(SER)任务,对 jonatasgrosman/wav2vec2-large-xlsr-53-english 进行微调后的版本。它利用多个数据集进行微调训练,能够准确识别多种语音情感,为语音情感分析领域提供了有效的解决方案。
🚀 快速开始
安装依赖
pip install transformers librosa torch
使用示例
from transformers import *
import librosa
import torch
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("r-f/wav2vec-english-speech-emotion-recognition")
model = Wav2Vec2ForCTC.from_pretrained("r-f/wav2vec-english-speech-emotion-recognition")
def predict_emotion(audio_path):
audio, rate = librosa.load(audio_path, sr=16000)
inputs = feature_extractor(audio, sampling_rate=rate, return_tensors="pt", padding=True)
with torch.no_grad():
outputs = model(inputs.input_values)
predictions = torch.nn.functional.softmax(outputs.logits.mean(dim=1), dim=-1)
predicted_label = torch.argmax(predictions, dim=-1)
emotion = model.config.id2label[predicted_label.item()]
return emotion
emotion = predict_emotion("example_audio.wav")
print(f"Predicted emotion: {emotion}")
>> Predicted emotion: angry
✨ 主要特性
- 多数据集微调:使用多个数据集对原始模型进行微调,包括 Surrey Audio-Visual Expressed Emotion (SAVEE)、Ryerson Audio-Visual Database of Emotional Speech and Song (RAVDESS) 和 Toronto emotional speech set (TESS),增强了模型的泛化能力。
- 多情感分类:支持7种情感分类,分别是愤怒、厌恶、恐惧、快乐、中性、悲伤和惊讶。
- 高准确率:在评估集上取得了较高的准确率(0.97463)和较低的损失(0.104075)。
📦 安装指南
pip install transformers librosa torch
💻 使用示例
基础用法
from transformers import *
import librosa
import torch
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("r-f/wav2vec-english-speech-emotion-recognition")
model = Wav2Vec2ForCTC.from_pretrained("r-f/wav2vec-english-speech-emotion-recognition")
def predict_emotion(audio_path):
audio, rate = librosa.load(audio_path, sr=16000)
inputs = feature_extractor(audio, sampling_rate=rate, return_tensors="pt", padding=True)
with torch.no_grad():
outputs = model(inputs.input_values)
predictions = torch.nn.functional.softmax(outputs.logits.mean(dim=1), dim=-1)
predicted_label = torch.argmax(predictions, dim=-1)
emotion = model.config.id2label[predicted_label.item()]
return emotion
emotion = predict_emotion("example_audio.wav")
print(f"Predicted emotion: {emotion}")
📚 详细文档
训练过程
训练超参数
训练过程中使用了以下超参数:
- 学习率:0.0001
- 训练批次大小:4
- 评估批次大小:4
- 评估步数:500
- 随机种子:42
- 梯度累积步数:2
- 优化器:Adam(betas=(0.9, 0.999),epsilon=1e-08)
- 训练轮数:4
- 最大步数:7500
- 保存步数:1500
训练结果
步数 |
训练损失 |
验证损失 |
准确率 |
500 |
1.8124 |
1.365212 |
0.486258 |
1000 |
0.8872 |
0.773145 |
0.79704 |
1500 |
0.7035 |
0.574954 |
0.852008 |
2000 |
0.6879 |
1.286738 |
0.775899 |
2500 |
0.6498 |
0.697455 |
0.832981 |
3000 |
0.5696 |
0.33724 |
0.892178 |
3500 |
0.4218 |
0.307072 |
0.911205 |
4000 |
0.3088 |
0.374443 |
0.930233 |
4500 |
0.2688 |
0.260444 |
0.936575 |
5000 |
0.2973 |
0.302985 |
0.92389 |
5500 |
0.1765 |
0.165439 |
0.961945 |
6000 |
0.1475 |
0.170199 |
0.961945 |
6500 |
0.1274 |
0.15531 |
0.966173 |
7000 |
0.0699 |
0.103882 |
0.976744 |
7500 |
0.083 |
0.104075 |
0.97463 |
📄 许可证
本项目采用 Apache-2.0 许可证。