Press "Enter" to skip to content

感知喜怒哀乐:用深度学习构建声音情感传感器

全文共 2702 字,预计学习时长 5 分钟

 

 

人类的表达是复杂多面的。 例如,说话者不仅通过语言进行交流,还会用到韵律、语调、面部表情和肢体语言。 这就是我们更喜欢举行现场的商务会议而不是电话会议,以及在选择电话会议或发短信时会优先考虑电话会议的原因。 人们离得越近,通信带宽就越大。

 

语音识别软件近年来得到快速发展。 这项技术现在可以很好地识别语音,并将它们拼接在一起来重现口语单词和句子。 但是,简单地将语音翻译成文本,并不能完全概括说话者的信息。 除面部表情和肢体语言外,与音频相比,文本捕捉情感意图的能力非常有限。

 

笔者最初选择构建一个声音情感传感器,是因为它似乎是一个妙趣横生的项目。 尽管反复思量,但还是意识到,通过音频感知情感有一些非常有趣的应用。 想象一下,如果你的智能家居设备可以播放与你的情绪相符合的歌曲,例如在悲痛难耐时播放振奋人心的歌曲; 客户服务部门可以通过情绪检测来培训员工,或者衡量客户是否在服务呼叫过程中变得更满意。

 

数据

 

本文用以下三种数据集来构建情感分类器: RAVDESS(https://smartlaboratory.org/ravdess),TESS(https://tspace.library.utoronto.ca/handle/1807/24487)和SAVEE(http://kahlan.eps.surrey.ac.uk/savee/Download.html),它们都免费向公众开放(SAVEE的注册过程很简单)。

 

这些数据集包含七种常见类型的音频文件: 中立、快乐、悲伤、愤怒、恐惧、厌恶和惊讶。 笔者共听了由30位男女演员制作的4,500个标记音频文件,总时长超过160分钟。 在这些文件中,男女演员会通过一些短语来表达特定的情感意图。

 

 

提供SAVEE数据集采样的男演员

 

特征提取

 

接下来,必须找到可以从音频中提取的有用功能。 最初笔者想过使用短时傅里叶变换来提取频率信息。 然而,相关研究表明,傅立叶变换在语音识别应用方面存在很大缺陷。 其原因是,傅立叶变换虽然是声音的一种很好的物理表示,但并不代表人类对声音的感知。

 

 

并行音频波形。 在这种形式下,它对于分类是毫无用处的。

 

从音频中提取特征的更佳方法是使用梅尔频率倒谱系数(简称MFCC)。 此处提供一项关于MFCC如何从音频派生的优质说明: http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/。

 

MFCC试图以更符合人类感知的方式表示音频。

 

要从音频中导出MFCC,需要决定使用多少频率区以及分段的时间步宽。 这些抉择决定了输出MFCC数据的粒度。 语音识别应用的标准做法是在20Hz-20kHz之间应用26个频率箱,且仅使用前13个进行分类。 最有用的信息在低频段,如果出现在高频段往往会影响性能。 对于时间步长,通常取在10到100毫秒之间。 笔者选择使用25毫秒。

 

 

Mel滤波器组用于存储音频内容。

 

一旦MFCC导出,就可以在热图上绘制并用于可视化音频。 这样做并不能揭示情感类别之间的任何明显差异。 这并不是因为缺乏模式,而是因为人类没有受过视觉上识别这些微妙情感差异的训练。 但是,从这些热图中可以轻易看出男性和女性发言者之间存在差异。

 

 

 

可视化的MFCC: 情绪快乐的男性和女性发声者。 女性的声音往往具有更强的高频成分,正如热图所示,顶部的颜色更明亮。

 

训练卷积神经网络

 

通过导出MFCC,音频分类问题基本上转化为图像识别问题。 因此,在图像识别领域中非常有效的工具、算法和技术,在音频分类中同样效果显着。 为了解决情绪分类问题,笔者选择使用卷积神经网络( CNN ),因为在图像和音频识别方面,这些都已被证明卓有成效。

 

在训练CNN之前,笔者按4: 1的比例将数据集中的文件随机分配成训练或测试集。 然后,对训练文件进行了许多预处理。 处理每个文件的过程包括:

 

1.去掉所有无声的部分。

 

2.选择大量随机的0.4秒窗口。

 

3.确定每个窗口的MFCC,生成13 x 16阵列。

 

4.将MFCC缩放到0到1范围。 (这一步非常重要! 可以防止模型适应音频录音的音量级别。 )

 

5.将每个窗口与原始文件的情感标签联系起来。

 

完成预处理后,共生成了75,000个标记为0.4s的窗口用于训练,每个窗口由13×16阵列表示。 然后,笔者对CNN进行了25个周期的数据训练。

 

模型测试

 

为了在测试集上对模型进行基准测试,笔者应用了一个类似于用于创建训练数据的流程工作流。 测试集中每个文件的过程是:

 

1.去掉所有无声的部分。

 

2.创建‘滑动’0.4s窗口,步长为0.1秒。 (例如,第一个窗口的范围为0.0s至0.4s,第二个窗口的范围为0.1s至0.5s,以此类推)

 

3.确定每个窗口的MFCC,缩放到0到1范围。

 

4.对每个窗口进行分类,并返回softmax输出。

 

5.每个窗口的聚合预测。

 

6.最终预测是聚合后的最大类。

 

将此过程应用于测试集中的全部889个文件,总体准确率为83%。 笔者非常怀疑自己是否能够以接近83%的准确率来标记这些文件。 每个特定情绪的准确度会显示在下面的条形图上。

 

 

小贴士

 

这篇文章可能会让建模、训练和测试模型看起来一目了然。 但事实并非如此。 在达到83%的准确度之前,有许多版本的模型进行得非常糟糕。 在一次迭代中,笔者没有正确地扩展输入,导致测试集中几乎每个文件的情感都被预测为“惊讶”。 那幺我们可以从这次经历中学到了什幺?

 

首先,这个项目很好地证明了简单地收集更多数据是如何大大改善结果的。 笔者第一次成功迭代模型只使用了RAVDESS数据集,大约1,400个音频文件。 仅使用此数据集,获得的最佳准确率为67%。 为了达到83%的准确率,要做的就是将数据集增加到4,500个文件。

 

 

其次,笔者了解到对于音频分类数据,预处理至关重要。 并行音频甚至短时傅里叶变换几乎完全没用。 正如笔者学到的复杂方法,适当的缩放能够创建或破坏模型。 未能删除无声的部分是另一个简单的陷阱。 一旦音频正确地转换为信息功能,构建和训练深度学习模型就相对容易一些。

 

总的来说,建立语音情感检测的分类模型是一项极具挑战性又大有裨益的经历。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注