全文共 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