使用 Python 进行音频处理和机器学习简介

pyAudioProcessing 库将音频分类为不同的类别和类型。
261 位读者喜欢此文。
Feedback loop

Opensource.com

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

Machine learning at a high level

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

Data types and feature formation in images

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

Word2vec for analyzing a corpus of text

因此,存在专门针对音频数据类型的处理技术,这些技术可以很好地用于音频。

什么是音频信号?

音频信号是在可听频率范围内振动的信号。 当有人说话时,它会产生气压信号; 耳朵吸收这些气压差异并与大脑进行交流。 这就是大脑帮助人们识别该信号是语音并理解某人在说什么的方式。

有很多 MATLAB 工具可以执行音频处理,但 Python 中不存在那么多。 在我们深入研究一些可用于在 Python 中处理音频信号的工具之前,让我们检查一下适用于音频处理和机器学习的音频的一些特征。

Examples of audio terms to learn

语音和音频处理中一些重要的数据特征和转换包括梅尔频率倒谱系数 (MFCCs)、伽马通频率倒谱系数 (GFCCs)、线性预测倒谱系数 (LFCCs)、Bark 频率倒谱系数 (BFCCs)、功率归一化倒谱系数 (PNCCs)、频谱、倒谱、语谱图等。

我们可以直接使用其中一些特征,并从其他一些特征(例如频谱)中提取特征,以训练机器学习模型。

什么是频谱和倒谱?

频谱和倒谱是音频处理中两个特别重要的特征。

Spectrum and cepstrum

从数学上讲,频谱是信号的 傅里叶变换。 傅里叶变换将时域信号转换为频域。 换句话说,频谱是输入音频的时域信号的频域表示。

倒谱是通过获取频谱的对数幅度,然后进行逆傅里叶变换而形成的。 这会导致信号既不在频域中(因为我们进行了逆傅里叶变换),也不在时域中(因为我们在逆傅里叶变换之前获取了对数幅度)。 结果信号的域称为倒频率。

这与听力有什么关系?

我们关心频域信号的原因与耳朵的生物学有关。 在我们可以处理和解释声音之前,必须发生许多事情。 其中一个发生在耳蜗中,耳蜗是充满液体的耳朵部分,其中有数千个与神经相连的微小毛发。 有些毛发较短,有些毛发相对较长。 较短的毛发与较高的声音频率产生共振,而较长的毛发与较低的声音频率产生共振。 因此,耳朵就像一个天然的傅里叶变换分析仪!

How the ear works

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

MFCC

将频谱通过 Mel 滤波器组,然后进行对数幅度运算和 离散余弦变换 (DCT) 会产生梅尔倒谱。 DCT 提取信号的主要信息和峰值。 它也广泛用于 JPEG 和 MPEG 压缩。 这些峰值是音频信息的要点。 通常,从梅尔倒谱中提取的前 13 个系数称为 MFCC。 这些包含有关音频的非常有用信息,并且通常用于训练机器学习模型。

受人类听觉启发的另一个滤波器是伽马通滤波器组。 该滤波器组用作耳蜗的前端模拟。 因此,它在语音处理中有许多应用,因为它旨在复制我们听到声音的方式。

GFCC

GFCC 是通过将频谱通过伽马通滤波器组,然后进行响度压缩和 DCT 而形成的。 前(大约)22 个特征称为 GFCC。 GFCC 在语音处理中有许多应用,例如说话人识别。

在音频处理任务(尤其是语音)中有用的其他特征包括 LPCC、BFCC、PNCC 和频谱特征,如频谱通量、熵、滚降、质心、扩展和能量熵。

构建分类器

作为一个快速实验,让我们尝试使用一个名为 pyAudioProcessing 的基于 Python 的开源库,构建一个具有频谱特征和 MFCC、GFCC 以及 MFCC 和 GFCC 组合的分类器。

首先,我们希望 pyAudioProcessing 将音频分类为三个类别:语音、音乐或鸟类。

Segmenting audio into speech, music, and birds

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

MFCC of speech, music, and bird signals

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

Music genre classification

有些类型做得很好,而另一些类型还有改进的空间。 可以从此数据中探索的一些内容包括

  • 数据质量检查:是否需要更多数据?
  • 围绕节拍和音乐音频其他方面的特征
  • 音频以外的特征,如转录和文本
  • 不同的分类器会更好吗? 有人研究过使用神经网络对音乐类型进行分类。

无论此快速测试的结果如何,很明显,这些特征可以从信号中获取有用的信息,机器可以使用它们,并且它们构成了一个良好的工作基线。

了解更多

以下是一些有用的资源,可以帮助您进行 Python 音频处理和机器学习之旅


本文基于 Jyotika Singh 在 PyBay 2019 上的演示文稿“使用 Python 进行音频处理和机器学习”。

接下来要阅读的内容
User profile image.
数据科学家 | Python 程序员 | 对使用 NLP、社交媒体数据、图像、音频、语音数据和数字信号处理的机器学习感兴趣。

2 条评论

音频分析的一个具有挑战性的问题是鸟鸣。 我还没有看到任何对此有帮助的方法。 人们可以找到鸟鸣的图形表示,显示歌曲过程中的频率内容,但没有任何好的方法可以匹配它。 也许这是一个可能富有成效的方向。

感谢这篇沉浸式文章。 现在我明白了,音频处理还有很多东西要学习。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.