GMM-HMM语音识别模型 原理篇

分类: Data Structure Machine Learning Data Mining 2014-05-28 20:52 20662人阅读 评论(34) 收藏 举报

本文简明讲述GMM-HMM在语音识别上的原理,建模和测试过程。这篇blog只回答三个问题:

1. 什么是Hidden Markov Model?

HMM要解决的三个问题:

1) Likelihood

2) Decoding

3) Training

2. GMM是神马?怎样用GMM求某一音素(phoneme)的概率?

3. GMM+HMM大法解决语音识别

3.1 识别

3.2 训练

3.2.1 Training the params of GMM

3.2.2 Training the params of HMM

 

首先声明我是做视觉的不是做语音的,迫于**需要24小时速成语音。上网查GMM-HMM资料中文几乎为零,英文也大多是paper。苦苦追寻终于貌似搞懂了GMM-HMM,感谢语音组老夏(http://weibo.com/ibillxia)提供资料给予指导。本文结合最简明的概括还有自己一些理解应运而生,如有错误望批评指正。

====================================================================

1. 什么是Hidden Markov Model?

ANS:一个有隐节点(unobservable)和可见节点(visible)的马尔科夫过程(见详解)。

隐节点表示状态,可见节点表示我们听到的语音或者看到的时序信号。

最开始时,我们指定这个HMM的结构,训练HMM模型时:给定n个时序信号y1...yT(训练样本), 用MLE(typically implemented in EM) 估计参数:

1. N个状态的初始概率

2. 状态转移概率a

3. 输出概率b

--------------

  • 在语音处理中,一个word由若干phoneme(音素)组成;
  • 每个HMM对应于一个word或者音素(phoneme)
  • 一个word表示成若干states,每个state表示为一个音素

用HMM需要解决3个问题:

1). Likelihood: 一个HMM生成一串observation序列x的概率< the Forward algorithm>

其中,αt(sj)表示HMM在时刻t处于状态j,且observation = {x1,...,xt}的概率

aij是状态i到状态j的转移概率,

bj(xt)表示在状态j的时候生成xt的概率,

2). Decoding: 给定一串observation序列x,找出最可能从属的HMM状态序列< the Viterbi algorithm>

在实际计算中会做剪枝,不是计算每个可能state序列的probability,而是用Viterbi approximation:

从时刻1:t,只记录转移概率最大的state和概率。

记Vt(si)为从时刻t-1的所有状态转移到时刻t时状态为j的最大概率:

为:从时刻t-1的哪个状态转移到时刻t时状态为j的概率最大;

进行Viterbi approximation过程如下:

然后根据记录的最可能转移状态序列进行回溯:

3). Training: 给定一个observation序列x,训练出HMM参数λ = {aij, bij}  the EM (Forward-Backward) algorithm

这部分我们放到“3. GMM+HMM大法解决语音识别”中和GMM的training一起讲

 

---------------------------------------------------------------------

2. GMM是神马?怎样用GMM求某一音素(phoneme)的概率?

2.1 简单理解混合高斯模型就是几个高斯的叠加。。。e.g. k=3

fig2. GMM illustration and the probability of x

2.2 GMM for state sequence

每个state有一个GMM,包含k个高斯模型参数。如”hi“(k=3):

PS:sil表示silence(静音)

fig3. use GMM to estimate the probability of a state sequence given observation {o1, o2, o3}

其中,每个GMM有一些参数,就是我们要train的输出概率参数

fig4. parameters of a GMM

怎么求呢?和KMeans类似,如果已知每个点x^n属于某每类 j 的概率p(j|x^n),则可以估计其参数:

 , 其中 

只要已知了这些参数,我们就可以在predict(识别)时在给定input sequence的情况下,计算出一串状态转移的概率。如上图要计算的state sequence 1->2->2概率:

fig5. probability of S1->S2->S3 given o1->o2->o3

---------------------------------------------------------------------

3. GMM+HMM大法解决语音识别

<!--识别-->

我们获得observation是语音waveform, 以下是一个词识别全过程:

1). 将waveform切成等长frames,对每个frame提取特征(e.g. MFCC),

2).对每个frame的特征跑GMM,得到每个frame(o_i)属于每个状态的概率b_state(o_i)

fig6. complete process from speech frames to a state sequence

3). 根据每个单词的HMM状态转移概率a计算每个状态sequence生成该frame的概率; 哪个词的HMM 序列跑出来概率最大,就判断这段语音属于该词

宏观图:

fig7. Speech recognition, a big framework

(from Encyclopedia of Information Systems, 2002)

<!--训练-->

好了,上面说了怎么做识别。那么我们怎样训练这个模型以得到每个GMM的参数和HMM的转移概率什么的呢?

①Training the params of GMM

GMM参数:高斯分布参数:

从上面fig4下面的公式我们已经可以看出来想求参数必须要知道P(j|x),即,x属于第j个高斯的概率。怎么求捏?

fig8. bayesian formula of P( j | x )

根据上图 P(j | x), 我们需要求P(x|j)和P(j)去估计P(j|x).

这里由于P(x|j)和P(j)都不知道,需要用EM算法迭代估计以最大化P(x) = P(x1)*p(x2)*...*P(xn):

A. 初始化(可以用kmeans)得到P(j)

B. 迭代

E(estimate)-step: 根据当前参数 (means, variances, mixing parameters)估计P(j|x)

M(maximization)-step: 根据当前P(j|x) 计算GMM参数(根据fig4 下面的公式:)

 , 其中 

②Training the params of HMM

前面已经有了GMM的training过程。在这一步,我们的目标是:从observation序列中估计HMM参数λ;

假设状态->observation服从单核高斯概率分布:,则λ由两部分组成:

HMM训练过程:迭代

E(estimate)-step: 给定observation序列,估计时刻t处于状态sj的概率 

M(maximization)-step: 根据重新估计HMM参数aij.

其中,

E-step: 给定observation序列,估计时刻t处于状态sj的概率 

为了估计, 定义: t时刻处于状态sj的话,t时刻未来observation的概率。即

这个可以递归计算:β_t(si)=从状态 si 转移到其他状态 sj 的概率aij * 状态 i 下观测到x_{t+1}的概率bi(x_{t+1}) * t时刻处于状态sj的话{t+1}后observation概率β_{t+1}(sj)

即:

定义刚才的为state occupation probability,表示给定observation序列,时刻t处于状态sj的概率P(S(t)=sj | X,λ) 。根据贝叶斯公式p(A|B,C) = P(A,B|C)/P(B|C),有:

由于分子p(A,B|C)为

其中,αt(sj)表示HMM在时刻t处于状态j,且observation = {x1,...,xt}的概率

: t时刻处于状态sj的话,t时刻未来observation的概率;

finally, 带入的定义式有:

好,终于搞定!对应上面的E-step目标,只要给定了observation和当前HMM参数 λ,我们就可以估计了对吧 (*^__^*)

M-step:根据重新估计HMM参数λ:

对于λ中高斯参数部分,和GMM的M-step是一样一样的(只不过这里写成向量形式):

对于λ中的状态转移概率aij, 定义C(Si->Sj)为从状态Si转到Sj的次数,有

实际计算时,定义每一时刻的转移概率为时刻t从si->sj的概率:

那么就有:

把HMM的EM迭代过程和要求的参数写专业点,就是这样的:

PS:这个训练HMM的算法叫 Forward-Backward algorithm。

一个很好的reference:点击打开链接

欢迎参与讨论并关注本博客和微博Rachel____Zhang, 后续内容继续更新哦~

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/daleloogn/p/4741959.html

[zz]GMM-HMM语音识别模型 原理篇相关推荐

  1. GMM-HMM语音识别模型 原理篇

    本文简明讲述GMM-HMM在语音识别上的原理,建模和测试过程.这篇blog只回答三个问题: 1. 什么是Hidden Markov Model? HMM要解决的三个问题: 1) Likelihood ...

  2. 传统语音识别(GMM+HMM)

    语音信号的采集: 语音信号计算机中是采用PCM编码按时间序列保存的一连串数据.计算机中最原始语音文件是wav,可以通过各种录音软件录制,录制是包括三个参数 fs:采样率 8000Hz 115200Hz ...

  3. 原理篇 | 推荐系统之矩阵分解模型

    导语:本系列文章一共有三篇,分别是 <科普篇 | 推荐系统之矩阵分解模型> <原理篇 | 推荐系统之矩阵分解模型> <实践篇 | 推荐系统之矩阵分解模型> 第一篇用 ...

  4. Kubernetes应用部署模型解析(原理篇)

    2019独角兽企业重金招聘Python工程师标准>>> Kubernetes应用部署模型解析(原理篇) 博客分类: Kubernetes [编者按]Kubernetes可用来管理Li ...

  5. 【原理篇】推荐系统之矩阵分解模型

    导语: 上次给大家分享了本系列文章第一篇<[科普篇]推荐系统之矩阵分解模型>,第一篇用一个具体的例子介绍了MF是如何做推荐的.今天给大家带来第二篇<[原理篇]推荐系统之矩阵分解模型& ...

  6. SuperMap三维复杂模型建模之3D极坐标建模——原理篇

    作者:超图研究院技术支持中心-于丁 随着SuperMap iDesktop 10i(2021) V10.2.1的上线发布,为进一步拓展全空间数据模型及其分析计算能力,一个新功能"3D极坐标建 ...

  7. 推荐系统——3、原理篇 | 推荐系统之矩阵分解模型

    上一篇我们用一个简单的例子讲述了矩阵分解(Matrix Factorization, MF)是如何做推荐的,但没有深入到算法的细节.如果想编写自己的代码实现MF,那么就需要了解其中的细节了.本文是MF ...

  8. 扩散模型 Diffusion Models - 原理篇

    扩散模型 Diffusion Models - 原理篇 参考博客及视频链接: What are Diffusion Models? Diffusion Model扩散模型理论与完整PyTorch代码详 ...

  9. 语音识别的原理_语音识别原理_语音识别原理框图 - 云+社区 - 腾讯云

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 深入浅出地介绍了基于hmm的语音识别的原理,不注重公式的细节推导而是着重阐述公式背 ...

最新文章

  1. 条款22: 尽量用“传引用”而不用“传值”
  2. mysql groupby having_mysql group by having的使用方法
  3. java jdk windows环境 下载安装配置环境变量
  4. 【行业报告】基于社交图谱关系的反欺诈产品应用——青云
  5. vim 折叠的用法
  6. www.sirim-global.com
  7. 39 MM配置-采购-采购订单-STO配置-定义工厂的装运数据
  8. bartender的安全策略不允许指定的用户执行此操作_Linux sudo 被曝提权漏洞,任意用户均能以 root 身份运行命令...
  9. 【Machine Learning 五】Coursera无法观看课程解决方案
  10. RHEL5.4 x86_64 GCC 4.1.2 升级到4.7.0版过程(含安装MPFR、GMP、MPC过程)
  11. 揭开阿里P2P面纱:大数据是泡泡
  12. ihttphandler ihttpmodule
  13. unity3d脚本编程
  14. 电工电子技术基础----multisim7使用及实验过程
  15. 微软bi报表服务器,什么是 Power BI 报表服务器?
  16. C语言课程设计图书馆管理系统
  17. java 红包算法_JAVA实现拼手气红包算法
  18. 微信小程序小技巧系列《一》幻灯片,tab导航切换
  19. 学习Linux七(Linux必学60个命令之【系统管理】)
  20. 众昂矿业:萤石需求异军突起

热门文章

  1. 直观判断图像是否可以被实时处理
  2. 使用模板库的几个注意点
  3. html5手机端设置date,H5 input[type='date'] 优化 pc端和移动端的使用
  4. Innodb中MySQL如何快速删除2T的大表
  5. 【spring data jpa】spring data jpa 中的update 更新字段,如果原字段值为null不处理,不为null则在原来的值上加一段字符串...
  6. Zabbix 3.0 部署监控 [三]
  7. ORACLE一致读与ORA-01555
  8. 与IO相关的等待事件troubleshooting-系列9
  9. 电子产品的磨砂膜和镜面膜的选择
  10. springboot整合flink