目次
HTK : The Hidden Markov Model Toolkit
HTK は隠れマルコフモデルによる音声認識のツールキット。
ケンブリッジ大学の技術をもとに製品化された有償のソフトウェアだったが、開発元が Microsoft に買収され、その後無料で公開された。 現在は厳密な意味でのオープンソースプログラムではなく、配布元でユーザ登録すれば入手・利用できる。
特徴量計算の部分を自前で用意することで画像認識などにも応用できる。
ATK : Application Toolkit for HTK が提供されている。
HTK のパッチとして音声合成ツールキットHTSが公開されている。
コマンド hvite
資料
- 近藤悠介 on the Web | HTK http://bit.ly/spRP0m
文献
<html> <div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627847114/r4wh-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/519Jh4Vxl9L._SL160_.jpg" alt="フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627847114/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4627847114/r4wh-22/ref=nosim/" title="フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで" target="_blank">amazlet</a> at 10.04.24</div></div><div class="amazlet-detail">荒木 雅弘 <br />森北出版 <br />売り上げランキング: 26725<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> パターン認識,機械学習を通して音声認識を学ぶ人に最適<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> まずはこれ.パターン認識・機械学習の初学書<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627847114/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div> </html>
<html> <div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274132285/r4wh-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41W773XYGWL._SL160_.jpg" alt="IT Text 音声認識システム" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274132285/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">IT Text 音声認識システム</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4274132285/r4wh-22/ref=nosim/" title="IT Text 音声認識システム" target="_blank">amazlet</a> at 10.05.31</div></div><div class="amazlet-detail">鹿野 清宏 河原 達也 山本 幹雄 伊藤 克亘 武田 一哉 <br />オーム社 <br />売り上げランキング: 235542<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 今すぐ音声認識システムがあなたの物に<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274132285/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div> </html>
rubyhtk : Ruby wrapper of HTK (HMM Toolkit)
HTK Book (Ver 3.4.1) 覚え書き
- Fig 7.4 : Full covariance の説明
- InvCovar
- LLTCover (Choleski分解)
- Fig 7.5
- StreamInfo
- SWeights
- p.116 : master model file
- ~xxx 一覧
- p.117 : HMMSets
- p.127 : GConst
インストール作業メモ
Vine 3.x / 4.x 環境
$ tar xvfz /path/to/HTK-3.4.1.tar.gz $ tar xvfz /path/to/HDecode-3.4.tar.gz $ cd htk $ sh configure $ make all hdecode $ su # make install install-hdecode $ /usr/local/bin/HList (for test)
HTK形式のデータを扱う
MFCCをテキスト形式に変換する
HList -r FAC_13A.mfc > FAC_13A.data
HTKデータをmatlabから使う
HTKのMFCC計算をできるだけmatlabで再現しようという試み。 readhtk.m というスクリプトも紹介されている。
http://www.ee.columbia.edu/~dpwe/resources/matlab/rastamat/mfccs.html
音響モデルの学習
参照「フリーソフトで作る音声認識システム」11章
時間の指定と表記
- ラベルファイルの時間の単位は1,000,000分の1秒(百万分の1秒)。
- config ファイルのサンプリング周期などの指定の単位は 10,000,000分の1秒(一千万分の1秒)。
動的特徴量
- HTKBook によると一次微分も二次微分も K=2 がデフォルト(DELTAWINDOW, ACCWINDOW)。前後あわせて合計5フレームの傾き。
特徴量
覚え書き
_Z : ケプストラム平均正規化を行うための特徴量
ファイル名
ファイル名(の拡張子を除いた部分)は「正解ラベルと認識結果の比較」など、さまざまな場面でデータの識別子として用いられる。 特に話者適応などが絡むと複雑。
注意深くマニュアルを読むか、サンプルのファイル命名規則に従うのが無難。
コマンド
データに時間情報つきのラベルが必要なコマンド
- HInit : ビタビ学習
- HRest : 再推定
データに時間情報つきのラベルが不要なコマンド
- HCompV : 状態をすべて同じ値で初期化。デフォルトは分散のみ求める。-m オプションで平均も更新。
- HERest : 連結学習による再推定
作業の流れ
「フリーソフトで作る音声認識システム」11章の流れ
- 音声(MFCC)と、それに対応する時間つきラベルを用意する。
- HMMの初期モデル(テキストファイル)を用意する。
- HInit でモデルファイルを更新。MFCCファイルと時間ラベルを用いる。
- HRest でモデルファイルを更新。MFCCファイルと時間ラベルを用いる。
- hmmファイルをくっつけてhmmdefsファイルを作る。
- hmmlistファイルを作る。モデルの名前を並べる。
- 文法ファイル(単語のネットワーク)を作る。HParse で net.slf に変換する。
- 単語辞書ファイル(voca)を作る。単語とモデルの対応づけを与える。
- HVite で認識結果を得る。
- 引数でvoca, hmmlist, MFCCファイルを与える。
- オプションでHMM定義ファイル、認識結果(出力)ファイル名、文法ファイル(net.slf)を与える。
連結学習を使う作業の流れ:HTKBookのチュートリアル、 rubyhtk
- 音声(MFCC)と、それに対応する時間なし音素ラベル(*.lab) を用意する。
- HMMの初期モデル(テキストファイル)を用意する。
- HCompV -m ですべてのモデルに共通な平均と分散を学習する。
- 一度実行してすべてのモデルの初期値としてコピーすればよいはず。
- rubyhtk では一つのモデルファイルについて一回実行すればよいが、実際には同じものを何度も出力している。(lib/model.rbのcompメソッド)
- オプション -S でスクリプトファイル(1行について一つずつMFCCファイルのパスが書かれたテキスト)を指定。-M で出力ファイルを書き出すディレクトリを指定。
- 引数でモデルファイル(一つの音素モデルに対応する)の場所を指定。
- HERest で連結学習。
- 引数でhmmlistファイルを与える(モデルの名前が並んでいる)。
- オプション -L で音素ラベルファイルのあるディレクトリ。-S でスクリプトファイル(上述)。-M で出力ファイルを書き出すディレクトリを指定。-C で config ファイルを指定。-s で出力ファイルと一緒に書き出す統計量ファイル名(stats)を指定。
- mfcファイルの拡張子をlabに読み替えて-Lで指定したディレクトリを探して、ラベルファイルにアクセスする。
- この処理で stats と同じ場所に newMacros ができる。
- 以下を繰り返して所望の混合数にする
- HHEd でモデルの混合数を増やす。
- 引数でmixup.hed(後述)と、config.herest ファイルを指定
- オプション -H でマクロファイルnewMacrosを指定。-M で出力ディレクトリを指定。
- HERest でさらに連結学習。
- 引数でhmmlistファイルを指定
- オプション -L で音素ラベルのディレクトリ。-S でスクリプトファイル。-H で入力する newMacros ファイルを指定。-M で出力するディレクトリを指定。-C で config.herest を指定。-s で出力する stats ファイルを指定。
- HViteで認識結果を得る。
- 引数で dict および hmmlist を指定
- オプション -H で newMacros (学習されたHMM定義)。-S で評価したいMFCCのリスト=スクリプトファイル(テキスト)。-w で HParse された slf 文法ファイル。-i で認識結果。
[mixup.hed] LS #{input.dir}/stats MU +1 {*.state[2-19].mix} [config.herest] SOURCEKIND = MFCC_D_A_0 TARGETKIND = MFCC_D_A_0
HERest
-H : MMF マスターモデルファイル -L : ラベル -S : データ -d : 入力ディレクトリ -M : 出力ディレクトリ -s : 出力 stats
HResult
-p : コンフュージョンマトリクスを出す -w : ワードスポッティングモード (時間ラベルが必要)
参照と仮説の単語列をDPマッチングして比較できる。
無視したい単語を指定できる。 sil を指定するなど。
荒木雅弘「フリーソフトで作る音声認識システム」11章
動的特徴量を使わない(簡略化)
設定ファイル
config.hcopy
SOURCEFORMAT = NOHEAD SOURCEKIND = WAVEFORM SOURCERATE = 625 TARGETKIND = MFCC TARGETRATE = 100000.0 WINDOWSIZE = 250000.0 USEHAMMING = T PREEMCOEF = 0.97 NUMCHANS = 24 NUMCEPS = 12
proto/hai.hmm
~o <VecSize> 12 <MFCC> ~h "hai" <BeginHMM> <NumStates> 5 <State> 2 <Mean> 12 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 <Variance> 12 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 <State> 3 <Mean> 12 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 <Variance> 12 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 <State> 4 <Mean> 12 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 <Variance> 12 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 <TransP> 5 0.0 1.0 0.0 0.0 0.0 0.0 0.5 0.5 0.0 0.0 0.0 0.0 0.5 0.5 0.0 0.0 0.0 0.0 0.5 0.5 0.0 0.0 0.0 0.0 0.0 <EndHMM>
マイク入力でHViteによる認識
- Ubuntu 10.10 でうまく動かない。カーネルから opensoundsystem がなくなったため。padsp (pulseaudio も使えない。
config.hvite-mic : HVite でマイク入力を使う場合に使用。MFCファイル名を指定しなくてよい。
SOURCEFORMAT = HTK SOURCEKIND = HAUDIO SOURCERATE = 625 TARGETKIND = MFCC TARGETRATE = 100000.0 WINDOWSIZE = 250000.0 USEHAMMING = T PREEMCOEF = 0.97 NUMCHANS = 24 NUMCEPS = 12 USESILDET = T MEASURESIL = F OUTSILWARN = T ENORMALISE = F
HVite -C config.hvite-mic -H hmm1/hmmsdef.hmm -i reco.mlf -w net.slf voca.txt hmmlist.txt