维特比算法
了解 隐马尔可夫模型的前向算法和后向算法 可以帮助理解本文
维特比(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 未本地化版本许可协议进行许可。欢迎转载,演绎,但是必须保留本文的链接,不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系。