HMM算法详解

  • Post author:
  • Post category:其他




一、HMM模型的基本元素



1、 HMM的五个基本元素

HMM中,有5个基本元素:{I,O,A,B,π},我结合序列标志任务对这5个基本元素做一个介绍:

(1)I:状态序列。在这里,是指每一个词语背后的标注。

(2)O:观测序列。在这里,是指每一个词语本身。

(3)A:状态转移概率矩阵。在这里,是指某一个标注转移到下一个标注的概率。

(4)B:观测概率矩阵,也就是发射概率矩阵。在这里,是指在某个标注下,生成某个词的概率。

(5)π:初始概率矩阵。在这里,是指每一个标注的初始化概率。

其中:




I

=

(

i

1

,

i

2

,

i

3

.

.

.

i

N

)

I = ({i_1,i_2,i_3…i_N})






I




=








(




i










1


















,





i










2


















,





i










3


















.


.


.



i










N



















)





状态序列




O

=

(

o

1

,

o

2

,

o

3

.

.

.

o

N

)

O = ({o_1,o_2,o_3…o_N})






O




=








(




o










1


















,





o










2


















,





o










3


















.


.


.



o










N



















)





观测序列




A

=

[

a

i

j

]

N

N

A = [a_{ij}]_{N*N}






A




=








[



a











i


j




















]











N





N






















状态转移概率矩阵




B

=

[

b

j

(

k

)

]

N

N

B = [b_j(k)]_{N*N}






B




=








[



b










j


















(


k


)



]











N





N






















观测概率矩阵

π 初始状态概率向量



2、HMM模型

在这里插入图片描述

模型:λ = (A,B,π)

A,B,π为隐马尔可夫模型的三个要素

这三个元素都是通过统计得到的,这三个值就是模型的参数,得到这三个值的过程就是模型训练的过程,所以说HMM算法是比较简单的算法。模型已经知道了,可以认为各个状态的全连接路径已经知道了,给个观测序列,通过veterbi算法求解所有路径中的最优路径。



3、HMM模型的两个假设
  • (1)齐次马尔科夫假设(又叫一阶马尔科夫假设)

    隐藏的马尔科夫链在任意时刻t的状态只依赖于前一时刻的状态,与其他时刻状态及观测状态无关。




    P

    (

    i

    t

    i

    t

    1

    ,

    o

    t

    1

    ,

    .

    .

    .

    ,

    i

    1

    )

    =

    P

    (

    i

    t

    i

    t

    1

    )

    P(i_t|i_{t-1},o_{t-1},…,i_1) = P(i_t|i_{t-1})






    P


    (



    i










    t






















    i











    t





    1



















    ,





    o











    t





    1



















    ,




    .


    .


    .


    ,





    i










    1


















    )




    =








    P


    (



    i










    t






















    i











    t





    1



















    )




  • (2)观测独立假设

    任意时刻的观测状态只依赖于该时刻的马尔科夫链的状态,与其他时刻的观测状态无关。

而以上的这些元素,都是可以从训练语料集中统计出来的。最后,我们根据这些统计值,应用维特比(viterbi)算法,就可以算出词语序列背后的标注序列了。



二、隐马尔可夫模型有三种应用场景

我们做命名实体识别只用到其中的一种——求观察序列的背后最可能的标注序列。

最后,来说下HMM解决的三个问题:



1、Evaluation(概率计算问题)

已知模型参数 λ= (A, B, π),计算某个观测序列发生的概率,即求P(O|λ)



2、Learning(学习问题)

给定观测序列



O

=

(

o

1

,

o

2

,

.

.

.

,

o

n

)

O=(o_1,o_2,…,o_n)






O




=








(



o










1


















,





o










2


















,




.


.


.


,





o










n


















)





,如何调整模型参数 λ=(π, A, B), 使得P(O|λ)最大?,这个就是求模型的算法



3、Decoding(预测问题或者叫解码问题) 最常用

给定观测序列O和模型 λ,求最有可能的状态序列S(s1,s2,…st+1)。

例如:通过实体标注和训练,我们可以得到模型λ,现在给定了一个观测序列=我在凤凰金融工作,求最有可能的命名实体有哪些,想找到对应的状态序列S=(我,在,凤凰金融,工作)。



三、求模型λ:解决第二个问题

HMM是一种生成模型,所以求的是联合概率

注意:我们平时所说的,求模型指的是求目标函数,例如在线性回归中我们的目标函数为$h(λ)=λ_1X+λ_2$,求目标函数只需要求得参数λ,所以平时我们说求模型就是求参数。




P

(

X

,

Y

)

P(X,Y)






P


(


X


,




Y


)






四、维特比算法(Viterbi):解决第三个问题

维特比算法主要用动态规划来求解HMM的预测问题:一直模型和观测序列,求最可能的状态序列

假如状态序列为:



x

1

,

x

2

,

x

3

.

.

.

x

N

x_1,x_2,x_3 … x_N







x










1


















,





x










2


















,





x










3


















.


.


.



x










N






















对应观测序列为:



y

1

,

y

3

,

y

3

.

.

.

y

N

y_1,y_3,y_3 … y_N







y










1


















,





y










3


















,





y










3


















.


.


.



y










N






















那么我们的问题就转化为:在盲打时候已知输入序列



y

1

,

y

3

,

y

3

.

.

.

y

N

y_1,y_3,y_3 … y_N







y










1


















,





y










3


















,





y










3


















.


.


.



y










N





















,对应的最可能汉字



x

1

,

x

2

,

x

3

.

.

.

x

N

x_1,x_2,x_3 … x_N







x










1


















,





x










2


















,





x










3


















.


.


.



x










N





















。求最可能的汉字序列是什么?

公式:




x

1

,

x

2

,

x

3

.

.

.

x

N

=

A

r

g

M

a

x

P

(

x

1

,

x

2

,

x

3

.

.

.

x

N

y

1

,

y

3

,

y

3

.

.

.

y

N

)

=

A

r

g

M

a

x

i

=

1

N

P

(

y

i

x

i

)

P

(

x

i

x

i

1

)

x_1,x_2,x_3 … x_N = ArgMaxP(x_1,x_2,x_3 … x_N|y_1,y_3,y_3 … y_N) = ArgMax \prod_{i=1}^N P(y_i|x_i)*P(x_i|x_{i-1})







x










1


















,





x










2


















,





x










3


















.


.


.



x










N




















=








A


r


g


M


a


x


P


(



x










1


















,





x










2


















,





x










3


















.


.


.



x










N






















y










1


















,





y










3


















,





y










3


















.


.


.



y










N


















)




=








A


r


g


M


a


x

















i


=


1









N




















P


(



y










i






















x










i


















)













P


(



x










i






















x











i





1



















)




其中公式



A

r

g

M

a

x

i

=

1

N

P

(

y

i

x

i

)

P

(

x

i

x

i

1

)

ArgMax \prod_{i=1}^N P(y_i|x_i)*P(x_i|x_{i-1})






A


r


g


M


a


x

















i


=


1









N




















P


(



y










i






















x










i


















)













P


(



x










i






















x











i





1



















)





主要通过贝叶斯公式变换得来

我们知道贝叶斯公式为:



P

(

A

B

)

=

P

(

B

A

)

P

(

A

)

P

(

B

)

P(A|B) = \frac {P(B|A)*P(A)}{P(B)}






P


(


A





B


)




=




















P


(


B


)
















P


(


B





A


)





P


(


A


)

























那么



P

(

x

y

)

=

P

(

y

x

)

P

(

x

)

P

(

y

)

P(x|y) = \frac {P(y|x)*P(x)}{P(y)}






P


(


x





y


)




=




















P


(


y


)
















P


(


y





x


)





P


(


x


)
























,其中P(y)为已知常数,其中P(x)实际为



P

(

x

t

x

t

1

)

P(x_t|x_{t-1})






P


(



x










t






















x











t





1



















)





,根据马尔科夫假设当前时刻假设之和前一时刻相关。

例如,输入观测序列:

我 爱 中 国

O O O B

O B O I

O O B I

B O I B

也就是求的第三行是最优路径:



四、维特比算法(Viterbi)

注意:viberbi算法计算过程中计算的是两个点之间的最短路径,不是计算的两个层之间的最短路径


1.性质

如果概率最大的路径p(或者说最短路径)经过某个点,比如途中的a,那么这条路径上的起始点S到a的这段子路径Q,一定是S到X22之间的最短路径。否则,用S到a的最短路径R替代Q,便构成一条比P更短的路径,这显然是矛盾的。证明了满足最优性原理。



2.算法

假如你从S和E之间找一条最短的路径,除了遍历完所有路径,还有什么更好的方法?

在这里插入图片描述

实际上在所有路径中肯定有一条最短路径:

在这里插入图片描述

我们开始从头一步一步求解:

(1)首先起点是S,从S到A列的路径有三种可能:S-A1、S-A2、S-A3,如下图:

在这里插入图片描述

我们不能武断地说S-A1、S-A2、S-A3中的哪一段必定是全局最短路径中的一部分,目前为止任何一段都有可能是全局最短路径的备选项。

(2).然后开始第二层

<1>我们先从第二层的第一个节点开始:

在这里插入图片描述

如上图,经过B1的所有路径只有3条:

S-A1-B1

S-A2-B1

S-A3-B1

如果说最终的第二层的节点是从B1经过的话,肯定要从这三条路径中选择一条最短的路径,那么其他的两条可以删除了。

<2>然后我们开始了第二层的第二个节点:

在这里插入图片描述

同理,如上图,经过B2的路径有3条:

S-A1-B2

S-A2-B2

S-A3-B2

如果说最终的第二层的节点是从B2经过的话,肯定要从这三条路径中选择一条最短的路径,那么其他的两条可以删除了。

<3>然后我们开始了第二层的第三个个节点:

在这里插入图片描述

同理,如上图,经过B3的路径也有3条:

S-A1-B3

S-A2-B3

S-A3-B3

如果说最终的第二层的节点是从B3经过的话,肯定要从这三条路径中选择一条最短的路径,那么其他的两条可以删除了。

<4>所有第二层的阶段遍历完了之后,剩下三条路径了。

在这里插入图片描述

我们还没有足够的信息判断哪一条一定是全局最短路径的子路径。

(3)然后我们在第三层继续这个算法:

在这里插入图片描述

我们还没有足够的信息判断哪一条一定是全局最短路径的子路径。

(4)然后我们在最后一层继续这个算法:

在这里插入图片描述

E点已经是终点了,我们稍微对比一下这三条路径的总长度就能知道哪条是最短路径了。

参考文章

https://clyyuanzi.gitbooks.io/julymlnotes/content/hmm.html

http://www.52nlp.cn/category/hidden-markov-model

https://www.zhihu.com/question/35866596/answer/236886066

http://www.hankcs.com/ml/conditional-random-field.html



版权声明:本文为woshiliulei0原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。