Viterbi Algorithm
記法
xi…j (ただし i≤j)は i 番目から j 番目の要素からなる部分列 xi…xjを表す.
Viterbi変数(Viterbi AlgorithmのDP変数)
Viterbi Algorithmは,出力列 x1…T=x1…xTとの同時確率が最大の状態列 ^h1…T=^h1…^hTを推定する.
Viterbi変数 vi(t) は,時刻 t における状態が si である場合の出力部分列 x1…t と状態部分列 h1…t の同時確率の最大値である.
vi(t)≡maxh1…t−1|ht=siP(x1…t,h1…t)
maxh1…t−1|ht=siは,ht=siの条件のもとでh1…t−1について最大をとる記号である.時刻 t における状態が si である場合の条件付き確率ではないことに注意せよ.
Viterbi Algorithm
初期化:(t=0)v0(0)=1;vi(0)=0 for all i>0再帰:(t=1,…,T)vj(t)=ej(xt)maxi(vi(t−1)aij)ptrt(j)=argmaxi(vi(t−1)aij)終了処理:P(x1…T,^h1…T)=maxi(vi(T))^hT=argmaxi(vo(T))トレースバック:(t=T,…,1)^ht−1=ptrt(^ht)