HMM中的维特比算法
1. 算法
维特比算法实际上常常被用来求解HMM模型的预测问题。即用动态规划求解概率最大(最优路径)。最后求解出来的是一个状态序列,比如在中文分词中,最后出来的可能是[BMESSS]这样子一个状态序列列表。
根据动态规划的原理,最优路径具有这样的特性,如果最优路径在时刻t通过节点,那么这一路径中的
到终点节点
的这一小段路径记作l1,从节点
到终点节点
所有路径记作L,那么l1必然是L中最优的一条路径。因为如果不是这样,那么就存在一条更好的路径l2,而我们将这条路径l2和节点
到节点
连接起来就是一条最优路径,这和我们的假设矛盾。
根据这个原理,我们只需要从t=1开始,递推的计算在时刻t状态为i的各条部分路径的最大概率。直至到了时刻t=T,状态为i的各条路径的最大概率。时刻t=T的最大概率即为最优路径的概率,最优路径的终节点
也同时得到。之后为了找到各个最优的节点,从终节点
开始,由后向前,逐步得到前面的各个节点,最终得到最优路径
,这就是维特比算法!
下面我们来看一下递推式都是什么样子的。
首先我们引入一个变量,定义为在时刻为t,状态为i的所有单个路径中,概率的最大值。
那么在t时刻,其可以写成:
那么在t+1时刻,
定义在时刻t状态为i的所有单个路径中,概率最大的路径的第t-1个节点为:
这样我们就得到的递推式。
2. 一个例子
考察盒子球模型,其中状态集合Q={1,2,3},观测集合V={红,白},观测向量O=“红白红”,试求最优状态序列。
其中已知HMM模型为:
步骤一:初始化
在t=1时,对于每一个状态i,求状态为i观测到o1=红的概率,记此概率为
则有:
带入具体数值算得:
并且我们定义
步骤二:t=2时
在t=2时,对每个状态i,求在t=1时状态为j,观测为红,并且在t=2时状态为i,观测为白的路径的最大概率,记概率为,则:
拿一个展开算一下:
当j=1时,
当j=2时,
当j=3时,
同理,我们可以求得:
步骤三:最优概率和最优路径终点
很明显,最优路径概率为
最优路径终点为:
步骤四:逆向寻找其他节点
由最优终点,逆向寻找其他节点:
当t=3时,
当t=2时,
从而得到序列是(3,3,3)
3. 算法步骤
输入:模型和观测
,
输出:最优路径
(1)初始化:
(2)递推,对
(3)终止
(4)最优路径回溯,对
最终求得最优路径。