HMM(隐马尔可夫模型)

----flag: 几个月之前写的了,有些表述不是很清楚, 周末再重新写一遍----

这两天一直想弄清楚HMM相关的知识,包括HMM概念,是一个网络结构还是一种算法? 其中相关的算法前向后向算法、viterbi算法等具体有什么关系? 虽然现在语音识别HMM 用的不是特别多,但是这几个问题一只困扰着我,把之前零星的看过的一下理论,今天决定系统的整理并用python实现一下HMM解决的三个问题。

文章可能有点长, 慢慢往下看, 每一步都要弄懂。

如果是做语音识别的话,这里的隐含状态就是音素(也有可能是transition-id, 每个状态表示一个音素,transition-id是比音素更小的一个单位),这里的可观察状态就是特征序列

隐马尔可夫模型的起源:

这个问题是昨天从《数学之美》中了解到的,感觉脉络清晰,看完之后有种醍醐灌顶的感觉, 感谢作者。拿书中的一个例子来说一下: 

假设北京每天的最高气温为s1, s2, s3, ... , st , 第一这里的每个状态st都是随机的,第二任一状态st的取值都与前面的状态有关。 这时这个问题就有了两个维度的不确定性, 第一个就是当前的温度是不确定的, 第二个就是之前预测的最高气温也是不确定的, 由不确定的去预测当前的这个问题就变得复杂了。 所以马尔科夫为了简化这个问题, 提出了一个假设: 随机过程中的各个状态st的概率分布,仅与前一个状态st-1有关,即P(st|s1,s2,s3,...,st-1) = P(st | st-1). 当然这种假设未必适合所有的应用,但至少对以前很多不好解决的问题给出了近似解。 这个假设就是 马尔科夫假设。 

符合马尔科夫假设的随机过程称为马尔科夫过程,或者是马尔科夫链。 

M1 --(1.0)--> M2 --(0.6)-->M3--(0.3)-->M4, 其中M2--(0.4)-->M4,  M3--(0.7)-->M3.

在上边这个链中(有点简陋,自己在纸上画一下比较直观),M1, M2, M3, M4表示4个状态, 边表示可能的状态转换, 边上的权值表示转移概率。

用数学符号表示,比如: P(M2|M1)= 1.0,     P(M3 | M2) = 0.6

可以把这个马尔科夫链想象成一个产生随机状态的机器, 比如产生了T个状态, 统计M2出现的概率,  统计M2->M3的概率, 根据条件概率公式: 

P(M3 | M2)  =  P(M2, M3)  / P(M2), 然后就得到了M2 - > M3 的转移概率,按照此方法,可以统计出所有的转移概率,并得到马尔科夫链。这时候这个模型是一个二元组

 入 = (PI, A), 其中PI表示初始的概率,  比如 P(M1) P(M2),  A表示转移概率矩阵, 比如P(M3 | M2)等。


通过以上的叙述,得到了马尔科夫链,那么隐马尔科夫模型是什么呢? 

HMM是马尔科夫链的一个扩展: 每一个时刻的状态都是不可见的, 没法观测到一个s1, s2, ..., st的 状态,  但是HMM在每个时刻都会输出一个符号ot, 而且ot仅与st相关, 这个称为独立输出假设。 So, HMM是基于马尔科夫假设和独立输出假设。

我们由此可以计算出, 在某个特定的状态序列s1 , s2, .., st 产生o1, o2, ..., ot的概率: 根据乘法公式展开: 

P(s1 , s2, .., st , o1, o2, ..., ot) = P(o1, o2, ..., ot | s1 , s2, .., st) * P(s1 , s2, .., st)  =  P(ot | st) * P(st |  st-1) , t从1 到 T 连乘,  其中在语音识别中P(s1 , s2, .., st) 称为语言模型, P(o1, o2, ..., ot | s1 , s2, .., st) 称为声学模型。

到此为止基本的概念就介绍完了, 不难发现,HMM 其实只是一种结构模型,由一系列的参数来构成  入 = (PI,  A , B),其中PI 是初始的状态概率, A是状态之间的转移概率矩阵, B是在某一状态下到观测值之间的生成概率矩阵, 并不涉及到任何的算法和应用层面 , 下面我们着重结合代码来实现一下HMM能解决的三个重要的问题:

1、 给定一个模型,如何计算出某个特定的输出序列的概率

2、 给定一个模型和某个特定的输出序列,如何找到最可能产生这个输出的状态序列

3、 给定足够的观测数据, 如何估计出HMM的参数(即转移概率矩阵和省城概率矩阵)

对于三个问题的解决以及代码实现参考资料: 

《数学之美》: chapter5 and chapter 26

  博客: http://blog.csdn.net/daringpig/article/details/8072794

  源码: 

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值