2014/11/07

HTKで強制アライメントをする方法(略式)

【はじめに】
・今日の日付は 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 件のコメント:

コメントを投稿