HMM && GMM

转载:

http://www.inf.ed.ac.uk/teaching/courses/asr/2012-13/asr03-hmmgmm-4up.pdf

http://blog.chinaunix.net/uid-26715658-id-3453274.html

花了一天时间想要搞明白HMM&&GMM在语音识别中的原理,每次觉得明白了之后,仔细一想又不明白了,现在大体捋一捋顺序,好记性不如烂笔头嘛~

上面链接的第一个为英文PPT,从HMM到GMM识别和训练都有详细推导过程,下一篇为中文博客,主要讲的是HMM,大体意思都相似。

先说HMM要解决的三个问题:

1、给定观察序列,求出某个HMM模型产生此观察序列的概率,产生此序列的最大概率的HMM作为识别输出值。涉及前向算法

如在语音中,创建了K个word的模型,来了一个单词“yes",把”yes“得到的特征值分别作为K个word的输入,最后得到K个输出概率,概率最大的就是识别结果。

2、给定观察序列,找到一条状态转移路径,使当前观察序列得到最大的概率。涉及后向算法

3、训练一个HMM模型,给定一系列训练样本,得到HMM各个参数,代表一个模型。涉及前向-后向算法(EM算法的特例)

如要训练一个单词”yes"的HMM 模型,那么我选择标记的N个yes发音的样本,由此可以得到yes这个单词的HMM模型,下次来个单词yes就可以按照1得出识别结果概率。

HMM的两个定量:一个是隐藏状态(隐藏状态的个数由经验给定),一个是观察序列(隐藏状态不可观测,观察序列是由隐藏状态观察到的,所以一定程度上可以反映隐藏状态,但是二者数量不一定相同)。

相应的产生三个参数,各个状态初始概率pi,一个是A(i, j)表示由状态i转移到j的概率;一个是Bj(Ok),表示在状态j产生观察值k的概率(在这一部分,用到的是GMM模型)。

在语音中,一般为每个word创建一个HMM模型,每个状态表示一个音素(具体是什么不用费心,可以使1 2 3也可以使a b c表示)。观测值就是每个语音的特征值,对于一个单词,先对语音进行分帧,比如得到一帧的MFCC特征(大概39维,用Ok表示),这样分为n帧,就得到了n个时间状态的观察序列(O1,O2, .......On)。

那么语音识别过程如下:

给定了一个“yes”的HMM模型,模型参数Aij,Bj(Ok)都以给出,设状态数为4,。应用前向算法,具体是啥可见链接。可以求出此模型产生观测序列(O1,O2, .......On)的概率

P(O1,O2, .......On) = SUM(j){ALFAj(t+1) = SUM(i)(ALFAi(t)AijBj(Ot+1))}      1<= t <= n    1<= i, j <=4;其实就是在On时刻,各个状态j输出概率之和。

模型训练过程

模型由两部分组成,一个是HMM,一个是GMM,每个HMM状态对应一个GMM模型。那么一共的参数为(pi,Aij, Bj(Ok))再进行细化,Bj(Ok)由GMM模型给出,GMM模型(假设由M个高斯组成),三个参数(c, u, 6)其中c代表每个高斯的权重,u代表每个高斯的均值,6表示协方差矩阵。则要训练的参数变为(pi,Aij,ck, uk, rk);

给出训练样本,即很多组观测值。

那么模型训练过程遵循EM过程:

E-step:先初始化各个参数pi,Aij,ck, uk, rk,输入一个观测值序列,得到中间变量e(i,j),r(j)。

M-step:根据中间变量更新各个pi,Aij,ck, uk, rk变量,具体公式见链接,那么得到了新的参数。

重复EM部,经过所有样本训练后,即可得到相应的训练模型,即可进行上面的识别过程了,^_^

公式啥的实在不容易打,如果想详细了解,还是见链接吧。这样看来HMM&&GMM模型确实挺复杂,想要完全懂,还要多摸索。


### GMM-HMM模型简介 GMM-HMM(高斯混合模型-隐马尔可夫模型)是一种广泛应用于语音识别领域的统计模型。它结合了HMM的时间序列建模能力和GMM的概率密度估计功能,能够有效地处理连续语音信号中的时间依赖性和特征分布复杂性[^1]。 #### 模型结构 在GMM-HMM框架中,HMM用于描述观察序列的状态转移特性,而GMM则被用来表示每个状态下的观测概率分布。具体来说,对于给定的音频帧特征向量 \( \mathbf{o}_t \),其对应的观测概率由以下公式计算得出: \[ P(\mathbf{o}_t | q_i) = \sum_{k=1}^{K} w_k N(\mathbf{o}_t; \mu_k, \Sigma_k) \] 其中: - \( K \) 是GMM的组件数量; - \( w_k \) 表示第\( k \)个高斯分量的权重; - \( N(\mathbf{o}_t; \mu_k, \Sigma_k) \) 是均值为\( \mu_k \)、协方差矩阵为\( \Sigma_k \) 的多维正态分布函数[^3]。 这种组合方式使得GMM-HMM能够在捕捉长时间动态变化的同时,也具有较强的局部特征表达能力。 --- ### GMM-HMM模型的应用场景 GMM-HMM最典型的用途是在自动语音识别(ASR)领域。通过构建基于音素或者更细粒度单元(如三音子)上的声学模型,它可以完成从输入声音到文字转写的任务。例如,在孤立单词识别系统里,每一个可能的目标词汇都会对应一个独立设计好的HMM;而在大词汇量连续语音环境下,则通常采用共享参数的方式减少冗余并提高泛化性能[^4]。 以下是几个典型应用阶段及其特点概述: 1. **训练过程** - 利用Baum-Welch算法调整HMM内部各部分参数直至收敛。 - 对于初始条件设定较差的情况还可以考虑引入Viterbi重估法进一步优化结果质量。 2. **解码操作** - 给定一段待分析的新录音文件后,按照最大似然准则寻找最佳路径匹配已知模板集合内的某个成员身份标签作为最终预测输出。 --- ### 实现方法 为了更好地理解和实践上述理论概念,下面给出了一段Python伪代码来展示如何利用开源工具包`hmmlearn`快速搭建起基础版本的GMM-HMM分类器原型: ```python from hmmlearn import gmmhmm def train_gmm_hmm(features_list, n_components=3, n_mixtures=5): model = gmmhmm.GMMHMM(n_components=n_components, n_mix=n_mixtures, covariance_type="diag", init_params='cm', params='cmtw') lengths = [len(feat) for feat in features_list] X = np.concatenate(features_list) model.fit(X, lengths=lengths) return model if __name__ == "__main__": # Assume `features_list` contains preprocessed feature vectors per utterance. trained_model = train_gmm_hmm(features_list) ``` 此脚本定义了一个简单的函数`train_gmm_hmm()`接受一组提取出来的MFCC系数序列列表作为输入,并返回经过充分迭代后的完整配置对象供后续调用查询使用[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值