HMM隐马尔可夫模型入门
今天学习隐马尔可夫模型,找到了非常一个通俗易懂的介绍,链接如下:
http://www.52nlp.cn/hmm学习最佳范例全文pdf文档及相关文章索引
这是09年的发文了,是作者根据英国利兹大学的网站内容翻译的系列文章,点击量很高,翻译的也确实不错,还有部分代码。我觉得除了有些公式符号不太明白,文字内容应该是都大概看懂了。但是这种以后还是会反复看才会明白得更清楚吧。
下面这个链接的内容出自李航老师的书,例子也非常容易懂。惭愧,早就下载了却没有去看,看见别人总结了才发现自己也有资源~~~
李航老师关于HMM的小例子
下面摘录一些内容:(0基础的不要看,直接去看原文)
HMM的5要素:N,M,pi,A,B
分清楚什么是观察状态序列,什么是隐藏状态序列
typedef struct
{
int N; /* 隐藏状态的数目;Q={1,2,…,N} /
int M; / 观察符号的数目; V={1,2,…,M}*/
double *A; / 状态转移矩阵A[1…N][1…N]. a[i][j] 是从t时刻状态i到t+1时刻状态j的转移概率 /
double *B; / 混淆矩阵B[1…N][1…M]. b[j][k]在状态j时观察到符合k的概率。/
double pi; / 初始向量pi[1…N],pi[i] 是初始状态概率分布 */
} HMM;
HMM的三大问题:
- 评估:对于一个给定的隐马尔科夫模型其生成一个给定的观察序列的概率是多少。(
所有可能的概率相加的问题,局部概率,递归解决)。前向算法可以有效的解决此问题。 - 解码:什么样的隐藏(底层)状态序列最有可能生成一个给定的观察序列。
(在所有可能的概率中求最大概率问题,也是局部概率,递归解决)。维特比算法可以有效的解决此问题。
(这些局部概率与前向算法中所计算的局部概率是不同的,因为它们表示的是时刻t时到达某个状态最可能的路径的概率,而不是所有路径概率的总和。) - 学习:对于一个给定的观察序列样本,什么样的模型最可能生成该序列——也就是说,该模型的参数是什么。(HMM模型的参数估计问题)这个问题可以通过使用前向-后向算法解决。(这个算法是EM算法的特例)
关于维特比算法,需要着重强调的一点是它不是简单的对于某个给定的时间点选择最可能的隐藏状态,而是基于全局序列做决策——因此,如果在观察序列中有一个“非寻常”的事件发生,对于维特比算法的结果也影响不大。
这在语音处理中是特别有价值的,譬如当某个单词发音的一个中间音素出现失真或丢失的情况时,该单词也可以被识别出来。
下面这个链接公式太多了,只看例子即可:
用一个抛硬币的小例子来解释EM算法中的E
下面的代码看上去很厉害的样子,应该是大牛自己写的,待我研究一下:
HMM的一个python代码实现
待补充:
第一个网页中,有很多在自然语言处理中使用HMM的例子,但是没有在语音识别中使用HMM的例子,待我慢慢找来一些吧~~~