1

我正在研究过去的 kaggle 竞赛问题,我正在编写语音识别算法。使用自动语音识别 (ASR) 算法,习惯上将数据处理成 MFCC(梅尔频率倒谱系数)。

使用 James Lyons 的库 ( https://github.com/jameslyons/python_speech_features ),我构建了一个名为 speech_recognize 的类,它加载 wav 文件,然后将它们处理到 MFCC 中。

现在我有了 MFCC,我应该如何将它们放入 HMM(隐马尔可夫模型)?我想使用在这里找到的库 hmmlearn:(https://hmmlearn.readthedocs.io/en/latest/index.html)。

虽然我现在只处理四个类别(“是”、“否”、沉默、“其他”),但我可能会添加更多类别。每个类别我有大约 2000 个不同的 wav 文件。这些 wav 文件各构成一个 MFCC。

以下是我在考虑如何在所有 MFCC 上训练我的数据。如您所见,我试图区分 4 种状态:“是”、“否”、沉默和其他。

import numpy as np
from hmmlearn import hmm
import speech_recognizer #This is the class I made to turn wav files to MFCC

"""
Variables:

mfcc_list_yes - All of the MFCC of wav files that say "yes"
mfcc_list_no - All of the MFCC of wav files that say "no"
mfcc_list_silence - All of the MFCC of wav files that say "silence"
mfcc_list_other - All of the MFCC of wav files that say something else beside the other categories
"""
mfcc_list_yes = r.mfcc_list 
mfcc_list_no = m.mfcc_list 
mfcc_list_silence = s.mfcc_list 
mfcc_list_other = o.mfcc_list 
mfcc_list = mfcc_list_yes + mfcc_list_yes + mfcc_list_silence + mfcc_list_other

def HMM(mfcc_list = mfcc_list, num_states = 4):
    """
    num_states represents the possible states that the HMM could be in. For a speech recognition algorithm
    this would include: silence, not recognizable, and any number of other states (or possible words)
    """
    model = hmm.GaussianHMM(n_components = num_states, covariance_type = "full", n_iter=100)
    x = 0
    for mfcc in mfcc_list:

        model.fit(mfcc)

HMM()

XQ1:在 hmmlearn 中,当方法中似乎.fit(X)只需要一系列浮点数时,我应该如何让我的模型在我的所有 wav 文件上进行训练?我的每个 MFCC 文件的大小都为 (99,26) numpy 数组,而不是一个简单的序列,但这个 (99,26) numpy 数组只是对数据的一个观察。

Q2:我知道隐藏马尔可夫模型通过分析从一种状态到另一种状态的序列和转换来工作,但是我应该如何告诉 HMM 它正在查看“是”MFCC 或“否”文件。有没有办法标记文件,以便在遇到 MFCC 模式时计算机可以对其进行分类?

Q3:根据 MFCC 的图,我很想使用 CNN(卷积神经网络)将这些形状分类为不同的类别。这对任何人都有效吗?

谢谢你。我知道这很长,但我希望这是有道理的。

以下是我的 MFCC 图的一些照片: 用于四个 wav 文件的 MFCC 滤波器组 用于四个 wav 文件的 MFCC 滤波器组

4

0 回答 0