用深度学习构建声乐情感传感器

2019-08-20 15:23:47 浏览数 (1)

作者 | Alex Moore

人类的表达是多方面的,复杂的。例如,说话者不仅通过语言进行交流,还通过韵律,语调,面部表情和肢体语言进行交流。这就是为什么更喜欢亲自举行商务会议而不是电话会议,以及为什么电话会议或发短信会优先考虑电话会议。越接近通信带宽就越多。

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

最初选择构建一个声音情感传感器,因为它似乎是一个有趣和有趣的项目。虽然更多地考虑了这个问题,但意识到通过音频感知情感有一些非常有趣的应用。想象一下,如果智能家居设备可以播放与情绪相匹配的歌曲,例如在悲伤时播放令人振奋的歌曲。客户服务部门可以使用情绪检测来培训员工,或者衡量客户是否在服务呼叫过程中变得更加满意。

数据

用来构建情感分类器的数据集是RAVDESS,TESS和SAVEE,它们都可以免费向公众开放(SAVEE需要非常简单的注册)。这些数据集包含七个常见类别的音频文件:中立,快乐,悲伤,愤怒,恐惧,厌恶和惊讶。合起来,可以访问由30位演员和女演员制作的4,500个标记音频文件中超过160分钟的音频。这些文件通常由演员或演员表达具有特定情感意图的简短短语组成。

https://smartlaboratory.org/ravdess

https://tspace.library.utoronto.ca/handle/1807/24487

http://kahlan.eps.surrey.ac.uk/savee/Download.html

SAVEE数据集的参与者

特征提取

接下来,必须找到可以从音频中提取的有用功能。最初想过使用短时傅里叶变换来提取频率信息。然而对该主题的一些研究表明,傅立叶变换在语音识别应用方面存在很大缺陷。之所以傅立叶变换,虽然声音的优秀物理表现,并不代表人类感知声音的方式。

原始音频波形。在这种形式下,它对于分类是无用的。

从音频中提取特征的更好方法是使用梅尔频率倒谱系数(简称MFCC)。这里提供了一个很好的解释,说明MFCC是如何从音频中获得的。MFCC试图以更符合人类感知的方式表示音频。

要从音频中导出MFCC,需要决定使用多少频率区以及分段的时间步宽。这些决定决定了输出MFCC数据的粒度。语音识别应用的标准做法是在20Hz-20kHz之间应用26个频率箱,并且仅使用前13个用于分类。最有用的信息是在较低频率范围内,并且包括较高频率范围通常会导致较差的性能。对于时间步长,通常在10到100毫秒之间的值。选择使用25毫秒。

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

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

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

训练卷积神经网络

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

在训练CNN之前,将数据集中的文件随机分配到训练或测试集,分成80/20。然后对训练文件执行了许多预处理步骤。每个文件的过程是:

  1. 切掉所有的沉默。
  2. 选择一些随机的0.4s窗口。
  3. 确定每个窗口的MFCC,生成13 x 16阵列。
  4. 将MFCC缩放到0到1范围。(此步骤非常重要!它可以防止模型适应音频录音的音量级别。)
  5. 将每个窗口与原始文件的情感标签相关联。

完成预处理后,生成了75,000个标记为0.4s的窗口用于训练,每个窗口由13x16阵列表示。然后,在这个数据上训练了我的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数据集,大约1400个音频文件。仅使用此数据集,可以获得的最佳准确率为67%。为了达到83%的准确率,所做的就是将数据集的大小增加到4500个文件。

其次,了解到对于音频分类数据,预处理至关重要。原始音频甚至短时傅里叶变换几乎完全没用。当学到很难的方法时,适当的缩放可以决定一个模型。未能消除沉默是另一个简单的陷阱。一旦音频被正确地转换为信息功能,构建和训练深度学习模型相对容易。

Github链接

https://github.com/alexmuhr/Voice_Emotion

0 人点赞