我发现与我的问题相关的最相似的问题是(简单的语音识别方法 https://stackoverflow.com/questions/8467589/simple-speech-recognition-methods)但是三年过去了,答案还不够,我会问。
我想从头开始计算一个简单的语音识别系统,我只需要识别五个单词。
据我所知,该应用中使用较多的音频特征是MFCC和用于分类的HMM。
我能够从音频中提取 MFCC,但我仍然对如何使用这些特征通过 HMM 生成模型然后执行分类有一些疑问。
据我了解,我必须执行矢量量化。首先,我需要一堆 MFCC 向量,然后应用聚类算法来获取质心。然后,使用质心进行矢量量化,这意味着我必须比较每个 MFCC 向量并用最相似的质心名称来标记它。
那么,质心就是 HMM 中的“可观察符号”。我必须将单词引入训练算法并为每个单词创建一个 HMM 模型。然后,给定一个音频查询,我与所有模型进行比较,我说这是概率最高的单词。
首先,这个程序正确吗? Then, 我如何处理不同大小的单词。我的意思是,如果我训练了 500 毫秒和 300 毫秒的单词,我需要引入多少个可观察符号来与所有模型进行比较?
注意:我不想使用 sphinx、android API、microsoft API 或其他库。
注2:如果您能分享更多最新信息以获得更好的技术,我将不胜感激。
首先,这个程序正确吗?
矢量量化部分还可以,但现在很少使用。您描述了所谓的离散 HMM,没有人将其用于语音。如果您想要使用 GMM 的连续 HMM 作为排放的概率分布,则不需要矢量量化。
然后,您专注于不太重要的步骤,例如 MFCC 提取,但跳过了最重要的部分,例如使用 Baum-Welch 进行 HMM 训练和使用 Viterbi 进行 HMM 解码,这些训练部分比使用矢量量化对状态进行初始估计要复杂得多。
那么,如何处理不同大小的单词。我的意思是,如果我训练了 500 毫秒和 300 毫秒的单词,我需要引入多少个可观察符号来与所有模型进行比较?
如果您解码语音,您通常会选择与人类感知的音素部分相对应的符号。传统上每个音素采用 3 个符号。例如,单词“一”应该有 3 个音素的 9 个状态,而单词“七”应该有 5 个音素的 15 个状态。这种做法被证明是有效的。当然,您可以稍微改变这个估计。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)