隐含马尔科夫模型(Hidden Markov Model)
公式推导
s1,s2,⋯,sn = Args1,s2,⋯,sn∈S Max P(s1,s2,⋯,sn|o1,o2,⋯,on) ⋯⋯①
注: S 为所有可能的源信息,
o1,o2,⋯,on 是接受到的观测信息我们可以将①式利用贝叶斯公式来间接计算:
P(s1,s2,⋯,sn|o1,o2,⋯,on) = P(o1,o2,⋯,on|s1,s2,⋯,sn)⋅P(s1,s2,⋯,sn)P(o1,o2,⋯,on) = k⋅P(o1,o2,⋯,on|s1,s2,⋯,sn)⋅P(s1,s2,⋯,sn) ⋯⋯②
对于②式我们可以利用隐含马尔科夫模型(Hidden Markov Model)来估计。
这样,有③和④两式就求解了②式
HMM的训练
要利用隐含马尔科夫模型解决实际问题,那么我们必须事先知道它的参数,即要知道由前一个状态 St−1 进入当前状态 St 的概率 P(St|St−1) ,称之为转移概率(Transition Probability),以及每个状态 St 产生相应输出 Ot 的概率 P(Ot|St) ,称之为生成概率(Generation Probability),得到这些参数的过程就是模型的训练
P(Ot|St) = P(Ot, St)P(St) ⋯⋯⑤ P(St|St−1) = P(St−1, St)P(St−1) ⋯⋯⑥
现在如果有足够多的人工标记数据,那么我们可以知道经过状态 St 有多少次记为#( St ),以及经过这个状态而产生的输出 Ot 的次数,就可以知道有多少次#( St, Ot ),那么上式⑤就为,
P(Ot|St) ≈ #(St, Ot)#(St)
而这种数据集均是有标记的,因此为有监督的训练方法(Supervised Training),而对于式⑥我们直接利用统计语言模型 P(ωi|ωi−1) ≈ #(ωi−1, ωi)#(ωi−1) 即可得到
另外,如果我们仅仅通过大量观测到的信号 O1,O2,⋯,On 来计算(估计)模型参数,这种就为无监督的训练方法(Unsupervised Training),而这就要提到鲍姆-韦尔奇算法(Baum-Welch Algorithm)
- 两个不同的HMM可以产生同样的信号
O1,O2,⋯,On
,因此仅仅通过观测信号来推断产生它的HMM,这样就会可能有多个HMM适合,但是总会有一个模型参数
Mθ2
要比另一个
Mθ1
更加可能产生这个观测到的输出,而鲍姆-韦尔奇算法就是找到这个最有可能的参数
Mθ^
- 我们找到一组能够产生输出序列 O1,O2,⋯,On 的一组模型参数,记为 Mθ0
- 由这个初始模型,接着利用Forward-Backward算法得到由某个可能的输入 S1,S2,⋯,Sn∈S 产生 O1,O2,⋯,On 的概率 P(O1,O2,⋯,On|Mθ0) ,以及利用维特比算法(Viterbi Algorithm)得出那个最可能产生这个输出 O1,O2,⋯,On 的状态序列,以及产生 O1,O2,⋯,On 过程中所有可能路径及其概率,这样就可以得到新的模型参数 Mθ1 ,至此完成了一次迭代,可以证明 P(O1,O2,⋯,On|Mθ1)>P(O1,O2,⋯,On|Mθ0)
- 接着继续按照步骤2的过程迭代,直到模型质量不再明显提高为止
- 值得一提的是,鲍姆-韦尔奇算法每一次迭代就是不断的估计新的HMM参数,而使得 O1,O2,⋯,On 的概率达到最大化,这个过程被称之为期望值最大化(Expectation-Maximization)过程,但是EM过程只能保证收敛到一个局部最优解,而不能找打全局最优解,因此在相关的NLP的应用中,如词性标注(Part-of-Speech tagging),往往会使用人工标记数据这种有监督的训练方法,因为它能够收敛于全局最优解。当然,如果我们的目标函数为一个凸函数(只有一个最优点),这种情况EM过程就能找到最价值。
- 两个不同的HMM可以产生同样的信号
O1,O2,⋯,On
,因此仅仅通过观测信号来推断产生它的HMM,这样就会可能有多个HMM适合,但是总会有一个模型参数
Mθ2
要比另一个
Mθ1
更加可能产生这个观测到的输出,而鲍姆-韦尔奇算法就是找到这个最有可能的参数
Mθ^