【はじめに】
・今日の日付は 2014/11/07です。
・windows only です。
・本記事で説明することを実現するだけなら、たぶんJuliusでやった方が簡単です。
・HTKで強制アライメントをするために最低限何が必要か?を知るのには役立つかもしれません。
【やりたいこと】
Juliusについてる音響モデルで、HTKを使って強制アライメントする
【やらないこと】
音響モデルそのものの学習(HInit, HRest, HERest等)
【はじめに】
公式リファレンス:HTK Book
有力な参考文献: Miyazawa's pukiwiki, 近藤悠介 on the Web
あたりは読みましたか?
以下の内容は、
「これらを読んでも良くわからない」人向けに、
やりたいことを一直線で実現する手順を記していきます。
基本的に以下の作業ではコマンドプロンプトを使います。
Shift + 右クリックでコマンドプロンプトが開けることを
覚えておくと便利かもしれません。
【0.インストール】
まず、Visual Studioをインストールしておいてください。
その後、公式ページからHTK落として、公式ページどおりの手順でインストールしてください。
ダウンロードの際に登録が必要なので注意してください。
インストールが終わったら、環境変数の設定をしてください。
これも公式ページどおりです。
ちなみに、
「サンプルを動かすためにはperlが必要だよ」とか書いてあるのですが、
入れたところでエラー連発で動かないので無視しても良いと思います。
perlを触ったことがある方は適宜修正して、同じ結果が得られるかチェックすると安心です。
あと、Juliusをダウンロードして
jnas-mono-16mix-gid.hmmdefs
というファイルを見つけておいてください。
最後に使います。
【0.1 ビルドについて】
(2014/11/24追記)
ビルドくらい楽勝だよねみたいなノリで書いてしまったのですが、
改めて自分の違うPCでインストールしたらハマりました…
こちらのサイトを参考にするといいと思います。
(追記ここまで)
【1.特徴量抽出(Parファイル)】
wavファイルの音声の特徴量を抽出します。
以下、この特徴量ファイルをParファイルと呼ぶことにします。
C:\Users\hogehoge> HCopy -C コンフィグファイル Wavファイル 出力ファイル名
HCopyに限った話でもないのですが、
出力ファイル名を指定しないとエラーが起きることがあるので、必ず指定してください。
コンフィグファイルの中身は以下の通りです。
SOURCEFORMAT = WAV
TARGETKIND = MFCC_E_0
TARGETRATE = 100000.0
SAVECOMPRESSED = T
SAVEWITHCRC = T
WINDOWSIZE = 250000.0
USEHAMMING = T
PREEMCOEF = 0.97
NUMCHANS = 26
CEPLIFTER = 22
NUMCEPS = 12
ENORMALISE = F
近藤悠介 on the webのものとほぼ同じですが、TARGETKINDのところだけ変えてあります。
これはjuliusの音響モデルと揃える都合上です。
【2. 辞書ファイル(Dicファイル)】
認識させたい単語(文章)を一覧にしたファイルを作ります。
以下、Dicファイルと呼びます。
Dicファイルの中身は、こんな感じにします。
p0 silB a r u h a r e t a h i n o g o g o
p1 m a h o u i j o u n o y u k a i g a silE
最初に単語名、次に音素列を並べます。
juliusの音響モデルを使用する場合文頭/末の空白を表すsilB/silEが使えます。
また、空白文字としてspが使えます
【3. 音素ファイル(phonesファイル)】
Dicファイルに含まれる音素全てを並べたファイル(以下phonesファイル)を作ります。
silB
a
r
u
h
みたいに、使う音素全てを書き並べていってください。
【4. 文法ファイル(Latファイル)】
先ほど、Dicファイルで指定した単語名を使って、
どういう順番で認識させるかを指定します。
例えば、p0だけでよい(音声が「ある晴れた日の午後」だけ)のなら
(p0)
p0, p1の順番で認識させたければ、
(p0 p1)
と書いて保存します。
これをgramファイルと呼びます
(次のコマンドの後は出てこないので、忘れても大丈夫です)
次に、HParseというコマンドを使って、これをHTK用の文法ファイルに変換します。
以下、これをLatファイルと呼ぶことにします。
C:\Users\hogehoge>Hparse gramファイル Latファイル
【5. 強制アライメント(Recファイル)】
Parファイル(Step 1), Dicファイル(Step 2), phonesファイル(Step3), Latファイル(Step 4)を使って、
強制アライメントをしていきます。
強制アライメントにはHViteというコマンドを使います。
C:\Users\hogehoge>HVite -w Latファイル -C コンフィグファイル -T 1 -H jnas-mono-16mix-gid.hmmdefs -m Dicファイル phonesファイル parファイル
コンフィグファイルは以下の通りです。
SOURCEKIND = MFCC_E_0
TARGETKIND = MFCC_E_D_N_Z
(parファイルの名前).recというファイルが出力されれば成功です!
適当なテキストエディタで開いてみてください。
0 300000 silB -248.249069 silB
300000 13100000 sp 9621.525391 sil
13100000 13400000 d -203.709473 p0
13400000 13700000 a -204.125214
13700000 14000000 i -205.093567
みたいな感じで、数字・数字・音素名・数字・(フレーズ名)
となってればokです。
ちなみに
一番左の数字はオンセットタイム
二番目の数字はオフセットタイム
三番目の数字は尤度を表しています。
【終わりに】
以上です。
HTKは相当高機能で、ここには書いてないような機能がたくさんあります。
これを最初の一歩にして、すばらしいHMMライフを送っていただけることをお祈りいたします。
0 件のコメント:
コメントを投稿