音声認識メモ(HMM)その6(HTK HERest コマンド(3))
「forward-backward」(またはalpha-beta)アルゴリズムの後ろ向き確率が求まったら、
続けて前向き確率を求める。
t=2において、ラベル1の状態2にいる確率(下図の赤枠)は
①(t=1でラベル1の状態2にいる確率) * ②(遷移確率) * ③(出力確率)
により求まる。
log ( ① * ② * ③ ) = log( ① ) + log( ② ) + log( ③ ) = (-76.116) + log( 0.6 ) + (-83.129) = (-76.116) + (-0.510) + (-83.129) = -159.757
これに、後ろ向きにより求めた、t=2において、ラベル1の状態2にいる確率を掛け合わせて対数をとる。
log ( 前向き確率 * 後ろ向き確率 ) = log( 前向き確率) + log( 後ろ向き確率 ) = (-159.757) + ( -15460.627 ) = -15620.384
後ろ向きにより求めたベストパス(t=1において、ラベル1の状態1にいる確率)との比を求める。
log( ( 前向き確率 + 後ろ向き確率 ) / ( 後ろ向きベストパスの確率 ) ) = log( 前向き確率 + 後ろ向き確率 ) - log( 後ろ向きベストパスの確率 ) = ( -15460.384 ) - (-15620.139) = 0.245
これを確率に直し、「t=2でラベル1の状態2にいる確率」を求める。
exp(-0.245) = 0.782
同様に、t=2において、ラベル1の状態3にいる確率(下図の赤枠)は
log ( ① * ② * ③ ) = log( ① ) + log( ② ) + log( ③ ) = (-76.116) + log( 0.4 ) + (-83.129) = (-76.116) + (-0.916) + (-83.129) = -160.162
後ろ向きにより求めた、t=2において、ラベル1の状態3にいる確率を掛け合わせて対数をとり、
log ( 前向き確率 * 後ろ向き確率 ) = log( 前向き確率) + log( 後ろ向き確率 ) = (-160.162) + ( -15461.502 ) = -15621.664
後ろ向きにより求めたベストパス(t=1において、ラベル1の状態1にいる確率)との比を求める。
log( ( 前向き確率 + 後ろ向き確率 ) / ( 後ろ向きベストパスの確率 ) ) = log( 前向き確率 + 後ろ向き確率 ) - log( 後ろ向きベストパスの確率 ) = ( -15621.664 ) - (-15620.139) = -1.525
これを確率に直し、「t=2でラベル1の状態3にいる確率」を求める。
exp(-1.525) = 0.217
これを繰り返すことで、ある時間における、各ラベル、各状態の確率が求まる。
(ある時間における確率の総和は1)
これを全時間に対して求めると、各ラベル、各状態のoccupation probability(占有確率:状態を専有する確率)が求まる。
例えば、ラベルq=1の状態2の占有確率は「4.55574036」で、全体に占める割合は、
4.55574036 / 198 = 0.023
「2.3」%となる。
占有確率をもとに、HMMにおける平均、分散、遷移確率を更新する。
モデルの平均の更新
以下、「モデルにおけるMFCC-1の平均」を更新する例。
1. 「ある時間における観測値」と「モデルの平均」の差(zmean)を求める
2. 「ある時間における確率」(Lr)を掛け合わせたもの(zmean*Lr)を合計する(上図例では「7.013」)
3. (zmean*Lr)の合計を占有確率で割った値を求める
4.「モデルにおけるMFCC-1の平均」(更新前)に足し合わせる
「モデルにおけるMFCC-1の平均」(更新前) + 1.53958738 = -7.092237 + 1.53958738 = -5.5526495
これが、更新後の値となる。
モデルの分散の更新
以下、「モデルにおけるMFCC-1の分散」を更新する例。
モデルの分散(更新前)は使わない。
1. 「ある時間における観測値」と「モデルの平均」の差(zmean)の2乗を求める
2. 「ある時間における確率」(Lr)を掛け合わせたもの(zmean*zmean*Lr)を合計する(上図例では「75.579」)
3. (zmean*zmean*Lr)の合計を占有確率で割った値を求める
4.平均の項で求めた、(zmean*Lr)の合計を占有確率で割った値(今回の例では1.539)の2乗を、3.で求めた値から引く
16.589 - (1.539)^2 = 14.219
これが、更新後の値となる。
モデルの遷移確率の更新
ある時間における遷移確率の合計を、占有確率で割る。
「x」はベストパスとの差(対数での値)。時間が経つほど乖離が大きくなる(確率として低くなる)。
exp(x)は確率に換算した値(0から1の範囲をとる)
青枠の和(0.611 + 0.170)=緑枠(0.782)が成立する。
state2からstate2へ遷移する確率は、
3.555 / 4.555 = 0.780
state2からstate3へ遷移する確率は、
1.000 / 4.555 = 0.219
これが更新後の値となる。