MELD这篇论文将介绍如何使用音频特征进行情感识别。我们将以 MELD 数据集为例,使用 Python 代码演示如何提取音频特征并将其用于情感分类。
友情链接:ACEJoy
数据集介绍
MELD (Multimodal EmotionLines Dataset) 是一个多模态情感数据集,包含 Friends 电视剧中的对话片段。每个片段都标注了说话人的情感和语句的情感倾向。
train_data=pd.read_csv('/content/MELD/data/MELD/train_sent_emo.csv')
valid_data=pd.read_csv('/content/MELD/data/MELD/dev_sent_emo.csv')
test_data=pd.read_csv('/content/MELD/data/MELD/test_sent_emo.csv')
上述代码展示了如何使用 pandas 库读取 MELD 数据集中的训练集、验证集和测试集。
音频特征提取
为了从音频数据中提取特征,我们使用 Librosa 库。Librosa 是一个强大的音频处理库,提供了许多用于特征提取的函数。
首先,我们定义一些特征提取的参数:
num_mfcc=40
sr=22050
hop_length=512
n_fft=2048
num_mfcc
:MFCC 特征的数量,这里设置为 40。sr
:音频采样率,这里设置为 22050 Hz。hop_length
:帧移长度,这里设置为 512 个样本点。n_fft
:傅里叶变换的窗口大小,这里设置为 2048 个样本点。
接下来,我们遍历测试集中的所有音频文件,并提取以下特征:
- 色度频率: 使用
librosa.feature.chroma_stft
函数提取。 - 均方根能量: 使用
librosa.feature.rmse
函数提取。 - 谱心: 使用
librosa.feature.spectral_centroid
函数提取。 - 谱带宽: 使用
librosa.feature.spectral_bandwidth
函数提取。 - 谱衰减点: 使用
librosa.feature.spectral_rolloff
函数提取。 - 过零率: 使用
librosa.feature.zero_crossing_rate
函数提取。 - MFCC: 使用
librosa.feature.mfcc
函数提取 40 个 MFCC 特征。
for audio_file in os.listdir('/content/drive/My Drive/MELD/test'):
# ...
y, sr = librosa.load(audio, mono=True)
chroma_stft = librosa.feature.chroma_stft(y=y, sr=sr)
rmse = librosa.feature.rmse(y=y)
spec_cent = librosa.feature.spectral_centroid(y=y, sr=sr)
spec_bw = librosa.feature.spectral_bandwidth(y=y, sr=sr)
rolloff = librosa.feature.spectral_rolloff(y=y, sr=sr)
zcr = librosa.feature.zero_crossing_rate(y)
mfcc = librosa.feature.mfcc(y=y, sr=sr,n_mfcc=40)
# ...
我们将所有提取的特征取平均值,并将它们与对应的情感标签一起保存到 CSV 文件中。
to_append = f'{audio_file} {np.mean(chroma_stft)} {np.mean(rmse)} {np.mean(spec_cent)} {np.mean(spec_bw)} {np.mean(rolloff)} {np.mean(zcr)}'
# ...
to_append += f' {senti}'
# ...
with file:
writer = csv.writer(file)
writer.writerow(to_append.split())
情感分类
提取音频特征后,我们可以使用各种机器学习算法进行情感分类。常用的算法包括:
- 支持向量机 (SVM)
- 随机森林 (Random Forest)
- 深度神经网络 (DNN)
我们可以使用训练集数据训练模型,并使用验证集数据评估模型性能。最后,我们可以使用测试集数据测试模型的泛化能力。
总结
本文介绍了如何使用音频特征进行情感识别。我们以 MELD 数据集为例,使用 Librosa 库提取了音频特征,并将它们保存到 CSV 文件中。最后,我们讨论了可以使用哪些机器学习算法进行情感分类。