音声認識メモ(HMM)その8(HTK HERest コマンド(5))

トライフォンの初期モデルに対して学習を行う。

 HERest -C "config名" -I "トライフォン用の音素MLF" -t 250.0 150.0 1000.0 -S "学習対象となるファイルのリスト"-s "統計ファイル" -H "トライフォンの初期モデル" -M "出力先" "トライフォンのリスト"

インプットとして渡す音素MLFの例。

トライフォン用の音素MLF
#!MLF!#
silB
m+o
m-o+s
o-s+i
s-i+m
i-m+o
m-o+s
o-s+i
s-i
silE
.
(比較用)モノフォン用の音素MLF
#!MLF!#
silB
m
o
s
i
m
o
s
i
silE
.

どちらも10個だが、モノフォンでは6種類なのに対し、トライフォンでは8種類となる。

ここで、「-s」オプションを付けて統計ファイルを出力するように指定する。
(この統計ファイルは、後続のクラスタリングで使用する)

統計ファイルの例

f:id:ichou1:20171229120651p:plain
音声ファイルを構成する「198」フレームにおける各ラベル、各状態の専有確率を表す。
(値を全て足し合わせると「197.991268」になる)

学習を繰り返しモデルを更新した後、モデルのクラスタリングを行う。

クラスタリングでは、中心音素が同じのモデルを1つにまとめる。
例)"「m+o」の状態2"と"「i-m+o」の状態2をまとめて"ST_m_2"を作成する

クラスタリングの初期モデル作成には、HHEdコマンドを使う。

HHEd -H "トライフォンのモデル" -M "出力先" "HHEdスクリプト" "トライフォンのリスト"
HHEdスクリプトの例
RO 100 "統計ファイル"

TR 2

TB 350.0 "ST_m_2_" {("m","*-m+*","m+*","*-m").state[2]}
TB 350.0 "ST_o_2_" {("o","*-o+*","o+*","*-o").state[2]}
TB 350.0 "ST_s_2_" {("s","*-s+*","s+*","*-s").state[2]}
TB 350.0 "ST_i_2_" {("i","*-i+*","i+*","*-i").state[2]}
(以降、省略)

TR : Trace Level
TB : TreeBase

"ST_m_2_1"の初期モデル作成ロジックは以下のとおり("平均(MFCC_1)"を算出する例)

インプット1:モデル"m+o"の平均(MFCC_1)
初期モデルの平均(MFCC_1) * 統計ファイル上の占有確率
= -4.666 * 1.324
= -6.181
インプット2:モデル"i-m+o"の平均(MFCC_1)
初期モデルの平均(MFCC_1) * 統計ファイル上の占有確率
=  3.192 * 3.995
= -12.757
アウトプット:モデル"ST_m_2_1"の平均(MFCC_1)
(インプット1の平均(MFCC_1) + インプット2の平均(MFCC_1)) / (インプット1の占有確率 + インプット2の占有確率)
= 
=  ((-6.181) + (-12.757)) / ( 1.324 + 3.995)
= -18.939 / 5.320
= -3.559


作成した初期モデルに対して、学習を行う。