维特比(Viterbi)算法用于求解HMM的第二个问题,即给定观察序列 O = O 1 O 2 ⋯ O T O = O_{1} O_{2} \cdots O_{T} O=O1O2⋯OT和模型 μ = ( A , B , π ) \mu = (\mathbf{A}, \mathbf{B}, \mathbf{\pi}) μ=(A,B,π),选择在一定意义下“最优”的状态序列 Q = q 1 q 2 ⋯ q T Q = q_{1} q_{2} \cdots q_{T} Q=q1q2⋯qT,使得该状态序列“最好地解释”观察序列。该问题的答案并不唯一,它取决于对“最优状态序列”的理解。一种理解是,使该状态序列中每一个状态都单独地具有最大概率,即使 γ t ( i ) = P ( q t = s i ∣ O ; μ ) \gamma_{t}(i) = P(q_{t} = s_{i} | O; \mu) γt(i)=P(qt=si∣O;μ)最大。
根据贝叶斯公式,
γ t ( i ) = P ( q t = s i ∣ O ; μ ) = P ( q t = s i , O ; μ ) P ( O ; μ ) = α t ( i ) β t ( i ) ∑ i = 1 N α t ( i ) β t ( i ) (6-19) \begin{aligned} \gamma_{t}(i) & = P(q_{t} = s_{i} | O; \mu) \\ & = \frac{P(q_{t} = s_{i}, O; \mu)}{P(O; \mu)} \\ & = \frac{\alpha_{t}(i) \beta_{t}(i)}{\sum_{i = 1}^{N} \alpha_{t}(i) \beta_{t}(i)} \\ \end{aligned} \tag {6-19} γt(i)=P(qt=si∣O;μ)=P(O;μ)P(qt=si,O;μ)=∑i=1Nαt(i)βt(i)αt(i)βt(i)(6-19)
则 t t t时刻的最优状态为
q ^ t = arg max 1 ≤ i ≤ N γ t ( i ) \hat{q}_{t} = \argmax_{1 \leq i \leq N} \gamma_{t}(i) q^t=1≤i≤Nargmaxγt(i)
这种只考虑使每个状态的出现都单独达到最大概率而忽略状态序列中相邻两个状态之间关系的“最优状态序列”,可能导致相邻两个状态 q t q_{t} qt、 q t + 1 q_{t + 1} qt+1之间的转移概率为0,即 a q ^ t q ^ t + 1 = 0 a_{\hat{q}_{t}\hat{q}_{t + 1}} = 0 aq^tq^t+1=0。因此,这种“最优状态序列”可能为非法序列。
通常,对“最优状态序列”的理解为:在给定模型 μ ) \mu) μ)和观察序列 O O O的条件下,使条件概率 P ( Q ∣ O ; μ ) P(Q | O; \mu) P(Q∣O;μ)最大的状态序列,即
Q ^ = arg max Q P ( Q ∣ O , μ ) (6-20) \hat{Q} = \argmax_{Q} P(Q | O, \mu) \tag {6-20} Q^=QargmaxP(Q∣O,μ)(6-20)
这种理解可避免“断序”问题。维特比算法运用动态规划搜索算法求解这种最优状态序列。
定义6-3(维特比变量 δ t ( i ) \delta_{t}(i) δt(i)):在 t t t时刻,HMM沿某一条路径到达状态 s i s_{i} si,并输出观察序列 O = O 1 O 2 ⋯ O t O = O_{1} O_{2} \cdots O_{t} O=O1O2⋯Ot的最大概率:
δ t ( i ) = max q 1 , q 2 , ⋯ , q t − 1 P ( q 1 , q 2 , ⋯ , q t − 1 , q t = s i , O 1 O 2 ⋯ O t ; μ ) (6-21) \delta_{t}(i) = \max_{q_{1}, q_{2}, \cdots, q_{t - 1}} P(q_{1}, q_{2}, \cdots, q_{t - 1}, q_{t} = s_{i}, O_{1} O_{2} \cdots O_{t}; \mu) \tag {6-21} δt(i)=q1,q2,⋯,qt−1maxP(q1,q2,⋯,qt−1,qt=si,O1O2⋯Ot;μ)(6-21)
递归关系为:
δ t + 1 ( i ) = b i ( O t + 1 ) max j δ t ( j ) a j i (6-22) \delta_{t + 1}(i) = b_{i}(O_{t + 1}) \max_{j} \delta_{t}(j) a_{ji} \tag {6-22} δt+1(i)=bi(Ot+1)jmaxδt(j)aji(6-22)
为记录 t t t时刻,HMM通过哪一条概率最大的路径到达状态 s i s_{i} si,维特比算法设置变量 ψ t ( i ) \psi_{t}(i) ψt(i)保存路径, ψ t ( i ) \psi_{t}(i) ψt(i)记录该路径上状态 s i s_{i} si的前一个( t − 1 t - 1 t−1时刻)状态。
算法6-3(维特比算法,Viterbi algorithm)
δ 1 ( i ) = π i b i ( O 1 ) , 1 ≤ i ≤ N \delta_{1}(i) = \pi_{i} b_{i}(O_{1}), \ 1 \leq i \leq N δ1(i)=πibi(O1), 1≤i≤N
ψ 1 ( i ) = 0 \psi_{1}(i) = 0 ψ1(i)=0
δ t ( j ) = b j ( O t ) max 1 ≤ i ≤ N δ t − 1 ( i ) a i j , 2 ≤ t ≤ T , 1 ≤ j ≤ N \delta_{t}(j) = b_{j}(O_{t}) \max_{1 \leq i \leq N} \delta_{t - 1}(i) a_{ij}, \ 2 \leq t \leq T, 1 \leq j \leq N δt(j)=bj(Ot)1≤i≤Nmaxδt−1(i)aij, 2≤t≤T,1≤j≤N
记忆回溯路径:
ψ t ( i ) = arg max 1 ≤ i ≤ N δ t − 1 ( i ) a i j \psi_{t}(i) = \argmax_{1 \leq i \leq N} \delta_{t - 1}(i) a_{ij} ψt(i)=1≤i≤Nargmaxδt−1(i)aij
Q ^ T = arg max 1 ≤ i ≤ N δ T ( i ) \hat{Q}_{T} = \argmax_{1 \leq i \leq N} \delta_{T}(i) Q^T=1≤i≤NargmaxδT(i)
P ^ ( Q ^ T ) = max 1 ≤ i ≤ N δ T ( i ) \hat{P}(\hat{Q}_{T}) = \max_{1 \leq i \leq N} \delta_{T}(i) P^(Q^T)=1≤i≤NmaxδT(i)
q ^ t = ψ t + 1 ( q ^ t + 1 ) , t = T − 1 , T − 2 , ⋯ , 1 \hat{q}_{t} = \psi_{t + 1}(\hat{q}_{t + 1}), \ t = T - 1, T - 2, \cdots, 1 q^t=ψt+1(q^t+1), t=T−1,T−2,⋯,1
维特比算法的计算时间复杂度为 O ( N 2 T ) \mathcal{O}(N^{2}T) O(N2T)。实际应用中,通常搜索 n n n个最佳( n n n-best)路径,因此,格架的每个结点上需要记录 m m m个最佳( m m m-best, m < n m \lt n m<n)状态。