HTK : The Hidden Markov Model Toolkit

HTK は隠れマルコフモデルによる音声認識のツールキット。

ケンブリッジ大学の技術をもとに製品化された有償のソフトウェアだったが、開発元が Microsoft に買収され、その後無料で公開された。 現在は厳密な意味でのオープンソースプログラムではなく、配布元でユーザ登録すれば入手・利用できる。

http://htk.eng.cam.ac.uk/

特徴量計算の部分を自前で用意することで画像認識などにも応用できる。

ATK : Application Toolkit for HTK が提供されている。

HTK のパッチとして音声合成ツールキットHTSが公開されている。

コマンド hvite

資料

文献

フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで
荒木 雅弘
森北出版
売り上げランキング: 26725
おすすめ度の平均: 5.0
5 パターン認識,機械学習を通して音声認識を学ぶ人に最適
5 まずはこれ.パターン認識・機械学習の初学書

IT Text 音声認識システム
鹿野 清宏 河原 達也 山本 幹雄 伊藤 克亘 武田 一哉
オーム社
売り上げランキング: 235542
おすすめ度の平均: 5.0
5 今すぐ音声認識システムがあなたの物に

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 
htk.txt · 最終更新: 2011/11/08 14:46 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0