从头开始简单的语音识别

时间:2014-05-06 05:25:08

标签: speech-recognition feature-extraction hidden-markov-models

我发现与我的问题相关的最相似的问题是(simple speech recognition methods),但是由于已经过了3年而且答案还不够,我会问。

我想从头开始计算一个简单的语音识别系统,我只需要识别五个单词。 据我所知,此应用程序使用的音频功能更多的是MFCC,HMM用于分类。

我能够从音频中提取MFCC,但我仍然对如何使用这些功能生成HMM模型然后进行分类有一些疑问。

据我所知,我必须执行矢量量化。首先,我需要有一堆MFCC向量,然后应用聚类算法来获得质心。然后,使用质心执行矢量量化,这意味着我必须比较每个MFCC矢量并将其与质心的名称最相似。

然后,质心是HMM中的“可观察符号”。我必须向训练算法引入单词并为每个单词创建HMM模型。然后,给定一个音频查询,我与所有模型进行比较,我说的是概率最高的单词。

首先,此程序是否正确?然后,如何处理不同大小的单词。我的意思是,如果我训练了500毫秒和300毫秒的单词,我会引入多少可观察的符号来与所有模型进行比较?

注意:我不想使用sphinx,android API,microsoft API或其他库。

注意2:如果您分享更多最新信息以获得更好的技术,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

  

首先,这个程序是否正确?

矢量量化部分没问题,但现在很少使用。您描述了所谓的离散HMM,没有人用于语音。如果您希望连续HMM与GMM作为发射的概率分布,则不需要矢量量化。

然后,你专注于不太重要的步骤,如MFCC提取,但跳过了最重要的部分,如使用Baum-Welch的HMM训练和使用Viterbi的HMM解码,这是比使用矢量量化的状态的初始估计更复杂的训练部分。

  

然后,我该如何处理不同大小的单词。我的意思是,如果我训练了500毫秒和300毫秒的单词,我会引入多少可观察的符号来与所有模型进行比较?

如果您解码语音,您通常会选择与人类感知的部分音素相对应的符号。传统上每个音素需要3个符号。例如,对于3个音素,单词“one”应该具有9个状态,对于5个音素,单词“seven”应该具有15个状态。事实证明这种做法是有效的。当然,你可以略微改变这个估计。