如何使用 MFCC 系数向量训练机器学习算法?

Posted

技术标签:

【中文标题】如何使用 MFCC 系数向量训练机器学习算法?【英文标题】:How to train a machine learning algorithm using MFCC coefficient vectors? 【发布时间】:2016-05-17 03:32:27 【问题描述】:

对于我最后一年的项目,我正在尝试实时识别狗/吠声/鸟的声音(通过录制声音剪辑)。我使用 MFCC 作为音频功能。最初,我使用 jAudio 库从声音剪辑中提取了总共 12 个 MFCC 向量。 现在我正在尝试训练一种机器学习算法(目前我还没有决定算法,但它很可能是 SVM)。声音片段大小约为 3 秒。我需要澄清有关此过程的一些信息。他们是,

    我是否必须使用基于帧的 MFCC 训练此算法(每帧 12 个) 或基于整体剪辑的 MFCC(每个声音剪辑 12 个)?

    为了训练算法,我是否必须将所有 12 个 MFCC 视为 12 个不同的属性,还是必须将这 12 个 MFCC 视为一个属性?

这些 MFCC 是剪辑的整体 MFCC,

-9.598802712290967 -21.644963856237265 -7.405551798816725 -11.638107212413201 -19.441831623156144 -2.780967392843105 -0.5792847321137902 -13.14237288849559 -4.920408873192934 -2.7111507999281925 -7.336670942457227 2.4687330348335212

非常感谢您为克服这些问题提供的任何帮助。我在 Google 上找不到很好的帮助。 :)

【问题讨论】:

能否请您分享您的代码,如果可能的话,我正在做类似的事情。 【参考方案1】:

    您应该计算每帧的 MFCC。由于您的信号随时间变化,因此将它们用于整个剪辑是没有意义的。更糟糕的是,您最终可能会得到具有相似表示的狗和鸟。我会尝试几种帧长度。通常,它们将是毫秒级的。

    所有这些都应该是单独的功能。让机器学习算法决定哪个是最好的预测器。

请注意,MFCC 对噪音很敏感,因此请先检查您的样本的声音。例如,提供了更丰富的音频特征提取选择。 Yaafe library,其中许多在您的情况下会更好。具体是哪个?以下是我发现在鸟叫分类中最有用的内容:

光谱平坦度 知觉传播 光谱衰减 光谱降低 光谱形状统计 光谱斜率 线性预测编码 (LPC) 线谱对 (LSP)

也许您可能会发现查看this project 很有趣,尤其是我与 Yaafe 交互的部分。

在我使用 SVM 的日子里,正如您所计划的那样。今天我肯定会选择梯度提升。

【讨论】:

这真的很有帮助,对于这种情况,建议的窗口大小是多少?通常我想有一个 3 秒的窗口,因为有些鸟的声音很长。还有在培训方面,你能解释一下如何创建矩阵吗?所以我必须创建 12 个不同的属性,因为它们都是独立的功能,对吧? 将窗口大小视为保存信息的最短间隔,即声音的量子。 3秒内,你可以说一个完整的句子。正如我的回答中所解释的:毫秒的顺序,例如16 毫秒。窗口应该重叠,至少 50% 或更多。有关如何“创建矩阵”的示例,请参阅我分享的代码。 持有信息意味着完整的声音我需要什么或我需要识别的声音的一小部分?假设一只特定鸟的独特声音是 2 秒的长度。如果我使用 1 秒的窗口大小,就没有机会获得鸟儿的实际声音,是吗? :( 我建议先阅读一些关于 DSP 的介绍。长话短说,您的窗口大小应该至少比声音的周期长几倍(例如 5) - 音高越低,窗口应该越长。但是,窗口越长,分辨率越低。

以上是关于如何使用 MFCC 系数向量训练机器学习算法?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习算法之二:SVM(支持向量机)

机器学习算法中如何选取超参数:学习速率正则项系数minibatch size

机器学习的相关算法了解和总结

机器学习的相关算法了解和总结

机器学习的相关算法了解和总结

机器学习-支持向量机的SVM(Supprot Vector Machine)算法-linear inseparable