版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41679411/article/details/81026545
HMM在NLP中的应用
一、HMM基本概念的介绍
以一个例子介绍HMM,可以避开抽象的定义:
例如:N个袋子,每个袋子中有M种不同颜色的球。一实验员根据某一概率分布选择一个袋子,然后根据袋子中不同颜色球的概率分布随机取出一个球,并报告该球的颜色。对局外人:可观察的过程是不同颜色球的序列,而袋子的序列是不可观察的。每只袋子对应HMM中的一个状态;球的颜色对应于HMM中状态的输出。
状态转移概率矩阵为
A=aij
,
aij
为实验员从一只袋子(状态
si
) 转向另一只袋子(状态
Sj
) 取球的概率。
从状态
Sj
观察到某一特定符号
vk
的概率分布矩阵为:
B=bj(k)
其中,
bj(k)
为实验员从第
j
个袋子中取出第
k
种颜色的球的概率。
为了方便,一般将HMM记为:
μ=(A,B,π)
HMM的三个问题:
- 在给定模型
μ=(A,B,π)
和观察序列
O=O1,O2…OT
的情况下,怎样快速计算概率
p(O|μ)
?
- 在给定模型
μ=(A,B,π)
和观察序列
O=O1,O2…OT
的情况下,如何选择在一定意义下“最优”的状态序列
Q=q1,q2,...,qT
,使得该状态序列“最好地解释”观察序列?
- 给定一个观察序列
O=O1,O2,…,OT
,如何根据最大似然估计来求模型的参数值?即如何调节模型的参数,使得
p(O|μ)
最大?
二、 HMM第一个问题的求解
p(O|μ)
可以由如下式计算
p(O|μ)=∑Qp(O,Q|μ)=∑Qp(Q|μ)∗p(O|Q,μ)(6)
其中
P(Q|μ)=πq1∗aq1q2∗aq2q3∗...∗aqT−1qT(7)
p(O|Q,μ)=bq1(O1)∗bq2(O2)∗...∗bqT(OT)(3)
相当于对所有Q的可能性的求和。
遍历计算复杂度太高,利用动态规划降低复杂度。
αt(i)=p(O1O2...Ot,qt=Si|μ)
如果可以高效地计算
αt(i)
,就可以高效地求得
P(O|μ)
事实上有如下递推公式:
αt+1(j)=[∑Ni=1αt(i)aij]∗bj(Ot+1)
三、 HMM第二个问题的求解
问题二的本质是如何发现最优状态序列去最好地解释观察序列
一种解释是:状态序列中每个状态都单独地具有概率,对于每个时刻t,寻找
qt
使得
γt(i)=p(qt=Si|O,μ)最大
另一种解释:在给定模型
μ
和观察序列
O
的条件下求概率最大的状态序列:
Q~=argmaxp(Q|O,μ)(10)
Viterbi算法:动态规划最优状态序列
定义:Viterbi 变量是在时间
δt(i)
时,模型沿着某一条路径到达
Si
,输出观察序列
O=O1O2…Ot
的最大概率为:
δt(i)=q1,q2,...,qt−1maxp(q1,q2,...,qt=Si,O1O2...Ot|μ)(11)
递归算法:
δt+1(i)=maxj[δt(j)⋅aji]⋅bi(Ot+1)
解释一下这个式子:
模型沿着某一条路径到达
Si+1
,输出观察序列
O=O1O2...Ot+1
的最大概率为在t时刻到达状态中选取使此式概率最大的j,因此最大概率之间构成递推关系,我们可以用Viterbi算法去求解。
四、HMM第三个问题的求解:
参数学习
给定一个观察序列
O=O1O2…OT
,如何根据最大似然估计来求模型的参数值?或者说如何调节模型
μ
的参数,使得
p(O|μ)
最大?即估计模型中的
πi,aij,bj(k)
使得观察序列O的概率
p(O|μ)
最大。
即通过观察序列去重建模型中的参数
如果产生观察序列
O
的状态
Q=q1q2…qT
已知(即存在大量标注的样本),可以用最大似然估计来计算
μ
的参数:
各估计如下:
p~i=δ(q1,Si)
a~ij=Q中从状态qi转移到qj的次数Q中所有从状态qi转移到另一状态(包括qj自身)的总数=∑T−1t=1δ(qt,Si)∗δ(qt+1,Sj)∑T−1t=1δ(qt,Si)
类似的:
b~j(k)=Q中从状态qj输出符号Q到达qj地总次数=∑T−1t=1δ(qt,Sj)∗δ(Ot,vk)∑Tt=1δ(qt,Si)
其中,
Vk
是模型输出符号集中地第k个符号。