从宏观层面讲,任何机器学习问题都可以分为三种类型的任务:数据任务(数据收集、数据清洗和特征形成)、训练(使用数据特征构建机器学习模型)和评估(评估模型)。特征,定义为“被观察现象的单个可测量属性或特征”,非常有用,因为它们有助于机器理解数据并将其分类到类别中或预测一个值。

不同的数据类型使用非常不同的处理技术。以图像作为数据类型为例:对于人眼来说,它看起来像一种东西,但机器在它被转换为从图像的像素值使用不同滤波器(取决于应用)导出的数值特征后,会以不同的方式看待它。

Word2vec 非常适合处理文本主体。 它将单词表示为数字向量,并且两个单词向量之间的距离决定了单词的相似程度。 如果我们尝试将 Word2vec 应用于数值数据,则结果可能没有意义。

因此,存在专门针对音频数据类型的处理技术,这些技术可以很好地用于音频。
什么是音频信号?
音频信号是在可听频率范围内振动的信号。 当有人说话时,它会产生气压信号; 耳朵吸收这些气压差异并与大脑进行交流。 这就是大脑帮助人们识别该信号是语音并理解某人在说什么的方式。
有很多 MATLAB 工具可以执行音频处理,但 Python 中不存在那么多。 在我们深入研究一些可用于在 Python 中处理音频信号的工具之前,让我们检查一下适用于音频处理和机器学习的音频的一些特征。

语音和音频处理中一些重要的数据特征和转换包括梅尔频率倒谱系数 (MFCCs)、伽马通频率倒谱系数 (GFCCs)、线性预测倒谱系数 (LFCCs)、Bark 频率倒谱系数 (BFCCs)、功率归一化倒谱系数 (PNCCs)、频谱、倒谱、语谱图等。
我们可以直接使用其中一些特征,并从其他一些特征(例如频谱)中提取特征,以训练机器学习模型。
什么是频谱和倒谱?
频谱和倒谱是音频处理中两个特别重要的特征。

从数学上讲,频谱是信号的 傅里叶变换。 傅里叶变换将时域信号转换为频域。 换句话说,频谱是输入音频的时域信号的频域表示。
倒谱是通过获取频谱的对数幅度,然后进行逆傅里叶变换而形成的。 这会导致信号既不在频域中(因为我们进行了逆傅里叶变换),也不在时域中(因为我们在逆傅里叶变换之前获取了对数幅度)。 结果信号的域称为倒频率。
这与听力有什么关系?
我们关心频域信号的原因与耳朵的生物学有关。 在我们可以处理和解释声音之前,必须发生许多事情。 其中一个发生在耳蜗中,耳蜗是充满液体的耳朵部分,其中有数千个与神经相连的微小毛发。 有些毛发较短,有些毛发相对较长。 较短的毛发与较高的声音频率产生共振,而较长的毛发与较低的声音频率产生共振。 因此,耳朵就像一个天然的傅里叶变换分析仪!

关于人类听觉的另一个事实是,随着声音频率增加到 1kHz 以上,我们的耳朵开始对频率的选择性降低。 这与称为 Mel 滤波器组的东西非常吻合。

将频谱通过 Mel 滤波器组,然后进行对数幅度运算和 离散余弦变换 (DCT) 会产生梅尔倒谱。 DCT 提取信号的主要信息和峰值。 它也广泛用于 JPEG 和 MPEG 压缩。 这些峰值是音频信息的要点。 通常,从梅尔倒谱中提取的前 13 个系数称为 MFCC。 这些包含有关音频的非常有用信息,并且通常用于训练机器学习模型。
受人类听觉启发的另一个滤波器是伽马通滤波器组。 该滤波器组用作耳蜗的前端模拟。 因此,它在语音处理中有许多应用,因为它旨在复制我们听到声音的方式。

GFCC 是通过将频谱通过伽马通滤波器组,然后进行响度压缩和 DCT 而形成的。 前(大约)22 个特征称为 GFCC。 GFCC 在语音处理中有许多应用,例如说话人识别。
在音频处理任务(尤其是语音)中有用的其他特征包括 LPCC、BFCC、PNCC 和频谱特征,如频谱通量、熵、滚降、质心、扩展和能量熵。
构建分类器
作为一个快速实验,让我们尝试使用一个名为 pyAudioProcessing 的基于 Python 的开源库,构建一个具有频谱特征和 MFCC、GFCC 以及 MFCC 和 GFCC 组合的分类器。
首先,我们希望 pyAudioProcessing 将音频分类为三个类别:语音、音乐或鸟类。

使用小型数据集(每个类别 50 个训练样本)并且无需任何微调,我们可以衡量此分类模型识别音频类别的潜力。

接下来,让我们尝试使用 GZTAN 音频数据集和音频特征:MFCC 和频谱特征,在音乐类型分类问题上使用 pyAudioProcessing。

有些类型做得很好,而另一些类型还有改进的空间。 可以从此数据中探索的一些内容包括
- 数据质量检查:是否需要更多数据?
- 围绕节拍和音乐音频其他方面的特征
- 音频以外的特征,如转录和文本
- 不同的分类器会更好吗? 有人研究过使用神经网络对音乐类型进行分类。
无论此快速测试的结果如何,很明显,这些特征可以从信号中获取有用的信息,机器可以使用它们,并且它们构成了一个良好的工作基线。
了解更多
以下是一些有用的资源,可以帮助您进行 Python 音频处理和机器学习之旅
- pyAudioAnalysis
- pyAudioProcessing
- 用于鲁棒语音识别的功率归一化倒谱系数 (PNCC)
- LPCC 特征
- 使用 MFCC 进行语音识别
- 使用基于块的 MFCC 特征进行语音/音乐分类
- 音频信号的音乐类型分类
- 用于在 Python 中读取音频的库:SciPy、pydub、libROSA、pyAudioAnalysis
- 用于获取特征的库:libROSA、pyAudioAnalysis(用于 MFCC); pyAudioProcessing(用于 MFCC 和 GFCC)
- 用于音频的基本机器学习模型:sklearn、hmmlearn、pyAudioAnalysis、pyAudioProcessing
本文基于 Jyotika Singh 在 PyBay 2019 上的演示文稿“使用 Python 进行音频处理和机器学习”。
2 条评论