隐马尔可夫模型——维特比算法

维特比算法

了解 隐马尔可夫模型的前向算法和后向算法 可以帮助理解本文

维特比(Viterbi)算法用于求解 HMM 中的第二个问题,即给定一个观察序列 O = O 1 O 2 … O T O = O_1O_2…O_T O=O1O2OT 和模型 μ = ( A , B , π ) \mu = \left ( A,B,\pi \right ) μ=(A,B,π) ,如何快速有效地选择在一定意义下「最优」的状态序列 Q = q 1 q 2 … q t Q = q_1q_2…q_t Q=q1q2qt ,使得该状态序列「最好地解释」观察序列。这个问题的答案并不是唯一的,因为它取决于对「最有状态序列」对理解。一种理解是,使钙状态序列中每一个状态都单独地具有最大概率,即要使得 γ t ( i ) = P ( q t = s i ∣ O , μ ) \gamma_t(i)=P(q_t=s_i|O,\mu) γt(i)=P(qt=siO,μ) 最大。

根据贝叶斯公式,有
γ 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=siO,μ)=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=1Nαt(i)βt(i),1tT
可得
(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^=1iNargmax[γ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(QO,μ) 最大的状态序列,即
(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(QO,μ)(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 O1O2Ot 的最大概率:
(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,,qt1maxP(q1,q2,,qt=si,O1O2Otμ)(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 t1 的)状态。根据这种思路,给出如下维特比算法。

算法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),1iN=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)=1iNmax[δt1(i)aij]bj(Ot),2tT;1jN
​ 记忆回退路径
ψ 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)=1iNargmax[δt1(i)aij]bj(Ot),2tT;1jN
(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^)=1iNargmax[δT(i)]=1iNmax[δ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=T1,T2,,1
维特比算法的时间复杂度和前向算法、后向算法一致,也是 O ( N 2 T ) O(N^2T) O(N2T)

参考资料

宗成庆. 统计自然语言处理(第2版). 统计自然语言处理. 2008.

知识共享许可协议
本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。欢迎转载,演绎,但是必须保留本文的链接,不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值