Viterbi Algorithm

記法

xij (ただし ij)は i 番目から j 番目の要素からなる部分列 xixjを表す.

Viterbi変数(Viterbi AlgorithmのDP変数)

Viterbi Algorithmは,出力列 x1T=x1xTとの同時確率が最大の状態列 ^h1T=^h1^hTを推定する.
Viterbi変数 vi(t) は,時刻 t における状態が si である場合の出力部分列 x1t と状態部分列 h1t の同時確率の最大値である.
vi(t)maxh1t1|ht=siP(x1t,h1t)
maxh1t1|ht=siは,ht=siの条件のもとでh1t1について最大をとる記号である.時刻 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(t1)aij)ptrt(j)=argmaxi(vi(t1)aij)終了処理:P(x1T,^h1T)=maxi(vi(T))^hT=argmaxi(vo(T))トレースバック:(t=T,,1)^ht1=ptrt(^ht)