了解 隐马尔可夫模型的前向算法和后向算法 可以帮助理解本文
维特比(Viterbi)算法用于求解 HMM 中的第二个问题,即给定一个观察序列 O = O 1 O 2 … O T O = O_1O_2…O_T O=O1O2…OT 和模型 μ = ( A , B , π ) \mu = \left ( A,B,\pi \right ) μ=(A,B,π) ,如何快速有效地选择在一定意义下「最优」的状态序列 Q = q 1 q 2 … q t Q = q_1q_2…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 ∣ μ ) \gamma_t(i) =P(q_t=s_i|O,\mu)=\frac{P({q_t}=s_i,O|\mu)}{P(O|\mu)} γt(i)=P(qt=si∣O,μ)=P(O∣μ)P(qt=si,O∣μ)
使用前向算法和后向算法的结论:
P ( O , q t = s i ∣ μ ) = α t ( i ) β t ( i ) P(O,q_t=s_i|\mu) = \alpha_t(i)\beta_t(i) P(O,qt=si∣μ)=αt(i)βt(i)
和
P ( O ∣ μ ) = ∑ i = 1 N α t ( i ) β t ( i ) , 1 ≤ t ≤ T P(O|\mu)=\sum_{i=1}^{N}\alpha_t(i)\beta_t(i) ,1\leq t\leq T P(O∣μ)=i=1∑Nαt(i)βt(i),1≤t≤T
可得
(2-1) γ t ( i ) = a t ( i ) β t ( i ) ∑ i = 1 N α t ( i ) β t ( i ) \gamma_t(i)=\frac{a_t(i)\beta_t(i)}{\sum_{i=1}^{N}\alpha_t(i)\beta_t(i)}\tag{2-1} γt(i)=∑i=1Nαt(i)βt(i)at(i)βt(i)(2-1)
那么,在时间 t t t 的最优状态为
q t ^ = a r g m a x 1 ≤ i ≤ N [ γ t ( i ) ] \hat{q_t}=\underset{1\leq i\leq N}{\mathrm{argmax}}[\gamma_t(i)] qt^=1≤i≤Nargmax[γt(i)]
根据这种对「最优状态序列」的理解,如果只考虑每个状态的出现都单独达到最大概率,而忽略了状态序列中两个状态之间的关系,可能导致两国状态 q t ^ \hat{q_t} qt^ 和 q t + 1 ^ \hat{q_{t+1}} qt+1^ 之间的转移概率为 0,即 a q t ^ q t + 1 ^ = 0 a_{\hat{q_t}\hat{q_{t+1}}}=0 aqt^qt+1^=0 。那么在这种情况下,「最优状态序列」不是一个合法的序列。因此,常常采用另一种对「最优状态序列」的理解:在给定模型 μ \mu μ 和观察序列 O O O 的条件下,使条件概率 P ( Q ∣ O , μ ) P(Q|O,\mu) P(Q∣O,μ) 最大的状态序列,即
(2-2) Q ^ = a r g m a x Q P ( Q ∣ O , μ ) \hat{Q}=\underset{Q}{\mathrm{argmax}}P(Q|O,\mu)\tag{2-2} Q^=QargmaxP(Q∣O,μ)(2-2)
根据这种理解,优化的不是状态序列中的单个状态,而是整个状态序列,不合法的状态序列的概率为 0 。
维特比算法运用动态规划的搜索算法求解这种最优状态序列。为了实现这种搜索,首先定义了一个维特比变量 δ t ( i ) \delta _t(i) δt(i) 。
定义2-1 维特比变量 δ t ( i ) \delta _t(i) δt(i) 是在时间 t t t 时,HMM 沿着某一条路径到达状态 s i s_i si ,并输出观察序列 O 1 O 2 … O t O_1O_2…O_t O1O2…Ot 的最大概率:
(2-3) δ t ( i ) = m a x q 1 , q 2 , ⋅ ⋅ ⋅ , q t − 1 P ( q 1 , q 2 , ⋅ ⋅ ⋅ , q t = s i , O 1 O 2 … O t ∣ μ ) \delta_t(i)=\underset{q_1,q_2,\cdot \cdot \cdot ,q_{t-1}}{max}P(q_1,q_2,\cdot \cdot \cdot ,q_{t}=s_i,O_1O_2…O_t|\mu)\tag{2-3} δt(i)=q1,q2,⋅⋅⋅,qt−1maxP(q1,q2,⋅⋅⋅,qt=si,O1O2…Ot∣μ)(2-3)
与前向变量类似, δ t ( i ) \delta _t(i) δt(i) 有如下递归关系:
(2-4) δ t + 1 ( i ) = m a x j [ δ t ( i ) ⋅ a i j ] ⋅ b i ( O t + 1 ) \delta_{t+1}(i)=\underset{j}{max}[\delta_{t}(i)\cdot a_{ij}]\cdot b_i(O_{t+1})\tag{2-4} δt+1(i)=jmax[δt(i)⋅aij]⋅bi(Ot+1)(2-4)
这种递归关系使我们能够运用动态规划搜索技术。为了记录在时间 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 的)状态。根据这种思路,给出如下维特比算法。
算法2-1 维特比算法(Viterbi algorithm)
(1)初始化:
δ t ( i ) = π i b i ( O 1 ) , 1 ≤ i ≤ N ψ 1 ( i ) = 0 \begin{aligned} \delta_t(i)&=\pi_ib_i(O_1),1\leq i\leq N\\ \psi_1(i)&=0 \end{aligned} δt(i)ψ1(i)=πibi(O1),1≤i≤N=0
(2)归纳计算:
δ t ( j ) = m a x 1 ≤ i ≤ N [ δ t − 1 ( i ) ⋅ a i j ] ⋅ b j ( O t ) , 2 ≤ t ≤ T ; 1 ≤ j ≤ N \delta_{t}(j)=\underset{1\leq i\leq N}{max}[\delta_{t-1}(i)\cdot a_{ij}]\cdot b_j(O_{t}),2\leq t\leq T;1\leq j\leq N δt(j)=1≤i≤Nmax[δt−1(i)⋅aij]⋅bj(Ot),2≤t≤T;1≤j≤N
记忆回退路径
ψ t ( j ) = a r g m a x 1 ≤ i ≤ N [ δ t − 1 ( i ) ⋅ a i j ] ⋅ b j ( O t ) , 2 ≤ t ≤ T ; 1 ≤ j ≤ N \psi_t(j)=\underset{1\leq i\leq N}{argmax}[\delta_{t-1}(i)\cdot a_{ij}]\cdot b_j(O_{t}),2\leq t\leq T;1\leq j\leq N ψt(j)=1≤i≤Nargmax[δt−1(i)⋅aij]⋅bj(Ot),2≤t≤T;1≤j≤N
(3)终结计算:
Q T ^ = a r g m a x 1 ≤ i ≤ N [ δ T ( i ) ] P ^ ( Q T ^ ) = m a x 1 ≤ i ≤ N [ δ T ( i ) ] \begin{aligned} \hat{Q_T}&=\underset{1\leq i\leq N}{argmax}[\delta_T(i)]\\ \hat{P}(\hat{Q_T})&=\underset{1\leq i\leq N}{max}[\delta_T(i)]\\ \end{aligned} QT^P^(QT^)=1≤i≤Nargmax[δT(i)]=1≤i≤Nmax[δT(i)]
(4)路径(状态序列)回溯:
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,\cdot\cdot\cdot,1 qt^=ψt+1(q^t+1),t=T−1,T−2,⋅⋅⋅,1
维特比算法的时间复杂度和前向算法、后向算法一致,也是 O ( N 2 T ) O(N^2T) O(N2T) 。
宗成庆. 统计自然语言处理(第2版). 统计自然语言处理. 2008.
本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。欢迎转载,演绎,但是必须保留本文的链接,不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系。