博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
隐马尔可夫模型-HMM-简述-2-评估-解码-学习
阅读量:5934 次
发布时间:2019-06-19

本文共 2176 字,大约阅读时间需要 7 分钟。

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)   

   
    HMM中的维特比解码(Viterbi Agorithm)   
   
    我爱自然语言处理中的若干篇文章   
   

转载地址:http://dujtx.baihongyu.com/

你可能感兴趣的文章
清理mysql-bin日志
查看>>
我们如何了解技术的真相?
查看>>
Rails开发细节《八》Rails应用的安全
查看>>
ruby笔记《二》类定义
查看>>
Javascript实例:Select的OnChange()事件
查看>>
Spring中依赖注入的四种方式
查看>>
shell脚本编程
查看>>
C# 设置PPT的表格样式
查看>>
VS2017报443错误,不能拉取码云代码的解决办法
查看>>
python文件操作
查看>>
windowsxp激活办法(SP1 SP2 SP3)
查看>>
存储过程语法及实例
查看>>
PHP书籍推荐
查看>>
我的友情链接
查看>>
mint 安装jdk
查看>>
三个boolean值至少两个为ture,则判为true
查看>>
我的网站设计观——重内容轻形式,重内涵轻外表
查看>>
有关php.ini中如何进行安全的设置
查看>>
大数据学习地址
查看>>
Linux 下 安装phpstorm
查看>>