隐马尔科夫模型--HMM和Viterbi算法

马儿可夫模型:

一阶马尔科夫模型 = 二原语言模型

n阶马尔科夫模型 = n+1原语言模型

马尔科夫模型:每个状态只依赖之前有限个状态,马尔科夫模型是一条拉链,类似于一句话 ,可以切出多句词。

如 由  NBA 可以联想到篮球

马尔科夫模型有三类重要参数:

     1.状态:存在多少个可选余地。比如一句话包含5个词语,则选择余地只有5个

     2.初始概率:任何一个词都有可能出现在句首,但是概率不一样。给定一个词,求初始概率 , 该词 / 总词数 。 但是必须在句首

表达式: πk= P(S1 = k) k = 1,2,3,....m 

当第一个状态S1等于某一个词汇(k)的时候,它的概率是多少

     3.状态转移概率:  

那么转移概率如何计算:

P(B|A)  :当A出现的概率下出现B的概率  

P(B|A) = P(A,B) / P(A)   (A,B 的联合概率 / 出现A的概率)

x x  x x x x x  A B  x x x x x A B x x x A C x x x

P(B|A) = 2/3   

最大似然法:

--状态转移概率a (k,l)

 P(St+1 = L | St = K) : 当小t时间出现K 下一个时间出现 L 的概率是多少  ; L紧跟K出现的次数 / K出现的总次数

--初始概率

P(Sl = K) ;以K位于句首出现的概率   K作为序列开始的次数 / 观测序列总数

隐马尔科夫模型:

马尔科夫模型是对一个序列进行建模,但是我们有时候需要对两个序列进行建模,这就是隐马尔科夫模型。

初始概率:每一个状态作为起始有一个概率。

状态转移概率:由一个状态到另一个状态的转移概率。

发射概率:如在语音识别中,这个汉字发出zhen的概率有多大。  在词性标注中:是一个状态到一个词语的概率,

由 <B,n>  到 出现”广“的概率 ,或是出现“负”的概率  。

案例:语音识别,词性标志

只有发了这三个音之后,通过系统才知道背后的三个汉字。

O 观察序列 (已知)

S 状态序列 (未知)

每一个汉字背后都有一个状态,第一部分是位置,第二部分词性<位置,词性>  位置BMES

<B,n>开头的,下一个<E,n>的概率,或是下一个是<M,n>的概率

HMM生成过程:先生成第一个状态,然后依次由当前状态生成下一个状态,最后每一个状态发射出一个观测值。

隐马尔科夫  模型 核心:给隐马尔科夫模型一堆汉字,最后给我一堆切词方案,在这里面找一个概率最大的切分方案    给我即可。

假设M个状态,N个观测

1.初始概率: M个 = 2000

2.转移概率: M*M = 400W

3.发射概率 : M*N  = 120

观测都是汉字,常见汉字(2000个)

2000 * 2000 = 400W

状态有2000个

位置BMES 4个,词性30个左右

目标:P(S|O) = P(S,O)/P(O)

P(O) =1 当做一个语音识别 ,发出了一句语音,已经固定下来,就是1

即:P(S|O) = P(S,O) 计算联合概率。

===Viterbi算法===

Viterbi 核心:动态规划:在t+1位置重用t的结果

思想:第一列的π会的到一个初始概率得到第一列第二个值概率最大,第二列不同的状态 的最优路径是不一样的,得到3种最优路径,比如说第二列某一个值往前找到第一列最优路径只有一条,那么3个值就只有3钟最优路径,这时候第二列第一个值找到了自己的最优路径,为第一列第二个值,第二列第一个本来路径最优,刚好最三列连接上第二列第一个,得到最优路径。

最优路径:这个路径上所有的状态就是最后的结果,若是拿到这个结果,则这个句子的分词就出来啦。

前向概率解决问题;当一个状态为K的前提下,计算t时刻为k的观测序列的概率

后向概率解决问题:当t时刻状态为k的前提下,计算t+1时刻到T时刻观测序列的概率。

猜你喜欢

转载自blog.csdn.net/u013953226/article/details/81133433