隐马尔可夫模型-HMM-简述-2-评估-解码-学习

1. HMM三个典型问题的定义

    三个问题的共同点就是已知模型的一部分,求另一部分,不同点就是已知的部分和要求的部分不一样。
    评估:已知模型参数,计算某一特定输出序列的概率。通常使用forward算法解决。
    解码:已知模型参数,寻找最可能的能产生某一特定输出序列的隐含状态的序列。通常使用Viterbi算法解决。
    学习:已知输出序列,寻找最可能的状态转移以及输出概率。通常使用Baum-Welch算法以及Reversed Viterbi算法解决。

2. 词性标注与HMM三个典型问题

    在词性标注问题中,已知单词序列,需要给出对应的词性序列。单词序列是可观察的,因此单词作为观察状态,词性作为隐藏状态。
    评估:根据给定模型,求指定单词序列的概率,这在词性标注中没什么意义。
    解码:根据给定模型和单词序列,寻找概率最大的词性序列,在词性标注中,这属于预测阶段。
    学习:根据单词序列和词性序列,寻找最可能的HMM参数(A,B),在词性标注中,这属于学习阶段。

3. 评估-向前算法-举例
    假设:一共M种天气,N种活动,HMM参数为A[M][M], B[M][N], P[M]。 指定的观察序列为int O[LEN]; 
3.1 穷举法
    分别计算每种可能的隐藏序列下的,指定观察序列的概率值,然后求和。这样就是M^LEN种不同的隐藏序列,太费时。
3.2 向前算法

    实际上,穷举法中有很多重复计算,向前算法就是利用已有的结果,减少重复计算。
    定义:P[LEN][M],其中P[i][j]表示从第0天到第i天,满足观察序列,且第i天隐藏状态为Sj的所有可能的隐藏序列的概率之和。最终所求结果为P[LEN-1][0]+...+P[LEN-1][M-1],即最后一天,所有隐藏状态下,分别满足观察序列的概率值之和。

P[0][j] = P[j] * B[j][O[0]];   
// j=0,1,2,...,M-1, 第一天计算,状态的初始概率,乘上隐藏状态到观察状态的条件概率。
P[i][j] = { P[i-1][0]*A[0][i] + P[i-1][1]*A[1][i] + ... + P[i-1][M-1]*A[M-1][i] } * B[j][O[i]]; 
//
i>1, j=0,1,2,...,M-1, 第一天以后的计算,首先从前一天的每个状态,转移到当前状态的概率求和,然后乘上隐藏状态到观察状态的条件概率。

     复杂度:第一天是M次乘法,从第二天开始,每天都是M^2次乘法,T=O(LEN * M^2)。

4. 解码-维特比算法-距离

    假设:一共M种天气,N种活动,HMM参数为A[M][M], B[M][N], P[M]。 指定的观察序列为int O[LEN]; 
4.1 穷举法
    首先回忆上面评估算法中,要算的实际上是M^LEN不同隐藏序列满足观察序列的概率和,这里要计算的是M^LEN不同隐藏序列满足观察序列的概率的最大值。相同点:因子都是相同的,不同点:评估算的是和,解码算的是最大值。
4.2 维特比算法
    定义:Max[LEN][M],其中P[i][j]表示从第0天到第i天,满足观察序列,且第i天隐藏状态为Sj的所有可能的隐藏序列的概率的最大值。Path[LEN][M],其中Prev[i][j]=prev,其中Max[i][j]=Max[i][prev]*A[prev][j]; 

Max[0][j] =  P[j] * B[j][O[0]];   
// j=0,1,2,...,M-1, 第一天计算,状态的初始概率,乘上隐藏状态到观察状态的条件概率。
Path[0][j] = -1;
// 第一天的前面的路径为空,用-1代表。
Max[i][j] = Max{P[i-1][k]*A[k][i]} * B[j][O[i]]; 
// i>1, j=0,1,2,...,M-1, k=0,1,2,...,M-1, 第一天以后的计算,首先从前一天的每个状态,转移到当前状态的概率的最大值,然后乘上隐藏状态到观察状态的条件概率。
Path[i][j] = prev; 
//其中prev即为Max{P[i-1][k]*A[k][i]}中对应的k值。

    时间复杂度:与向前算法类似,只不过求和变成了取最大值,此外多记录一个Path数组,也是O(LEN * M^2)

5. 学习

    学习问题,是根据若干观察序列和对应的隐藏序列样本,得到HMM参数的过程。常用的算法为Baum-Welch算法,也称为向前向后算法。这个算法是EM算法的一个特例,首先需要理解EM算法。由于EM算法一时半会我还搞不清楚,就先写到这里,日后单独补一下EM算法,和向前向后算法。

6. 重点

    向前算法:已知模型,计算指定观察序列的概率,要求的是每种隐藏序列的概率的和。
    维特比算法:已知模型,计算使得指定观察序列概率最大的隐藏序列,要求的是每种隐藏序列里面的一个序列。
    计算过程都是一样的,只不过一个是计算值的和,另一个使计算最大值+路径。

7. 参考

    HMM中的前向法(Forward Agorithm)   
    http://www.suzker.cn/computervision/forward-agorithm-for-hmm.html
    HMM中的维特比解码(Viterbi Agorithm)   
    http://www.suzker.cn/computervision/viterbi-algorithm-for-hmm.html
    我爱自然语言处理中的若干篇文章   
    http://www.52nlp.cn/category/hidden-markov-model

posted @ 2011-08-21 16:48  xiaodongrush  阅读(1374)  评论(0编辑  收藏  举报