我发现与我的问题相关的最相似的问题是(simple speech recognition methods),但是由于已经过了3年而且答案还不够,我会问。
我想从头开始计算一个简单的语音识别系统,我只需要识别五个单词。 据我所知,此应用程序使用的音频功能更多的是MFCC,HMM用于分类。
我能够从音频中提取MFCC,但我仍然对如何使用这些功能生成HMM模型然后进行分类有一些疑问。
据我所知,我必须执行矢量量化。首先,我需要有一堆MFCC向量,然后应用聚类算法来获得质心。然后,使用质心执行矢量量化,这意味着我必须比较每个MFCC矢量并将其与质心的名称最相似。
然后,质心是HMM中的“可观察符号”。我必须向训练算法引入单词并为每个单词创建HMM模型。然后,给定一个音频查询,我与所有模型进行比较,我说的是概率最高的单词。
首先,此程序是否正确?然后,如何处理不同大小的单词。我的意思是,如果我训练了500毫秒和300毫秒的单词,我会引入多少可观察的符号来与所有模型进行比较?
注意:我不想使用sphinx,android API,microsoft API或其他库。
注意2:如果您分享更多最新信息以获得更好的技术,我将不胜感激。
答案 0 :(得分:2)
首先,这个程序是否正确?
矢量量化部分没问题,但现在很少使用。您描述了所谓的离散HMM,没有人用于语音。如果您希望连续HMM与GMM作为发射的概率分布,则不需要矢量量化。
然后,你专注于不太重要的步骤,如MFCC提取,但跳过了最重要的部分,如使用Baum-Welch的HMM训练和使用Viterbi的HMM解码,这是比使用矢量量化的状态的初始估计更复杂的训练部分。
然后,我该如何处理不同大小的单词。我的意思是,如果我训练了500毫秒和300毫秒的单词,我会引入多少可观察的符号来与所有模型进行比较?
如果您解码语音,您通常会选择与人类感知的部分音素相对应的符号。传统上每个音素需要3个符号。例如,对于3个音素,单词“one”应该具有9个状态,对于5个音素,单词“seven”应该具有15个状态。事实证明这种做法是有效的。当然,你可以略微改变这个估计。