最后,我们研究第三个问题,参数估计问题。也即是给定一个观察序列O=O1O2O3...OT,如何根据最大似然估计来求模型的参数值?即如何调节模型μ=(S,K,A,B,π)的参数,使得P(O∣μ)最大?
最大似然估计
模型的参数是指构成μ的πi,aij,bj(k)。最大似然估计方法可以作为HMM参数估计的一种选择。如果产生观察序列O的状态序列Q=q1q2...qT已知,根据最大似然估计,HMM的参数可以通过如下公式计算:
πiˉ=δ(q1,si)
aijˉ=Q中所有从状态qi转移到另一状态(包括qj本身)的次数Q中从状态qi转移到qj的次数=∑t=1T−1δ(qt,si)∑t=1T−1δ(qt,si)×δ(qt+1,sj)
bj(k)ˉ=Q中到达qj次数Q中从状态qj输出到符号νk的次数=∑t=1Tδ(qt,sj)∑t=1Tδ(qt,sj)×δ(Ot,νk)
其中,δ(x,y)为克罗奈克函数,当x=y时,δ(x,y)=1;否则δ(x,y)=0。νk是HMM输出符号集中的第k个符号。
但是在实际中,由于HMM中的状态序列Q是观察不到的(隐变量),因此,这种最大似然估计的方法不可行。
期望最大化(EM)
期望最大化(EM)算法可以用于含有隐变量的统计模型的参数最大似然估计。其基本思想是,初始化时随机地给模型的参数赋值,该赋值遵循模型对参数的限制,例如,从某一状态出发的所有转移概率的和为1。给模型的参数赋初值以后,得到模型μ0,然后,根据μ0可以得到模型中隐变量的期望值。例如,从μ0得到某一状态转移到另一状态的期望次数,用期望次数来替代最大似然中的实际次数,这样可以得到模型参数的新估计值,由此得到新的模型μ1。从μ1又可以得到模型中隐变量的期望值,然后重新估计模型的参数,执行这个迭代过程,直到参数收敛于最大似然估计值。
前向后向算法可以用于具体实现这种EM算法。
给定HMM的参数μ和观察序列O=O1O2O3...OT,在时间t的状态是si,时间t+1的状态是sj的概率ξt(i,j)=P(O∣μ)P(qt=si,qt+1=sj,O∣μ)=P(O∣μ)αt(i)aijbj(Ot+1)βt+1(i)=∑i=1N∑j=1Nαt(i)aijbj(Ot+1)βt+1(i)αt(i)aijbj(Ot+1)βt+1(i)
下图给出了前向变量αt(i)、后向变量βt+1(j)与概率ξt(i,j)之间的关系。

给定HMM的μ参数和观察序列O=O1O2O3...OT,在时间t位于状态si的概率γt(i)为:
γt(i)=j=1∑Nξt(i,j)
由此,μ的参数可以由下面的公式重新估计:
πiˉ=P(q1=si∣O,μ)=γ1(i)
aijˉ=Q中所有从状态qi转移到另一状态(包括qj本身)的期望次数Q中从状态qi转移到qj的期望次数=∑t=1T−1γt(i)∑t=1T−1ξt(i,j)
bj(k)ˉ=Q中到达qj的期望次数Q中从状态qj输出到符号νk的期望次数=∑t=1Tγt(j)∑t=1Tγt(j)×δ(Ot,νk)
根据上述思路,给出前向后向算法:
(1)初始化,随机地给参数πi,aij,bj(k)赋值,使其满足如下约束条件:
i=1∑Nπi=1j=1∑Naij=1,1≤i≤Nk=1∑Mbj(k)=1,1≤j≤M
由此得到模型μ0,令i=0,执行下面的EM估计。
(2)EM计算:
E步骤:由模型μi,根据
ξt(i,j)=∑i=1N∑j=1Nαt(i)aijbj(Ot+1)βt+1(i)αt(i)aijbj(Ot+1)βt+1(i)
和γt(i)=j=1∑Nξt(i,j)计算出期望值ξt(i,j)和γt(i);
M-步骤:用E步骤得到的期望值,根据
πiˉ=P(q1=si∣O,μ)=γ1(i)
aijˉ=∑t=1T−1γt(i)∑t=1T−1ξt(i,j)
bj(k)ˉ=∑t=1Tγt(j)∑t=1Tγt(j)×δ(Ot,νk)
重新估计参数πi,aij,bj(k)的值,得到模型μi+1;
(3)循环计算:
令i=i+1,重复执行EM计算,直到πi,aij,bj(k)收敛。
HMM在自然语言处理研究中有着非常广泛的应用。除了上述讨论的理论问题外,在实际应用中还有若干实现技术上的问题需要注意。例如多个概率连乘引起的浮点数下溢问题。在维特比算法中只涉及到乘法运算和求最大值问题,因此可以对概率相乘的算式取对数运算,使得乘法运算变成加法运算,这样一方面避免了浮点数下溢的问题,另一方面,提高了运算速度。在前向后向算法中,也经常采用如下对数运算的方法判断参数πi,aij,bj(k)是否收敛:
∣logP(O∣μi+1)−logP(O∣μi)∣<ϵ
其中,ϵ为一个足够小的实数值。