Как мне согласовать мой алгоритм hmmlearn с массивами MFCC?(Частотные коэффициенты Cepstrel Mel) hmmlearn.GaussianHMM.fit принимает только последовательности - PullRequest
0 голосов
/ 14 февраля 2019

Я работаю над проблемой конкуренции в прошлом, когда пишу алгоритм распознавания речи.При использовании алгоритмов автоматического распознавания речи (ASR) данные обычно обрабатываются в MFCC (коэффициенты частотного кепеля Mel).

Использование библиотеки Джеймса Лайонса (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()

Q1: В hmmlearn, как мне заставить мою модель тренироваться на всех моих wav-файлах, когда кажется, что X в методе .fit(X) принимает только последовательность операций с плавающей запятой? Каждый из моих файлов MFCC имеет размер (99,26) массив Numpy, а не простой следРазумеется, этот единственный (99,26) массив numpy является лишь одним наблюдением данных.

Q2: Я знаю, что скрытые марковские модели работают путем анализа последовательностей и переходов из одного состояния в другое, но как я должен сказать HMM, что он смотрит на «да» MFCC или «нет»файл.Есть ли способ маркировки файлов, чтобы при обнаружении шаблона MFCC компьютер мог определить, что это такое?

Q3: на основе графиков MFCC я испытываю желание использовать CNN (Convolutional).Нейронная сеть), чтобы классифицировать эти фигуры в разные категории.У кого-нибудь это сработало?

Спасибо.Я знаю, что это долго, но я надеюсь, что это имеет смысл.

Вот несколько фотографий моих графиков MFCC: Банк фильтров MFCC для четырех файлов WAV Банк фильтров MFCC для четырех файлов WAV

...