自然语言处理——6.3 HMM之 前向算法

解决问题1:快速计算观察序列概率

给定模型和观察序列 ,快速计算:

1. 基本方法

对于给定的状态序列 ,?

\begin{array}{l} p(O|\mu ) = \sum\limits_Q {p(O,Q|\mu )} = \sum\limits_Q {p(Q|\mu )} \times p(O|Q,\mu )\\ p(Q|\mu ) = {\pi _{{q_1}}} \times {a_{{q_1}{q_2}}} \times {a_{{q_2}{q_3}}} \times ... \times {a_{{q_{t - 1}}{q_t}}}\\ p(O|Q,\mu ) = {b_{{q_1}}}({O_1}) \times {b_{{q_2}}}({O_2}) \times ... \times {b_{{q_t}}}({O_t}) \end{array}

  • 困难

如果模型有个不同的状态,时间长度为,那么有个可能的状态序列,搜索路径成指数级组合爆炸。

2. 解决方法:动态规——前向算法(The forward procedure)

1)基本思想:定义前向变量

如果可以高效地计算,就可以高效地求得。

因为 是在到达状态 时观察到序列 的概率(所有可能的概率之和):

动态规划计算:在时间的前向变量可以根据时间 的前向变量的值递推计算:

2)算法6.1:前向算法描述:
3)算法的时间复杂性:

你可能感兴趣的:(自然语言处理——6.3 HMM之 前向算法)