HMM最可能隐藏状态序列求解概述
在HMM模型的解码问题中,给定模型λ=(A,B,Π)和观测序列 O = { o 1 , o 2 , . . . o T } O =\{o_1,o_2,...o_T\} O={ o1,o2,...oT},求给定观测序列O条件下,最可能出现的对应的状态序列 I ∗ = { i 1 ∗ , i 2 ∗ , . . . i T ∗ } I^*= \{i_1^*,i_2^*,...i_T^*\} I∗={ i1∗,i2∗,...iT∗},即P(I∗|O)要最大化。
一个可能的近似解法是求出观测序列O在每个时刻t最可能的隐藏状态i∗t然后得到一个近似的隐藏状态序列 I ∗ = { i 1 ∗ , i 2 ∗ , . . . i T ∗ } I^*= \{i_1^*,i_2^*,...i_T^*\} I∗={
i1∗,i2∗,...iT∗}。要这样近似求解不难,利用隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率中第五节的定义:在给定模型λ和观测序列O时,在时刻t处于状态qi的概率是γt(i),这个概率可以通过HMM的前向算法与后向算法计算。这样我们有:
i t ∗ = a r g max 1 ≤ i ≤ N [ γ t ( i ) ] ,    t = 1 , 2 , . . . T i_t^* = arg \max_{1 \leq i \leq N}[\gamma_t(i)], \; t =1,2,...T it∗=arg1≤i≤Nmax[γt(i)],t=1,2,...T
近似算法很简单,但是却不能保证预测的状态序列是整体是最可能的状态序列,因为预测的状态序列中某些相邻的隐藏状态可能存在转移概率为0的情况。
而维特比算法可以将HMM的状态序列作为一个整体来考虑,避免近似算法的问题,下面我们来看看维特比算法进行HMM解码的方法。
维特比算法概述
维特比算法是一个通用的解码算法,是基于动态规划的求序列最短路径的方法。在文本挖掘的分词原理中我们已经讲到了维特比算法的一些细节。
既然是动态规划算法,那么就需要找到合适的局部状态,以及局部状态的递推公式。在HMM中,维特比算法定义了两个局部状态用于递推。
第一个局部状态是在时刻t隐藏状态为i所有可能的状态转移路径 i 1 , i 2 , . . . i t i_1,i_2,...i_t i1,i2,...it中的概率最大值。记为δt(i):
δ t ( i ) = max i 1 , i 2 , . . . i t − 1    P ( i t = i , i 1 , i 2 , . . . i t − 1 , o t , o t − 1 , . . . o 1 ∣ λ ) ,    i = 1 , 2 , . . . N \delta_t(i) = \max_{i_1,i_2,...i_{t-1}}\;P(i_t=i, i_1,i_2,...i_{t-1},o_t,o_{t-1},...o_1|\lambda),\; i =1,2,...N δt(i)=i1,i2,...it−1maxP(it=i,i1,i2,...it−1,ot,ot−1,...o1∣λ),i=1,2,...N
由δt(i)的定义可以得到δ的递推表达式:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ \delta_{t+1}(i…
第二个局部状态由第一个局部状态递推得到。我们定义在时刻t隐藏状态为i的所有单个状态转移路径 ( i 1 , i 2 , . . . , i t − 1 , i ) (i_1,i_2,...,i_{t-1},i) (i1,i2,...,it−1,i)中概率最大的转移路径中第t−1个节点的隐藏状态为Ψt(i),其递推表达式可以表示为:
Ψ t ( i ) = a r g    max 1 ≤ j ≤ N    [ δ t − 1 ( j ) a j i ] \Psi_t(i) = arg \; \max_{1 \leq j \leq N}\;[\delta_{t-1}(j)a_{ji}] Ψt(i)=arg1≤j≤Nmax[δ