使用Python进行音频处理和机器学习的介绍
在高层次上,任何机器学习问题都可以分为三类任务:数据任务(数据收集、数据清洗和特征形成)、训练(使用数据特征构建机器学习模型)和评估(评估模型) .特征,[将](https://en.wikipedia.org/wiki/Feature_(machine_learning)定义为“被观察现象的单个可测量属性[ies] 或特征[s]”非常有用,因为它们有助于机器理解数据并将其分类或预测价值。 不同的
在高层次上,任何机器学习问题都可以分为三类任务:数据任务(数据收集、数据清洗和特征形成)、训练(使用数据特征构建机器学习模型)和评估(评估模型) .特征,[将](https://en.wikipedia.org/wiki/Feature_(machine_learning)定义为“被观察现象的单个可测量属性[ies] 或特征[s]”非常有用,因为它们有助于机器理解数据并将其分类或预测价值。
不同的数据类型使用非常不同的处理技术。以图像作为数据类型的示例:它在人眼看来是一回事,但在使用不同的过滤器(取决于应用程序)将其转换为从图像的像素值派生的数字特征后,机器对它的看法不同。
Word2vec非常适合处理文本正文。它将单词表示为数字向量,两个词向量之间的距离决定了单词的相似程度。如果我们尝试将 Word2vec 应用于数值数据,结果可能没有意义。
因此,有一些特定于音频数据类型的处理技术可以很好地处理音频。
什么是音频信号?
音频信号是在可听频率范围内振动的信号。当有人说话时,它会产生气压信号;耳朵吸收这些气压差并与大脑交流。这就是大脑如何帮助人们识别信号是语音并理解某人在说什么的方式。
有很多 MATLAB 工具可以执行音频处理,但 Python 中没有那么多。在我们进入一些可用于在 Python 中处理音频信号的工具之前,让我们先来看看音频的一些特性,这些特性适用于音频处理和机器学习。
在语音和音频处理中重要的一些数据特征和变换是 Mel 频率倒谱系数 (MFCCs)、Gammatone 频率倒谱系数 (GFCCs)、线性预测倒谱系数 (LFCCs)、巴克频率倒谱系数 ( BFCC)、功率归一化倒谱系数 (PNCC)、频谱、倒谱、频谱图等。
我们可以直接使用其中一些特征并从其他一些特征(如频谱)中提取特征来训练机器学习模型。
什么是频谱和倒谱?
频谱和倒谱是音频处理中两个特别重要的特征。
在数学上,频谱是信号的傅里叶变换。傅里叶变换将时域信号转换为频域。换句话说,频谱是输入音频的时域信号的频域表示。
倒谱是通过取频谱的对数幅度,然后进行傅里叶逆变换形成的。这导致信号既不在频域(因为我们进行了傅里叶逆变换)也不在时域(因为我们在傅里叶逆变换之前采用了对数幅度)。结果信号的域称为频率。
这和听力有什么关系?
更多 Python 资源
-
什么是IDE?
-
备忘单:适用于初学者的 Python 3.7
-
顶级 Python GUI 框架
-
下载:7 个必不可少的 PyPI 库
-
红帽开发者
-
最新 Python 内容
我们关心频域信号的原因与耳朵的生物学有关。在我们能够处理和解释声音之前,必须发生许多事情。一个发生在耳蜗中,这是耳朵充满液体的部分,有数千根与神经相连的细毛。有些头发很短,有些相对较长。较短的毛发与较高的声音频率产生共鸣,较长的毛发与较低的声音频率产生共鸣。因此,耳朵就像一个天然的傅里叶变换分析仪!
关于人类听力的另一个事实是,随着声音频率增加到 1kHz 以上,我们的耳朵开始对频率的选择性降低。这与称为 Mel 滤波器组的东西很好地对应。
将频谱通过 Mel 滤波器组,然后获取对数幅度和离散余弦变换(DCT) 产生 Mel 倒谱。 DCT 提取信号的主要信息和峰值。它还广泛用于 JPEG 和 MPEG 压缩。峰值是音频信息的要点。通常,从梅尔倒谱中提取的前 13 个系数称为 MFCC。这些包含有关音频的非常有用的信息,并且通常用于训练机器学习模型。
另一个受人类听觉启发的滤波器是 Gammatone 滤波器组。该滤波器组用作耳蜗的前端模拟。因此,它在语音处理中有许多应用,因为它旨在复制我们的听力方式。
GFCC 是通过将频谱通过 Gammatone 滤波器组,然后进行响度压缩和 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
zoz100027 * *
本文基于 PyBay 2019 的 Jyotika Singh 的演讲“Audio processing and ML using Python”。
更多推荐
所有评论(0)