Speech Emotion Recognition With Openai Whisper Large V3
本项目利用Whisper模型实现语音情感识别,能够将音频分类为快乐、悲伤、惊讶等不同情感类别。
下载量 7,750
发布时间 : 9/21/2024
模型简介
该模型是基于OpenAI Whisper Large V3微调的语音情感识别模型,能够准确识别语音中的情感类别。
模型特点
高准确率情感识别
模型在测试集上达到91.99%的准确率,能够有效识别多种语音情感。
基于Whisper架构
利用Whisper Large V3的强大音频处理能力进行微调,继承了其优秀的特征提取能力。
多数据集训练
整合RAVDESS、SAVEE、TESS和URDU等多个语音情感数据集进行训练,提高泛化能力。
模型能力
语音情感识别
音频分类
多情感类别识别
使用案例
心理健康分析
心理咨询辅助
通过分析客户语音情感变化,辅助心理咨询师评估客户情绪状态。
准确识别7种主要情感状态
客户服务
客服质量监控
自动分析客服通话中的情感变化,评估服务质量。
可实时监控客服情绪状态
🚀 语音情感识别与Whisper
本项目借助 Whisper 模型来识别语音中的情感。其目标是将音频记录分类到不同的情感类别中,如 快乐、悲伤、惊讶 等。
🚀 快速开始
本项目利用 Whisper 模型实现语音情感识别,以下是使用该模型进行情感预测的示例代码:
from transformers import AutoModelForAudioClassification, AutoFeatureExtractor
import librosa
import torch
import numpy as np
model_id = "firdhokk/speech-emotion-recognition-with-openai-whisper-large-v3"
model = AutoModelForAudioClassification.from_pretrained(model_id)
feature_extractor = AutoFeatureExtractor.from_pretrained(model_id, do_normalize=True)
id2label = model.config.id2label
def preprocess_audio(audio_path, feature_extractor, max_duration=30.0):
audio_array, sampling_rate = librosa.load(audio_path, sr=feature_extractor.sampling_rate)
max_length = int(feature_extractor.sampling_rate * max_duration)
if len(audio_array) > max_length:
audio_array = audio_array[:max_length]
else:
audio_array = np.pad(audio_array, (0, max_length - len(audio_array)))
inputs = feature_extractor(
audio_array,
sampling_rate=feature_extractor.sampling_rate,
max_length=max_length,
truncation=True,
return_tensors="pt",
)
return inputs
def predict_emotion(audio_path, model, feature_extractor, id2label, max_duration=30.0):
inputs = preprocess_audio(audio_path, feature_extractor, max_duration)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
inputs = {key: value.to(device) for key, value in inputs.items()}
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
predicted_id = torch.argmax(logits, dim=-1).item()
predicted_label = id2label[predicted_id]
return predicted_label
audio_path = "/content/drive/MyDrive/Audio/Speech_URDU/Happy/SM5_F4_H058.wav"
predicted_emotion = predict_emotion(audio_path, model, feature_extractor, id2label)
print(f"Predicted Emotion: {predicted_emotion}")
✨ 主要特性
- 利用 Whisper 模型进行语音情感识别。
- 支持将音频分类到多种情感类别。
📦 安装指南
文档未提及安装步骤,故跳过此章节。
💻 使用示例
基础用法
from transformers import AutoModelForAudioClassification, AutoFeatureExtractor
import librosa
import torch
import numpy as np
model_id = "firdhokk/speech-emotion-recognition-with-openai-whisper-large-v3"
model = AutoModelForAudioClassification.from_pretrained(model_id)
feature_extractor = AutoFeatureExtractor.from_pretrained(model_id, do_normalize=True)
id2label = model.config.id2label
高级用法
def preprocess_audio(audio_path, feature_extractor, max_duration=30.0):
audio_array, sampling_rate = librosa.load(audio_path, sr=feature_extractor.sampling_rate)
max_length = int(feature_extractor.sampling_rate * max_duration)
if len(audio_array) > max_length:
audio_array = audio_array[:max_length]
else:
audio_array = np.pad(audio_array, (0, max_length - len(audio_array)))
inputs = feature_extractor(
audio_array,
sampling_rate=feature_extractor.sampling_rate,
max_length=max_length,
truncation=True,
return_tensors="pt",
)
return inputs
def predict_emotion(audio_path, model, feature_extractor, id2label, max_duration=30.0):
inputs = preprocess_audio(audio_path, feature_extractor, max_duration)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
inputs = {key: value.to(device) for key, value in inputs.items()}
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
predicted_id = torch.argmax(logits, dim=-1).item()
predicted_label = id2label[predicted_id]
return predicted_label
audio_path = "/content/drive/MyDrive/Audio/Speech_URDU/Happy/SM5_F4_H058.wav"
predicted_emotion = predict_emotion(audio_path, model, feature_extractor, id2label)
print(f"Predicted Emotion: {predicted_emotion}")
📚 详细文档
🗂 数据集
用于训练和评估的数据集来自多个数据源,包括:
该数据集包含标注了各种情感的录音。以下是数据集中情感的分布情况:
情感 | 数量 |
---|---|
悲伤 | 752 |
快乐 | 752 |
愤怒 | 752 |
中性 | 716 |
厌恶 | 652 |
恐惧 | 652 |
惊讶 | 652 |
平静 | 192 |
这种分布反映了数据集中情感的平衡情况,某些情感的样本数量比其他情感多。由于“平静”情感的样本数量过少,在训练过程中排除了该情感。
🎤 预处理
- 音频加载:使用 Librosa 加载音频文件并将其转换为 numpy 数组。
- 特征提取:使用 Whisper 特征提取器 处理音频数据,对音频特征进行标准化和归一化,以便输入模型。
🔧 模型
使用的模型是 Whisper Large V3 模型,并针对 音频分类 任务进行了微调:
- 模型:openai/whisper-large-v3
- 输出:情感标签 (
愤怒', '厌恶', '恐惧', '快乐', '中性', '悲伤', '惊讶'
)
将情感标签映射到数字 ID,并用于模型的训练和评估。
⚙️ 训练
模型使用以下参数进行训练:
- 学习率:
5e-05
- 训练批次大小:
2
- 评估批次大小:
2
- 随机种子:
42
- 梯度累积步数:
5
- 总训练批次大小:
10
(梯度累积后的有效批次大小) - 优化器:Adam,参数为
betas=(0.9, 0.999)
和epsilon=1e-08
- 学习率调度器:
linear
- 学习率调度器的预热比例:
0.1
- 训练轮数:
25
- 混合精度训练:原生 AMP(自动混合精度)
这些参数确保了模型训练的效率和稳定性,特别是在处理像 Whisper 这样的大型数据集和深度模型时。训练过程使用 Wandb 进行实验跟踪和监控。
📊 指标
模型训练后获得的评估指标如下:
- 损失:
0.5008
- 准确率:
0.9199
- 精确率:
0.9230
- 召回率:
0.9199
- F1 分数:
0.9198
这些指标展示了模型在语音情感识别任务上的性能。准确率、精确率、召回率和 F1 分数的高值表明模型能够有效地从语音数据中识别情感状态。
🧪 结果
训练完成后,在测试数据集上对模型进行评估,并通过 此链接 使用 Wandb 监控结果。
训练损失 | 轮数 | 步数 | 验证损失 | 准确率 | 精确率 | 召回率 | F1 分数 |
---|---|---|---|---|---|---|---|
0.4948 | 0.9995 | 394 | 0.4911 | 0.8286 | 0.8449 | 0.8286 | 0.8302 |
0.6271 | 1.9990 | 788 | 0.5307 | 0.8225 | 0.8559 | 0.8225 | 0.8277 |
0.2364 | 2.9985 | 1182 | 0.5076 | 0.8692 | 0.8727 | 0.8692 | 0.8684 |
0.0156 | 3.9980 | 1576 | 0.5669 | 0.8732 | 0.8868 | 0.8732 | 0.8745 |
0.2305 | 5.0 | 1971 | 0.4578 | 0.9108 | 0.9142 | 0.9108 | 0.9114 |
0.0112 | 5.9995 | 2365 | 0.4701 | 0.9108 | 0.9159 | 0.9108 | 0.9114 |
0.0013 | 6.9990 | 2759 | 0.5232 | 0.9138 | 0.9204 | 0.9138 | 0.9137 |
0.1894 | 7.9985 | 3153 | 0.5008 | 0.9199 | 0.9230 | 0.9199 | 0.9198 |
0.0877 | 8.9980 | 3547 | 0.5517 | 0.9138 | 0.9152 | 0.9138 | 0.9138 |
0.1471 | 10.0 | 3942 | 0.5856 | 0.8895 | 0.9002 | 0.8895 | 0.8915 |
0.0026 | 10.9995 | 4336 | 0.8334 | 0.8773 | 0.8949 | 0.8773 | 0.8770 |
🔧 技术细节
文档未提及技术实现细节,故跳过此章节。
📄 许可证
本项目使用的许可证为 apache-2.0
。
🎯 框架版本
属性 | 详情 |
---|---|
框架版本 | Transformers 4.44.2、Pytorch 2.4.1+cu121、Datasets 3.0.0、Tokenizers 0.19.1 |
Mms Lid 126
基于Facebook大规模多语言语音项目微调的语言识别模型,支持126种语言的音频分类
音频分类
Transformers 支持多种语言

M
facebook
2.1M
26
Wav2vec2 Base Finetuned Speech Commands V0.02
Apache-2.0
该模型是基于facebook/wav2vec2-base在speech_commands数据集上微调的语音命令识别模型,准确率达97.59%。
音频分类
Transformers

W
0xb1
1.2M
0
Whisper Medium Fleurs Lang Id
Apache-2.0
基于OpenAI Whisper-medium微调的语音语种识别模型,在FLEURS数据集上达到88.05%准确率
音频分类
Transformers

W
sanchit-gandhi
590.30k
14
Wav2vec2 Large Robust 12 Ft Emotion Msp Dim
该模型通过对Wav2Vec2-Large-Robust进行微调训练,用于语音情感识别,输出唤醒度、支配度和效价三个维度的预测值。
音频分类
Transformers 英语

W
audeering
394.51k
109
Lang Id Voxlingua107 Ecapa
Apache-2.0
基于SpeechBrain框架和ECAPA-TDNN架构的语音语言识别模型,支持107种语言的识别和语音嵌入向量提取。
音频分类
PyTorch 支持多种语言
L
speechbrain
330.01k
112
Ast Finetuned Audioset 10 10 0.4593
Bsd-3-clause
音频频谱图变换器(AST)是基于AudioSet微调的模型,将音频转换为频谱图后应用视觉变换器进行音频分类。
音频分类
Transformers

A
MIT
308.88k
311
Whisper Small Ft Common Language Id
Apache-2.0
基于openai/whisper-small微调的通用语言识别模型,在评估集上准确率达88.6%
音频分类
Transformers

W
sanchit-gandhi
256.20k
2
Emotion Recognition Wav2vec2 IEMOCAP
Apache-2.0
使用微调的wav2vec2模型进行语音情感识别,在IEMOCAP数据集上训练
音频分类
PyTorch 英语
E
speechbrain
237.65k
131
Ast Finetuned Audioset 14 14 0.443
Bsd-3-clause
基于AudioSet数据集微调的音频频谱图变换器,将音频转换为频谱图后使用视觉变换器架构处理,在音频分类任务中表现优异。
音频分类
Transformers

A
MIT
194.20k
5
Wav2vec2 Large Xlsr 53 Gender Recognition Librispeech
Apache-2.0
基于Librispeech-clean-100数据集微调的性别识别模型,在测试集上F1分数达0.9993
音频分类
Transformers

W
alefiury
182.33k
42
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98