语音情感识别中的 MFCC(梅尔频率系数的平均值对性能的影响)

Posted

技术标签:

【中文标题】语音情感识别中的 MFCC(梅尔频率系数的平均值对性能的影响)【英文标题】:MFCC in speech emotion recognition (Effect of average of Mel Frequency coefficients on performance) 【发布时间】:2021-05-15 16:38:22 【问题描述】:

我正在为我正在使用 MFCC 的功能开展一个项目(从语音或语调中检测情绪),我在一定程度上了解这些功能,并且知道它们在语音方面是非常重要的功能。

这是我从 librosa 中使用的代码,用于从我的音频文件中提取特征,然后我将其用于神经网络进行训练:

dat, sample_rate = librosa.load(audio_path,res_type='kaiser_fast')
mfccs = np.mean(librosa.feature.mfcc(y=dat, sr=sample_rate,n_mfcc=13).T, axis=0)

我想知道的是,在取转置后取梅尔频率系数的平均值如何影响性能?我是否从我的音频文件中丢失了有价值的信息?或者我应该使用整个梅尔频率系数进行训练并做一些填充技术来确保训练特征的大小在所有训练音频文件中保持相同,因为它们的长度不同。 我还研究了其他技术,例如采用 mfcc 的导数并将它们连接在一起,但我仍然不确定哪种技术可以提供更好的特征集并最终提供更好的分类结果。 如果这两种技术不是那么有用,那么也许我应该坚持我目前的方法,如代码所示,即取平均值,并可能将我的梅尔频率系数数从 13 增加到更高的数字。

【问题讨论】:

【参考方案1】:

我认为在这种情况下平均是一个坏主意。因为,是的——你丢失了有价值的时间信息。但在情感识别的背景下,更重要的是通过与背景进行平均来抑制信号的有价值部分。众所周知,情绪是一种微妙的现象,可能只会在很短的时间内出现,其余时间都隐藏起来。

由于您的动机是准备音频信号以使用 ML 方法进行处理,我应该说有很多方法可以正确执行此操作。简而言之,您独立处理每个 MFCC 帧(例如使用 DNN),然后以某种方式表示整个序列。有关更多详细信息和链接,请参阅此答案:How to classify continuous audio

为了将静态 DNN 包含到动态上下文中,DNN 与隐藏马尔可夫模型的组合非常流行。描述该方法的经典论文可以追溯到 2013 年:https://www.researchgate.net/publication/261500879_Hybrid_Deep_Neural_Network_-_Hidden_Markov_Model_DNN-HMM_based_speech_emotion_recognition

如今,新的方法被开发出来,例如:https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/IS140441.pdf

如果有足够的数据(和技能)进行训练,您可以使用某种类型或循环神经网络,通过设计解决序列分类任务。

【讨论】:

感谢您的宝贵回答。因此,正如您所建议的,我仍然会计算每个梅尔频率系数的平均值,但这次我将制作一个固定大小的帧并计算音频片段的 MFCC。但是,我仍然无法弄清楚使它们成为固定大小的单个向量进行训练的更好方法是什么,因为我将为不同的音频样本获得不同数量的片段。我正在考虑将音频文件连接在一起,并以 10 秒的长度保存它们,以创建一个新的数据集,其中它们都具有相同的长度,因此段数相同。 我没有建议对向量进行平均 :) 相反,我建议采用适合序列处理的方法(例如 HMM 或 RNN),因为您确实有可变长度的 MFCC 序列。

以上是关于语音情感识别中的 MFCC(梅尔频率系数的平均值对性能的影响)的主要内容,如果未能解决你的问题,请参考以下文章

语音识别基于MFCC的GMM语音识别matlab源码

语音识别基于MFCC和SVM的特定人性别识别matlab源码

语音识别基于结合mfcc和lpc特征SVM支持向量机实现中英语种识别matlab源码

语音识别基于结合mfcc和lpc特征SVM支持向量机实现中英语种识别matlab源码

语音识别基于MFCC实现声纹识别matlab源码

MFCC