语音识别之HTK入门(三)——单音素单高斯模型
前面两节介绍了语音识别的一些概念,并进行数据的预处理。现在我们有了音频数据转化为MFCC特征向量的文件,以及与每个特征文件相对应的音素信息文件。
现在进入模型构建部分,包括两个核心部分,一是如何表示音素概率分布;二是如何建模音素间的转移关系。
首先,给个总结性的描述。最初的系统是通过隐马尔可夫模型(HMM)来描述音素间的转移概率,通过单高斯(GSM)来建模每个音素的状态的发生概率,就是利用一个多维正态分布来拟合每个音素的概率;它是HMM模型中的发射概率(或者叫混淆概率)。
单高斯模型,就是多维正态分布。如果知道了一组观察值和它们对应的标签,用高斯模型来拟合这个类别的概率分布情况,那么就通过这些样本来求高斯模型的均值和协方差。测试/预测时,通过计算每个观察数据对应在哪个模型下的值最大(最大似然概率),就可以认为它属于哪里个类(不考虑序列转移的概率的前提下)。

上图演示了二维高斯分布在不同模型参数下的形状。现在就是要为每个音素状态构建一个模型,本质就是确定它的参数。这篇博客写的比较清楚,认真推理应该是很容易理解的,找一个维度少点的例子,比如三个或者四个的随机向量,计算推导下就应该能明白了。简单来说就通过已有的数据通过加减乘除得到每个高斯模型的均值向量和协方差矩阵。如果我们得到的数据是标准好的每个音素状态的特征向量,那么到这里音素建模就已经完成了。但是,在语音识别过程中为音频文件标注大量音素级别、尤其是音素状态级别的数据,成本是非常高的,不现实的。因此需要引入其他的方法来训练高斯模型,就是计算每个模型的参数。
同时,语音识别还需要考虑音素的前后概率关系,得到一个总体的概率值最大情况。
到现在为止,我们提到了隐马尔可夫(HMM)模型、高斯模型(GSM),音素模型,还提到音素的不同状态。可能初学者对这些术语以及它们之间的关系是非常模糊的,概念不清是学习新知识的最大障碍。介绍HMM模型是一个比较大的工程,可能要好几十页纸才能彻底讲明白。本文重点是如何利用HMM来进行音素建模,进而完成语音识别功能,了解其中的大概原理包括训练、评估、预测算法就可以了。好好看一下这篇博客概念上大概了解的也差不多了。
HTK的经典HMM音素模型是包括5个状态,包括一个输入状态和一个输出状态,分别标记为1和5,它们俩是没有发射概率的,其中输入状态就是一个过渡,没有自循环,直接以概率1转移到下一个状态,而输出状态是模型的终结点,没有转移到其他状态的概率,通过这两个状态可以把多个音素拼接起来形成一个链。中间的2、3、4状态有转移,每个状态对应有发射概率。因此重点就是如何计算得到状态转移概率、发射概率、初始概率和设置状态数。
从HTK的角度,每个音素模型的每个状态id是全局唯一的。
按照构建拨号系统的步骤继续向下走,建立一个模型描述文件proto。这个文件描述了HMM模型的拓扑结构,~o<VecSize>描述观察向量的维度;~h “proto”开头,标签<BeginHMM>中描述了如下信息:有几个隐藏状态,状态转移矩阵的行列数等。这个文件就是后面各个音素模型的模板,参数会不同,比如每个状态的GSM参数(均值和方差),状态转移矩阵的参数,但是结构都是一样的。
在没有音素级标注语料的情况下,HTM中通过一个叫flat start方式初始化该模型,其实就是计算全局的均值和方差作为模型的初始值。命令如下。
HCompV -C config -f 0.01 -m -S train.scp -M .\hmms\hmm0 proto
HCompV命令有一组选项。-f 选项将方差下限(称为vFloors)设为全局方差的0.01倍,这组向量值将被用于后面步骤中方差估计的下限值。-m选项指定均值和方差同时计算。定存储在hmm0目录下的新原始模型后,将会构造名为hmmdefs的Master Macro File (MMF) 文件,hmmdefs中包含需要的每个单音素模型(包括”sil”)的副本,每个模型都复制了新的原始模型,且作了重新标记。MMF文件的格式和MLF文件的格式类似,而且也出于类似的目的,避免了单独定义模型导致数量过大的HMM定义文件。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)