Miyazawa’s Pukiwiki
HTKによる音響モデル構築
はすでに存在します。
開始行:
#access
#analog
*日本語話し言葉コーパス(CSJ)を使ったHTK音響モデル構築((...
#contents
**0.はじめに [#ad7e6b11]
***用語 [#m830ee9f]
-CSJ … Corpus of Spontaneous Japanese の略。
-HTK … Hidden Markov Model Tool Kit の略。
--音声認識アプリ Julius/Julian の音響モデルとして利用でき...
-Hidden Markov Model(HMM) … 隠れマルコフモデル ('''[[参...
***教科書・参考文献 [#ae4bbb62]
-「'''[[HTKによる大語彙連続音声認識, 菊池英明, 2000:http:...
--[[HTK(Hidden Markov Model Toolkit):http://www.f.waseda....
-[[HTK Book:http://shower.human.waseda.ac.jp/~m-kouki/pas...
-[[音声メディア研究室 HMM 作成メモ:http://izanami.tl.fuku...
-[[JNAS CDROMからIPA音響モデルの作成法:http://www.cyb.mei...
-[[HTK の使い方:http://vision.kuee.kyoto-u.ac.jp/~hiroaki...
-[[連続音声認識システムに使用するアルゴリズム(Viterbiア...
-[[UNDERSTANDING HTK ERROR MESSAGES (USING HTK):http://ww...
***インストール(Linux) [#qc0725d1]
-まずは、[[HTKをダウンロード:http://htk.eng.cam.ac.uk/dow...
--Linux/Unix downloads > HTK source code (tar+gzip archi...
--ここでは、ファイルを /home/m-kouki/HTK/ 以下におきまし...
-解凍してコンパイルします(([[試行錯誤の後:http://shower.h...
#geshi(bash){{
cd /home/m-kouki/HTK/
tar xzvf HTK-3.4.1.tar.gz
tar xzvf HTK-samples-3.4.1.tar.gz
cd ./htk
./configure --prefix=/home/m-kouki/HTK/
make all
make install
}}
--コンパイルに成功したら、/home/m-kouki/HTK/ 内に実行ファ...
--起動時に自動的にパスが通るようにしておきます(("m-kouki"...
#geshi(bash){{
emacs /home/m-kouki/.bash_profile
}}
---.bash_profile
"export PATH=$PATH:/home/m-kouki/HTK/bin/" を追加
"HTK_HOME=/home/m-kouki/HTK; export HTK_HOME" を追加
---以降は「$HTK_HOME」と指定すれば、自動的に /home/m-kouk...
--パスを追記したら、SSHクライアントソフト((TeraTermProや...
***ディレクトリ作成 [#ze87ff6e]
-作業用ディレクトリを作成しておきます。
--今回は、HTK-CSJ ディレクトリの中に各種ファイルを作って...
#geshi(bash){{
mkdir $HTK_HOME/HTK-CSJ/
mkdir $HTK_HOME/HTK-CSJ/mfcc
mkdir $HTK_HOME/HTK-CSJ/config
mkdir $HTK_HOME/HTK-CSJ/transcription
mkdir $HTK_HOME/HTK-CSJ/recog
mkdir $HTK_HOME/HTK-CSJ/hmm0
mkdir $HTK_HOME/HTK-CSJ/hmm1
mkdir $HTK_HOME/HTK-CSJ/hmm2
mkdir $HTK_HOME/HTK-CSJ/hmm3
mkdir $HTK_HOME/HTK-CSJ/hmm3_sp1
mkdir $HTK_HOME/HTK-CSJ/hmm3_sp2
mkdir $HTK_HOME/HTK-CSJ/hmm4
mkdir $HTK_HOME/HTK-CSJ/hmm5
mkdir $HTK_HOME/HTK-CSJ/hmm6
mkdir $HTK_HOME/HTK-CSJ/hmm7
mkdir $HTK_HOME/HTK-CSJ/hmm7_sp
mkdir $HTK_HOME/HTK-CSJ/hmm8
mkdir $HTK_HOME/HTK-CSJ/hmm9
mkdir $HTK_HOME/HTK-CSJ/hmm10
mkdir $HTK_HOME/HTK-CSJ/hmm10_sp
mkdir $HTK_HOME/HTK-CSJ/hmm11
mkdir $HTK_HOME/HTK-CSJ/hmm12
}}
**1.音声ファイルの準備 [#xe80609f]
-CSJがインストールされているディレクトリを探索して、XMLフ...
--[[SearchXMLPassCSJ.java:http://shower.human.waseda.ac.j...
#geshi(bash){{
java SearchXMLPassCSJ /home/CSJ F $HTK_HOME/HTK-CSJ/trans...
}}
---ここでは、女性のみ対象としています。((もしも disc03 に...
--出力されたファイル($HTK_HOME/HTK-CSJ/transcription/xml...
S08F1465,/home/CSJ/disc13/S08F1465/S08F1465.xml,/home/CS...
S11F1268,/home/CSJ/disc13/S11F1268/S11F1268.xml,/home/CS...
...
**2.テキストファイルの準備 [#u1935c79]
-コーパス付属のXMLファイルを加工して、HTK フォーマットの...
-作る必要のあるファイル一覧と、HTKフォーマットのサンプル...
|BGCOLOR(white):種類|BGCOLOR(white):サンプル|BGCOLOR(whit...
|読み上げテキスト|[[CSJ_F_transcription.PROMPT:http://sho...
|単語辞書|[[CSJ_F_train.word.dict:http://shower.human.was...
|単語ラベル|[[CSJ_F_train.word.lbl:http://shower.human.wa...
|発音辞書|[[CSJ_F_monophones0.dict:http://shower.human.wa...
||[[CSJ_F_monophones1.dict:http://shower.human.waseda.ac....
|使用音素リスト(モノフォン)|[[CSJ_F_monophones0.lst:htt...
||[[CSJ_F_monophones1.lst:http://shower.human.waseda.ac.j...
|音素ラベル(モノフォン)|[[CSJ_F_train.phone0.lbl:http:/...
||[[CSJ_F_train.phone1.lbl:http://shower.human.waseda.ac....
|使用音素リスト(トライフォン)|[[CSJ_F_triphones.lst:htt...
|音素ラベル(トライフォン)|[[CSJ_F_triphone.mlf:http://s...
***2.1.読み上げテキストを作成する [#w519439b]
-[[makePROMPT.xsl:http://shower.human.waseda.ac.jp/~m-kou...
#geshi(bash){{
java HtkMakePromptCSJ $HTK_HOME/HTK-CSJ/transcription/xml...
}}
--[[CSJ_F_transcription.PROMPT:http://shower.human.waseda...
---&color(red){''注意'' : 長音記号「ー」は、ここでは独立...
---CSJでは、固有名詞等は雑音に置換され、音素ラベル「☓」が...
-以降、.PROMPTファイルから全ての辞書ファイルを生成します...
***2.2.単語辞書、単語ラベル、音素ラベルを作成する [#v...
-単語辞書
--[[HtkMakeWordDict.java:http://shower.human.waseda.ac.jp...
#geshi(bash){{
java HtkMakeWordDict $HTK_HOME/HTK-CSJ/transcription/CSJ_...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
--[[CSJ_F_train.word.dict:http://shower.human.waseda.ac.j...
-単語ラベル
--[[HtkMakeWordLbl.java:http://shower.human.waseda.ac.jp/...
#geshi(bash){{
java HtkMakeWordLbl $HTK_HOME/HTK-CSJ/transcription/CSJ_F...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
--[[CSJ_F_train.word.lbl:http://shower.human.waseda.ac.jp...
***2.3.発音辞書と、使用音素リストを作成する(モノフォ...
-モノフォン学習の初期段階では、無音部記号(sil, silence)...
-発音辞書(モノフォン)
--[[HtkMakeMonophonesDict.java:http://shower.human.waseda...
--ショートポーズ記号なし
#geshi(bash){{
java HtkMakeMonophonesDict $HTK_HOME/HTK-CSJ/transcriptio...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
---[[CSJ_F_monophones0.dict:http://shower.human.waseda.ac...
--ショートポーズ記号あり
#geshi(bash){{
java HtkMakeMonophonesDict $HTK_HOME/HTK-CSJ/transcriptio...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
---[[CSJ_F_monophones1.dict:http://shower.human.waseda.ac...
--&color(red){''注意'' : 同じ単語に対して、複数の音素表記...
-使用音素リスト(モノフォン)
--[[HtkMakeMonophonesLst.java:http://shower.human.waseda....
--ショートポーズ記号なし
#geshi(bash){{
java HtkMakeMonophonesLst $HTK_HOME/HTK-CSJ/transcription...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
---[[CSJ_F_monophones0.lst:http://shower.human.waseda.ac....
--ショートポーズ記号あり
#geshi(bash){{
java HtkMakeMonophonesLst $HTK_HOME/HTK-CSJ/transcription...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
---[[CSJ_F_monophones1.lst:http://shower.human.waseda.ac....
***2.3.音素ラベルを作成する [#g8070498]
-音素ラベルも、ショートポーズあり、なしの二種類を作る必要...
--[[HtkMakePhoneLbl.java:http://shower.human.waseda.ac.jp...
--ショートポーズなし
#geshi(bash){{
java HtkMakePhoneLbl $HTK_HOME/HTK-CSJ/transcription/CSJ_...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
---[[CSJ_F_train.phone0.lbl:http://shower.human.waseda.ac...
---&color(red){長音記号は、ここで母音と結合されて長母音と...
--ショートポーズあり
#geshi(bash){{
java HtkMakePhoneLbl $HTK_HOME/HTK-CSJ/transcription/CSJ_...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
---[[CSJ_F_train.phone1.lbl:http://shower.human.waseda.ac...
***2.5.使用音素リストと、音素ラベルを作成する(トライ...
-&color(red){注:[[モノフォンの学習を完了して:http://show...
-はじめに、音素ラベルの仕様ファイルを作ります。
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/mktri.led
}}
--mktri.led
WB sp #sp is word boundary
WB sil #sil is sentence boundary
TC
---1行目と2行目:sp と sil は音素ではないので除外する、と...
---3行目:トライフォンへの変換命令、TCの後は改行しておき...
-使用音素リストと音素ラベルを作成
#geshi(bash){{
HLEd -n $HTK_HOME/HTK-CSJ/transcription/CSJ_F_triphones.l...
}}
--トライフォン音素リスト [[CSJ_F_triphones.lst:http://sh...
トライフォン音素ラベル [[CSJ_F_triphone.mlf:http://shower...
---トライフォン音素ラベルは、モノフォン学習の自動ラベリン...
**3.HTKによるHMMの学習 [#zaff7ec3]
***3.1.音声データのコーディング [#i0457c7f]
-MFCC解析のコーディング仕様ファイル config.hcopy を作成
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/config.hcopy
}}
--config.hcopy
#Cording Parameters
SOURCEFORMAT = WAVE
SOURCEKIND = WAVEFORM
SOURCERATE = 625.0
TARGETKIND = MFCC_E_D_A
TARGETRATE = 100000.0
SAVECOMPRESSED = T
SAVEWITHCRC = F
WINDOWSIZE = 250000.0
USEHAMMING = T
PREEMCOEF = 0.97
NUMCHANS = 24
NUMCEPS = 12
---数字の詳細は [[MFCC解析のツール/HTK(Hidden Markov Mode...
-MFCC解析
--[[HtkRunHCopy.java:http://shower.human.waseda.ac.jp/~m-...
#geshi(bash){{
java HtkRunHCopy $HTK_HOME/HTK-CSJ/transcription/CSJ_F_tr...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
--$HTK_HOME/HTK-CSJ/mfcc 以下に、発話ごとの mfcファイルが...
--また、$HTK_HOME/HTK-CSJ/config 以下に、mfcリストファイ...
***3.2.HMM初期モデルの作成 [#kc961487]
-まずは、学習に使用する音響特徴量を記述した学習仕様ファイ...
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/config.train
}}
--config.train
TARGETKIND = MFCC_E_D_A
-続いて、[[HTK Book p.31以降:http://shower.human.waseda.a...
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/proto
}}
--proto
~o <VecSize> 39 <MFCC_E_D_A>
~h "proto"
<BeginHMM>
<NumStates> 5
<State> 2
<Mean> 39
0.0 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> 39
1.0 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> 39
0.0 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> 39
1.0 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> 39
0.0 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> 39
1.0 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.6 0.4 0.0 0.0
0.0 0.0 0.6 0.4 0.0
0.0 0.0 0.0 0.7 0.3
0.0 0.0 0.0 0.0 0.0
<EndHMM>
-HMM 初期モデルファイル hmm0/proto を生成します。
#geshi(bash){{
HCompV -C $HTK_HOME/HTK-CSJ/config/config.train -f 0.01 -...
}}
--[[hmm0/proto:http://shower.human.waseda.ac.jp/~m-kouki/...
---もしも hmm0/proto ができなかった場合は、xmlfilelist.tx...
-HMM 初期モデルファイル hmm0/proto 中のマクロ定義部分を取...
#geshi(bash){{
grep '~o' $HTK_HOME/HTK-CSJ/config/proto > $HTK_HOME/HTK-...
}}
--[[hmm0/macro:http://shower.human.waseda.ac.jp/~m-kouki/...
-HMM 定義ファイル hmm0/hmmdefs を作成します。
--[[HtkMakeHmmdefs.java:http://shower.human.waseda.ac.jp/...
#geshi(bash){{
java HtkMakeHmmdefs $HTK_HOME/HTK-CSJ/hmm0/proto sjis ./t...
}}
---引数は [protoファイルのパス] [protoファイルの文字コー...
--[[hmm0/hmmdefs:http://shower.human.waseda.ac.jp/~m-kouk...
---hmmdefs は、 hmm0/proto の中身を学習する音素の数だけコ...
***3.3.monophoneHMMの作成 [#g00fc1fc]
-モノフォンの学習(初期モデルのパラメータ推定)を行ないま...
--1回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
---出た FATAL ERROR と対処((音素ラベル train.phone0.lbl ...
>ERROR [+6550] LoadHTKLabels: Junk at end of HTK transcr...
>>→「-T 1」オプションをつけて再実行し、原因の .mfc ファイ...
---以下の警告が出るけれど、無視してOK(以下同様)
Pruning-On[250.0 150.0 1000.0]
WARNING [-7324] StepBack: File ./mfcc/0001_0099.mfc - ...
in HERest
WARNING [-7324] StepBack: File ./mfcc/0001_0102.mfc - ...
in HERest
(略)
WARNING [-2331] UpdateModels: H[2] copied: only 0 egs
in HERest
WARNING [-2331] UpdateModels: v[22] copied: only 0 egs
in HERest
(略)
--2回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
--3回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
-ここまで学習が終わったら、無音部 sil を細分化して、単語...
--モデル修正仕様ファイル sil.hed を作成します。
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/sil.hed
}}
---sil.hed
AT 2 4 0.2 {sil.transP}
AT 4 2 0.2 {sil.transP}
AT 1 3 0.3 {sp.transP}
TI silst {sil.state[3],sp.state[2]}
--初期学習が完了したHMM定義ファイル(hmm3/hmmdefs)の無音...
---[[HtkMakeHmmdefsShortPause.java:http://shower.human.wa...
#geshi(bash){{
java HtkMakeHmmdefsShortPause $HTK_HOME/HTK-CSJ/hmm3/hmmd...
}}
---引数は [hmm3/hmmdefsファイルのパス] [hmm3/hmmdefsファ...
---[[hmm3_sp1/hmmdefs:http://shower.human.waseda.ac.jp/~m...
--モデルの修正を行ないます。
#geshi(bash){{
cp $HTK_HOME/HTK-CSJ/hmm3/macro $HTK_HOME/HTK-CSJ/hmm3_sp1
HHEd -H $HTK_HOME/HTK-CSJ/hmm3_sp1/macro -H $HTK_HOME/HTK...
}}
---hmm3_sp2/hmmdefs と hmm3_sp2/macro ができます。
-修正したモデルについて、さらに2回の学習を行ないます。
--ここからはショートポーズありのモノフォンラベルファイル...
--4回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
--5回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
***3.4.自動ラベリング [#wf331b9e]
-ここまでの学習結果を確認するために、HTK付属のHViteコマン...
#geshi(bash){{
HVite -l '*' -o SWC -b SILENCE -a -H $HTK_HOME/HTK-CSJ/hm...
}}
--コーディング仕様ファイル config.hcopy のパスは指定しな...
-自動ラベリングの結果は、$HTK_HOME/HTK-CSJ/aligned.mlf に...
--[[aligned.mlf:http://shower.human.waseda.ac.jp/~m-kouki...
---音素ラベル [[CSJ_F_train.phone1.lbl:http://shower.huma...
--自動ラベリングの結果(Hviteコマンドに -a, -m オプション...
---seg層を出力 &ref(transalignHTK2textgrid.pl);
---Word層、Auto align層、Segment層、Memo層を出力 &ref(tra...
-ここまでうまくいっていたら、もう2回分 monophone 学習を...
--6回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
--7回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
-音響モデルの認識率を評価したい場合は、[[monophone音響モ...
-&color(red){''※'' 音素の解析や比較が目的であれば、ここま...
***3.5.triphoneHMMの作成 [#r4ab25b9]
-【注】先に [[2.5.使用音素リストと、音素ラベルを作成...
-はじめに、トライフォン初期モデルの仕様ファイル mktri.hed...
--[[HTK Tutorial(HTK-samples-3.4.tar.gz):http://htk.eng...
#geshi(bash){{
maketrihed $HTK_HOME/HTK-CSJ/transcription/CSJ_F_monopho...
}}
---[[mktri.hed:http://shower.human.waseda.ac.jp/~m-kouki/...
---例えば「(*-a+*,a+*,*-a)」は、a という音素の前後の音素...
--ファイルを config ディレクトリに移して、ファイルの整形...
mv mktri.hed $HTK_HOME/HTK-CSJ/config
emacs $HTK_HOME/HTK-CSJ/config/mktri.hed
---音素でない sp の行を削除します。
TI T_sp {(*-sp+*,sp+*,*-sp).transP} を削除
---sil はモノフォンとして扱うように、設定を変えます。
TI T_sil {(*-sil+*,sil+*,*-sil).transP}
↓
TI T_sil {(sil,*-sil+*,sil+*,*-sil).transP} に変更
-トライフォン初期モデルを作成します。
#geshi(bash){{
HHEd -H $HTK_HOME/HTK-CSJ/hmm7/macro -H $HTK_HOME/HTK-CSJ...
}}
--ここで作られたのは、1つの音素内の状態のモデルになります...
-CSJ_F_train.hmm.script にあるのに CSJ_F_triphone.mlf に...
--[[HtkDeleteTriphoneScript.java:http://shower.human.wase...
#geshi(bash){{
java HtkDeleteTriphoneScript $HTK_HOME/HTK-CSJ/transcript...
}}
---引数は [トライフォン音素ラベル(triphone.mlf)ファイル...
-トライフォンの学習(初期モデルのパラメータ推定)を行ない...
--8回目
#geshi(bash){{
HERest -B -C $HTK_HOME/HTK-CSJ/config/config.train -I $HT...
}}
--9回目
#geshi(bash){{
HERest -B -C $HTK_HOME/HTK-CSJ/config/config.train -I $HT...
}}
--10回目
#geshi(bash){{
HERest -B -C $HTK_HOME/HTK-CSJ/config/config.train -I $HT...
}}
-トライフォン学習では大量の音素数が必要なので、類似した音...
--'''トライフォン音素リスト [[CSJ_F_triphones.lst:http://...
--[[HTK Tutorial(HTK-samples-3.4.tar.gz):http://htk.eng...
#geshi(bash){{
mkclscript TB 350.0 $HTK_HOME/HTK-CSJ/transcription/CSJ_F...
}}
---configディレクトリ内に、モデル類別木ファイル [[tree.he...
--ここで、tree.hed には TB の情報しかないので、[[日本語話...
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/tree.hed
}}
---TB ラベルの前後に情報を追加して、最終的に [[このような...
---&color(red){ファイル中でトライフォン音素リスト "/home/...
---上記で設定しているのは、音声学の知見に基づいたクラスタ...
--tree.hed の設定を使って、モデル類別を行ないます。
#geshi(bash){{
HHEd -B -H $HTK_HOME/HTK-CSJ/hmm10/macro -H $HTK_HOME/HTK...
}}
---transcription ディレクトリに認識用モデルリスト [[CSJ_...
-さらに学習を続けます。
--11回目
#geshi(bash){{
HERest -B -C $HTK_HOME/HTK-CSJ/config/config.train -I $HT...
}}
--12回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
---「-B」オプション(バイナリ指定)を除いて、結果をテキス...
---[[学習12回目のhmmdefs:http://shower.human.waseda.ac.jp...
**4.音声認識を試す [#s8c3b46a]
***monophone音響モデルの認識率を求める [#h8506570]
-monophone学習までが完了しているとします。
-音声認識実験用のファイルを作ります。
--単語辞書ファイルにSTARTラベルとENDラベルを追記する
#geshi(bash){{
cp $HTK_HOME/HTK-CSJ/transcription/CSJ_F_train.word.dict ...
emacs $HTK_HOME/HTK-CSJ/recog/recog_CSJ_F_train.word.dict
}}
---以下のように書き換える
×
××
(略)
↓
START
END
×
××
(略)
--発音辞書ファイルにSTARTラベルとENDラベルを追記する
#geshi(bash){{
cp $HTK_HOME/HTK-CSJ/transcription/CSJ_F_monophones1.dict...
emacs $HTK_HOME/HTK-CSJ/recog/recog_CSJ_F_monophones1.dict
}}
---以下のように書き換える
SILENCE sil
× sp
(略)
↓
START sp
END sp
SILENCE sil
× sp
(略)
--&color(red){なお、上の「単語辞書ファイルにSTARTラベルと...
---[[HtkAddStartEnd.java:http://shower.human.waseda.ac.jp...
#geshi(bash){{
java HtkAddStartEnd $HTK_HOME/HTK-CSJ/transcription/CSJ_F...
}}
--認識実験に使うファイルのリストを作る
---今回は、mfcリストファイル [[CSJ_F_train.hmm.script:htt...
#geshi(bash){{
cp $HTK_HOME/HTK-CSJ/config/CSJ_F_train.hmm.script $HTK_H...
}}
--ネットワーク文法の生成
---recog/bigram の作成((単語ラベル CSJ_F_train.word.lbl ...
#geshi(bash){{
HLStats -s START END -b $HTK_HOME/HTK-CSJ/recog/bigram -o...
}}
---recog/bg.networkの作成
#geshi(bash){{
HBuild -s START END -n $HTK_HOME/HTK-CSJ/recog/bigram $HT...
}}
-音声認識
--学習7回目の設定ファイル($HTK_HOME/HTK-CSJ/hmm7)の評価...
#geshi(bash){{
HVite -C $HTK_HOME/HTK-CSJ/config/config.train -H $HTK_HO...
}}
--認識結果は recog/recout_mono.mlf に出力されます。
---[[recout_mono.mlf:http://shower.human.waseda.ac.jp/~m-...
---4列目のデータが認識尤度。設定を変えれば音素ごとの尤度...
-認識率を求めます。
--[[HtkDeleteSpaceWordLbl.java:http://shower.human.waseda...
#geshi(bash){{
java HtkDeleteSpaceWordLbl $HTK_HOME/HTK-CSJ/transcriptio...
}}
---引数は [単語ラベル(_train.word.lbl)ファイルのパス] [...
---発話のない区間を除去した単語ラベルファイル recog_CSJ_F...
--[[HtkDeleteSpaceMonoMlf.java:http://shower.human.waseda...
#geshi(bash){{
java HtkDeleteSpaceMonoMlf $HTK_HOME/HTK-CSJ/recog/recout...
}}
---引数は [学習結果(.mlf)ファイルのパス] [修正後の学習...
---発話のない区間を除去した学習結果ファイル recout_mono_d...
---同時に、学習結果ファイルには存在するが、単語ラベルには...
--認識率の計算((HResults に -f オプションをつけると、ひと...
#geshi(bash){{
HResults -I $HTK_HOME/HTK-CSJ/recog/recog_CSJ_F_train.wor...
}}
--以下のように表示されます。
====================== HTK Results Analysis ============...
Date: Wed May 19 21:52:19 2010
Ref : /home/m-kouki/HTK/HTK-CSJ/out/rec_CSJ_F_train.wo...
Rec : /home/m-kouki/HTK/HTK-CSJ/out/recout_mono_delspa...
------------------------ Overall Results ---------------...
SENT: %Correct=0.00 [H=0, S=737, N=737]
WORD: %Corr=51.98, Acc=20.39 [H=3001, D=602, S=2170, I=1...
========================================================...
---SENT は、「N個の発話文のうち、H個の文が正しく認識され...
---WORD は、「N個の単語のうち、 H個の単語が正しく認識され...
***triphone音響モデルの認識率を求める [#td25d0d2]
-triphone学習までが完了しているとします。
-「評価用のラベルファイルを作る」 ~ 「ネットワーク文法の...
-トライフォン 音声認識仕様ファイルの作成
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/config.hvite.tri
}}
--config.hvite.tri
TARGETKIND = MFCC_E_D_A # MFCC_E + Delta + Delta Delta
FORCECXTEXP = T
ALLOWXWRDEXP = F
---テキスト p.22 より引用。なおモノフォンの認識実験のとき...
-音声認識
--学習12回目の設定ファイル($HTK_HOME/HTK-CSJ/hmm12)の評...
#geshi(bash){{
HVite -C $HTK_HOME/HTK-CSJ/config/config.hvite.tri -H $HT...
}}
---出た FATAL ERROR と対処((このエラーは、十分な量の音声...
>ERROR [+8231] GetHCIModel: Cannot find hmm [e-]y[+a]
>>→ 音素リスト CSJ_F_triphones_tied.lst には「e y a」の音...
>対処法1
>>&ref(delTriphone.txt); のように、recog_CSJ_F_monophones...
>対処法2
>>recog_CSJ_F_monophones1.dict から「e y a」を含む単語(...
---対処法2を実施、[[HtkMakeRecogDicts.java:http://shower...
#ref(todo_HTK.txt);
まだエラーが出る。
***monophone音響モデルをJuliusに組み込む [#rc28943d]
***triphone音響モデルをJuliusに組み込む [#oc96ff69]
**5.話者適応 [#e2b4a6f8]
-'''[[音響モデルの適応と評価:http://shower.human.waseda.a...
-'''[[SOMによる音響モデルの話者適応:http://shower.human.w...
-'''[[kmeans法による音響モデルの話者適応:http://shower.hu...
**6.その他の検討 [#k3a6df78]
-'''[[JNASによる音響モデルの構築:http://shower.human.wase...
--JNAS … Japanese Newspaper Article Sentences の略。
-'''[[SOMによる母音カテゴリの推定:http://shower.human.was...
-'''[[複数混合数のモノフォン音響モデル:http://shower.huma...
-&pgid(,HTSによるHMM音声合成);
終了行:
#access
#analog
*日本語話し言葉コーパス(CSJ)を使ったHTK音響モデル構築((...
#contents
**0.はじめに [#ad7e6b11]
***用語 [#m830ee9f]
-CSJ … Corpus of Spontaneous Japanese の略。
-HTK … Hidden Markov Model Tool Kit の略。
--音声認識アプリ Julius/Julian の音響モデルとして利用でき...
-Hidden Markov Model(HMM) … 隠れマルコフモデル ('''[[参...
***教科書・参考文献 [#ae4bbb62]
-「'''[[HTKによる大語彙連続音声認識, 菊池英明, 2000:http:...
--[[HTK(Hidden Markov Model Toolkit):http://www.f.waseda....
-[[HTK Book:http://shower.human.waseda.ac.jp/~m-kouki/pas...
-[[音声メディア研究室 HMM 作成メモ:http://izanami.tl.fuku...
-[[JNAS CDROMからIPA音響モデルの作成法:http://www.cyb.mei...
-[[HTK の使い方:http://vision.kuee.kyoto-u.ac.jp/~hiroaki...
-[[連続音声認識システムに使用するアルゴリズム(Viterbiア...
-[[UNDERSTANDING HTK ERROR MESSAGES (USING HTK):http://ww...
***インストール(Linux) [#qc0725d1]
-まずは、[[HTKをダウンロード:http://htk.eng.cam.ac.uk/dow...
--Linux/Unix downloads > HTK source code (tar+gzip archi...
--ここでは、ファイルを /home/m-kouki/HTK/ 以下におきまし...
-解凍してコンパイルします(([[試行錯誤の後:http://shower.h...
#geshi(bash){{
cd /home/m-kouki/HTK/
tar xzvf HTK-3.4.1.tar.gz
tar xzvf HTK-samples-3.4.1.tar.gz
cd ./htk
./configure --prefix=/home/m-kouki/HTK/
make all
make install
}}
--コンパイルに成功したら、/home/m-kouki/HTK/ 内に実行ファ...
--起動時に自動的にパスが通るようにしておきます(("m-kouki"...
#geshi(bash){{
emacs /home/m-kouki/.bash_profile
}}
---.bash_profile
"export PATH=$PATH:/home/m-kouki/HTK/bin/" を追加
"HTK_HOME=/home/m-kouki/HTK; export HTK_HOME" を追加
---以降は「$HTK_HOME」と指定すれば、自動的に /home/m-kouk...
--パスを追記したら、SSHクライアントソフト((TeraTermProや...
***ディレクトリ作成 [#ze87ff6e]
-作業用ディレクトリを作成しておきます。
--今回は、HTK-CSJ ディレクトリの中に各種ファイルを作って...
#geshi(bash){{
mkdir $HTK_HOME/HTK-CSJ/
mkdir $HTK_HOME/HTK-CSJ/mfcc
mkdir $HTK_HOME/HTK-CSJ/config
mkdir $HTK_HOME/HTK-CSJ/transcription
mkdir $HTK_HOME/HTK-CSJ/recog
mkdir $HTK_HOME/HTK-CSJ/hmm0
mkdir $HTK_HOME/HTK-CSJ/hmm1
mkdir $HTK_HOME/HTK-CSJ/hmm2
mkdir $HTK_HOME/HTK-CSJ/hmm3
mkdir $HTK_HOME/HTK-CSJ/hmm3_sp1
mkdir $HTK_HOME/HTK-CSJ/hmm3_sp2
mkdir $HTK_HOME/HTK-CSJ/hmm4
mkdir $HTK_HOME/HTK-CSJ/hmm5
mkdir $HTK_HOME/HTK-CSJ/hmm6
mkdir $HTK_HOME/HTK-CSJ/hmm7
mkdir $HTK_HOME/HTK-CSJ/hmm7_sp
mkdir $HTK_HOME/HTK-CSJ/hmm8
mkdir $HTK_HOME/HTK-CSJ/hmm9
mkdir $HTK_HOME/HTK-CSJ/hmm10
mkdir $HTK_HOME/HTK-CSJ/hmm10_sp
mkdir $HTK_HOME/HTK-CSJ/hmm11
mkdir $HTK_HOME/HTK-CSJ/hmm12
}}
**1.音声ファイルの準備 [#xe80609f]
-CSJがインストールされているディレクトリを探索して、XMLフ...
--[[SearchXMLPassCSJ.java:http://shower.human.waseda.ac.j...
#geshi(bash){{
java SearchXMLPassCSJ /home/CSJ F $HTK_HOME/HTK-CSJ/trans...
}}
---ここでは、女性のみ対象としています。((もしも disc03 に...
--出力されたファイル($HTK_HOME/HTK-CSJ/transcription/xml...
S08F1465,/home/CSJ/disc13/S08F1465/S08F1465.xml,/home/CS...
S11F1268,/home/CSJ/disc13/S11F1268/S11F1268.xml,/home/CS...
...
**2.テキストファイルの準備 [#u1935c79]
-コーパス付属のXMLファイルを加工して、HTK フォーマットの...
-作る必要のあるファイル一覧と、HTKフォーマットのサンプル...
|BGCOLOR(white):種類|BGCOLOR(white):サンプル|BGCOLOR(whit...
|読み上げテキスト|[[CSJ_F_transcription.PROMPT:http://sho...
|単語辞書|[[CSJ_F_train.word.dict:http://shower.human.was...
|単語ラベル|[[CSJ_F_train.word.lbl:http://shower.human.wa...
|発音辞書|[[CSJ_F_monophones0.dict:http://shower.human.wa...
||[[CSJ_F_monophones1.dict:http://shower.human.waseda.ac....
|使用音素リスト(モノフォン)|[[CSJ_F_monophones0.lst:htt...
||[[CSJ_F_monophones1.lst:http://shower.human.waseda.ac.j...
|音素ラベル(モノフォン)|[[CSJ_F_train.phone0.lbl:http:/...
||[[CSJ_F_train.phone1.lbl:http://shower.human.waseda.ac....
|使用音素リスト(トライフォン)|[[CSJ_F_triphones.lst:htt...
|音素ラベル(トライフォン)|[[CSJ_F_triphone.mlf:http://s...
***2.1.読み上げテキストを作成する [#w519439b]
-[[makePROMPT.xsl:http://shower.human.waseda.ac.jp/~m-kou...
#geshi(bash){{
java HtkMakePromptCSJ $HTK_HOME/HTK-CSJ/transcription/xml...
}}
--[[CSJ_F_transcription.PROMPT:http://shower.human.waseda...
---&color(red){''注意'' : 長音記号「ー」は、ここでは独立...
---CSJでは、固有名詞等は雑音に置換され、音素ラベル「☓」が...
-以降、.PROMPTファイルから全ての辞書ファイルを生成します...
***2.2.単語辞書、単語ラベル、音素ラベルを作成する [#v...
-単語辞書
--[[HtkMakeWordDict.java:http://shower.human.waseda.ac.jp...
#geshi(bash){{
java HtkMakeWordDict $HTK_HOME/HTK-CSJ/transcription/CSJ_...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
--[[CSJ_F_train.word.dict:http://shower.human.waseda.ac.j...
-単語ラベル
--[[HtkMakeWordLbl.java:http://shower.human.waseda.ac.jp/...
#geshi(bash){{
java HtkMakeWordLbl $HTK_HOME/HTK-CSJ/transcription/CSJ_F...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
--[[CSJ_F_train.word.lbl:http://shower.human.waseda.ac.jp...
***2.3.発音辞書と、使用音素リストを作成する(モノフォ...
-モノフォン学習の初期段階では、無音部記号(sil, silence)...
-発音辞書(モノフォン)
--[[HtkMakeMonophonesDict.java:http://shower.human.waseda...
--ショートポーズ記号なし
#geshi(bash){{
java HtkMakeMonophonesDict $HTK_HOME/HTK-CSJ/transcriptio...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
---[[CSJ_F_monophones0.dict:http://shower.human.waseda.ac...
--ショートポーズ記号あり
#geshi(bash){{
java HtkMakeMonophonesDict $HTK_HOME/HTK-CSJ/transcriptio...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
---[[CSJ_F_monophones1.dict:http://shower.human.waseda.ac...
--&color(red){''注意'' : 同じ単語に対して、複数の音素表記...
-使用音素リスト(モノフォン)
--[[HtkMakeMonophonesLst.java:http://shower.human.waseda....
--ショートポーズ記号なし
#geshi(bash){{
java HtkMakeMonophonesLst $HTK_HOME/HTK-CSJ/transcription...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
---[[CSJ_F_monophones0.lst:http://shower.human.waseda.ac....
--ショートポーズ記号あり
#geshi(bash){{
java HtkMakeMonophonesLst $HTK_HOME/HTK-CSJ/transcription...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
---[[CSJ_F_monophones1.lst:http://shower.human.waseda.ac....
***2.3.音素ラベルを作成する [#g8070498]
-音素ラベルも、ショートポーズあり、なしの二種類を作る必要...
--[[HtkMakePhoneLbl.java:http://shower.human.waseda.ac.jp...
--ショートポーズなし
#geshi(bash){{
java HtkMakePhoneLbl $HTK_HOME/HTK-CSJ/transcription/CSJ_...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
---[[CSJ_F_train.phone0.lbl:http://shower.human.waseda.ac...
---&color(red){長音記号は、ここで母音と結合されて長母音と...
--ショートポーズあり
#geshi(bash){{
java HtkMakePhoneLbl $HTK_HOME/HTK-CSJ/transcription/CSJ_...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
---[[CSJ_F_train.phone1.lbl:http://shower.human.waseda.ac...
***2.5.使用音素リストと、音素ラベルを作成する(トライ...
-&color(red){注:[[モノフォンの学習を完了して:http://show...
-はじめに、音素ラベルの仕様ファイルを作ります。
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/mktri.led
}}
--mktri.led
WB sp #sp is word boundary
WB sil #sil is sentence boundary
TC
---1行目と2行目:sp と sil は音素ではないので除外する、と...
---3行目:トライフォンへの変換命令、TCの後は改行しておき...
-使用音素リストと音素ラベルを作成
#geshi(bash){{
HLEd -n $HTK_HOME/HTK-CSJ/transcription/CSJ_F_triphones.l...
}}
--トライフォン音素リスト [[CSJ_F_triphones.lst:http://sh...
トライフォン音素ラベル [[CSJ_F_triphone.mlf:http://shower...
---トライフォン音素ラベルは、モノフォン学習の自動ラベリン...
**3.HTKによるHMMの学習 [#zaff7ec3]
***3.1.音声データのコーディング [#i0457c7f]
-MFCC解析のコーディング仕様ファイル config.hcopy を作成
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/config.hcopy
}}
--config.hcopy
#Cording Parameters
SOURCEFORMAT = WAVE
SOURCEKIND = WAVEFORM
SOURCERATE = 625.0
TARGETKIND = MFCC_E_D_A
TARGETRATE = 100000.0
SAVECOMPRESSED = T
SAVEWITHCRC = F
WINDOWSIZE = 250000.0
USEHAMMING = T
PREEMCOEF = 0.97
NUMCHANS = 24
NUMCEPS = 12
---数字の詳細は [[MFCC解析のツール/HTK(Hidden Markov Mode...
-MFCC解析
--[[HtkRunHCopy.java:http://shower.human.waseda.ac.jp/~m-...
#geshi(bash){{
java HtkRunHCopy $HTK_HOME/HTK-CSJ/transcription/CSJ_F_tr...
}}
---引数は [.PROMPTファイルのパス] [.PROMPTファイルの文字...
--$HTK_HOME/HTK-CSJ/mfcc 以下に、発話ごとの mfcファイルが...
--また、$HTK_HOME/HTK-CSJ/config 以下に、mfcリストファイ...
***3.2.HMM初期モデルの作成 [#kc961487]
-まずは、学習に使用する音響特徴量を記述した学習仕様ファイ...
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/config.train
}}
--config.train
TARGETKIND = MFCC_E_D_A
-続いて、[[HTK Book p.31以降:http://shower.human.waseda.a...
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/proto
}}
--proto
~o <VecSize> 39 <MFCC_E_D_A>
~h "proto"
<BeginHMM>
<NumStates> 5
<State> 2
<Mean> 39
0.0 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> 39
1.0 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> 39
0.0 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> 39
1.0 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> 39
0.0 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> 39
1.0 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.6 0.4 0.0 0.0
0.0 0.0 0.6 0.4 0.0
0.0 0.0 0.0 0.7 0.3
0.0 0.0 0.0 0.0 0.0
<EndHMM>
-HMM 初期モデルファイル hmm0/proto を生成します。
#geshi(bash){{
HCompV -C $HTK_HOME/HTK-CSJ/config/config.train -f 0.01 -...
}}
--[[hmm0/proto:http://shower.human.waseda.ac.jp/~m-kouki/...
---もしも hmm0/proto ができなかった場合は、xmlfilelist.tx...
-HMM 初期モデルファイル hmm0/proto 中のマクロ定義部分を取...
#geshi(bash){{
grep '~o' $HTK_HOME/HTK-CSJ/config/proto > $HTK_HOME/HTK-...
}}
--[[hmm0/macro:http://shower.human.waseda.ac.jp/~m-kouki/...
-HMM 定義ファイル hmm0/hmmdefs を作成します。
--[[HtkMakeHmmdefs.java:http://shower.human.waseda.ac.jp/...
#geshi(bash){{
java HtkMakeHmmdefs $HTK_HOME/HTK-CSJ/hmm0/proto sjis ./t...
}}
---引数は [protoファイルのパス] [protoファイルの文字コー...
--[[hmm0/hmmdefs:http://shower.human.waseda.ac.jp/~m-kouk...
---hmmdefs は、 hmm0/proto の中身を学習する音素の数だけコ...
***3.3.monophoneHMMの作成 [#g00fc1fc]
-モノフォンの学習(初期モデルのパラメータ推定)を行ないま...
--1回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
---出た FATAL ERROR と対処((音素ラベル train.phone0.lbl ...
>ERROR [+6550] LoadHTKLabels: Junk at end of HTK transcr...
>>→「-T 1」オプションをつけて再実行し、原因の .mfc ファイ...
---以下の警告が出るけれど、無視してOK(以下同様)
Pruning-On[250.0 150.0 1000.0]
WARNING [-7324] StepBack: File ./mfcc/0001_0099.mfc - ...
in HERest
WARNING [-7324] StepBack: File ./mfcc/0001_0102.mfc - ...
in HERest
(略)
WARNING [-2331] UpdateModels: H[2] copied: only 0 egs
in HERest
WARNING [-2331] UpdateModels: v[22] copied: only 0 egs
in HERest
(略)
--2回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
--3回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
-ここまで学習が終わったら、無音部 sil を細分化して、単語...
--モデル修正仕様ファイル sil.hed を作成します。
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/sil.hed
}}
---sil.hed
AT 2 4 0.2 {sil.transP}
AT 4 2 0.2 {sil.transP}
AT 1 3 0.3 {sp.transP}
TI silst {sil.state[3],sp.state[2]}
--初期学習が完了したHMM定義ファイル(hmm3/hmmdefs)の無音...
---[[HtkMakeHmmdefsShortPause.java:http://shower.human.wa...
#geshi(bash){{
java HtkMakeHmmdefsShortPause $HTK_HOME/HTK-CSJ/hmm3/hmmd...
}}
---引数は [hmm3/hmmdefsファイルのパス] [hmm3/hmmdefsファ...
---[[hmm3_sp1/hmmdefs:http://shower.human.waseda.ac.jp/~m...
--モデルの修正を行ないます。
#geshi(bash){{
cp $HTK_HOME/HTK-CSJ/hmm3/macro $HTK_HOME/HTK-CSJ/hmm3_sp1
HHEd -H $HTK_HOME/HTK-CSJ/hmm3_sp1/macro -H $HTK_HOME/HTK...
}}
---hmm3_sp2/hmmdefs と hmm3_sp2/macro ができます。
-修正したモデルについて、さらに2回の学習を行ないます。
--ここからはショートポーズありのモノフォンラベルファイル...
--4回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
--5回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
***3.4.自動ラベリング [#wf331b9e]
-ここまでの学習結果を確認するために、HTK付属のHViteコマン...
#geshi(bash){{
HVite -l '*' -o SWC -b SILENCE -a -H $HTK_HOME/HTK-CSJ/hm...
}}
--コーディング仕様ファイル config.hcopy のパスは指定しな...
-自動ラベリングの結果は、$HTK_HOME/HTK-CSJ/aligned.mlf に...
--[[aligned.mlf:http://shower.human.waseda.ac.jp/~m-kouki...
---音素ラベル [[CSJ_F_train.phone1.lbl:http://shower.huma...
--自動ラベリングの結果(Hviteコマンドに -a, -m オプション...
---seg層を出力 &ref(transalignHTK2textgrid.pl);
---Word層、Auto align層、Segment層、Memo層を出力 &ref(tra...
-ここまでうまくいっていたら、もう2回分 monophone 学習を...
--6回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
--7回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
-音響モデルの認識率を評価したい場合は、[[monophone音響モ...
-&color(red){''※'' 音素の解析や比較が目的であれば、ここま...
***3.5.triphoneHMMの作成 [#r4ab25b9]
-【注】先に [[2.5.使用音素リストと、音素ラベルを作成...
-はじめに、トライフォン初期モデルの仕様ファイル mktri.hed...
--[[HTK Tutorial(HTK-samples-3.4.tar.gz):http://htk.eng...
#geshi(bash){{
maketrihed $HTK_HOME/HTK-CSJ/transcription/CSJ_F_monopho...
}}
---[[mktri.hed:http://shower.human.waseda.ac.jp/~m-kouki/...
---例えば「(*-a+*,a+*,*-a)」は、a という音素の前後の音素...
--ファイルを config ディレクトリに移して、ファイルの整形...
mv mktri.hed $HTK_HOME/HTK-CSJ/config
emacs $HTK_HOME/HTK-CSJ/config/mktri.hed
---音素でない sp の行を削除します。
TI T_sp {(*-sp+*,sp+*,*-sp).transP} を削除
---sil はモノフォンとして扱うように、設定を変えます。
TI T_sil {(*-sil+*,sil+*,*-sil).transP}
↓
TI T_sil {(sil,*-sil+*,sil+*,*-sil).transP} に変更
-トライフォン初期モデルを作成します。
#geshi(bash){{
HHEd -H $HTK_HOME/HTK-CSJ/hmm7/macro -H $HTK_HOME/HTK-CSJ...
}}
--ここで作られたのは、1つの音素内の状態のモデルになります...
-CSJ_F_train.hmm.script にあるのに CSJ_F_triphone.mlf に...
--[[HtkDeleteTriphoneScript.java:http://shower.human.wase...
#geshi(bash){{
java HtkDeleteTriphoneScript $HTK_HOME/HTK-CSJ/transcript...
}}
---引数は [トライフォン音素ラベル(triphone.mlf)ファイル...
-トライフォンの学習(初期モデルのパラメータ推定)を行ない...
--8回目
#geshi(bash){{
HERest -B -C $HTK_HOME/HTK-CSJ/config/config.train -I $HT...
}}
--9回目
#geshi(bash){{
HERest -B -C $HTK_HOME/HTK-CSJ/config/config.train -I $HT...
}}
--10回目
#geshi(bash){{
HERest -B -C $HTK_HOME/HTK-CSJ/config/config.train -I $HT...
}}
-トライフォン学習では大量の音素数が必要なので、類似した音...
--'''トライフォン音素リスト [[CSJ_F_triphones.lst:http://...
--[[HTK Tutorial(HTK-samples-3.4.tar.gz):http://htk.eng...
#geshi(bash){{
mkclscript TB 350.0 $HTK_HOME/HTK-CSJ/transcription/CSJ_F...
}}
---configディレクトリ内に、モデル類別木ファイル [[tree.he...
--ここで、tree.hed には TB の情報しかないので、[[日本語話...
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/tree.hed
}}
---TB ラベルの前後に情報を追加して、最終的に [[このような...
---&color(red){ファイル中でトライフォン音素リスト "/home/...
---上記で設定しているのは、音声学の知見に基づいたクラスタ...
--tree.hed の設定を使って、モデル類別を行ないます。
#geshi(bash){{
HHEd -B -H $HTK_HOME/HTK-CSJ/hmm10/macro -H $HTK_HOME/HTK...
}}
---transcription ディレクトリに認識用モデルリスト [[CSJ_...
-さらに学習を続けます。
--11回目
#geshi(bash){{
HERest -B -C $HTK_HOME/HTK-CSJ/config/config.train -I $HT...
}}
--12回目
#geshi(bash){{
HERest -C $HTK_HOME/HTK-CSJ/config/config.train -I $HTK_H...
}}
---「-B」オプション(バイナリ指定)を除いて、結果をテキス...
---[[学習12回目のhmmdefs:http://shower.human.waseda.ac.jp...
**4.音声認識を試す [#s8c3b46a]
***monophone音響モデルの認識率を求める [#h8506570]
-monophone学習までが完了しているとします。
-音声認識実験用のファイルを作ります。
--単語辞書ファイルにSTARTラベルとENDラベルを追記する
#geshi(bash){{
cp $HTK_HOME/HTK-CSJ/transcription/CSJ_F_train.word.dict ...
emacs $HTK_HOME/HTK-CSJ/recog/recog_CSJ_F_train.word.dict
}}
---以下のように書き換える
×
××
(略)
↓
START
END
×
××
(略)
--発音辞書ファイルにSTARTラベルとENDラベルを追記する
#geshi(bash){{
cp $HTK_HOME/HTK-CSJ/transcription/CSJ_F_monophones1.dict...
emacs $HTK_HOME/HTK-CSJ/recog/recog_CSJ_F_monophones1.dict
}}
---以下のように書き換える
SILENCE sil
× sp
(略)
↓
START sp
END sp
SILENCE sil
× sp
(略)
--&color(red){なお、上の「単語辞書ファイルにSTARTラベルと...
---[[HtkAddStartEnd.java:http://shower.human.waseda.ac.jp...
#geshi(bash){{
java HtkAddStartEnd $HTK_HOME/HTK-CSJ/transcription/CSJ_F...
}}
--認識実験に使うファイルのリストを作る
---今回は、mfcリストファイル [[CSJ_F_train.hmm.script:htt...
#geshi(bash){{
cp $HTK_HOME/HTK-CSJ/config/CSJ_F_train.hmm.script $HTK_H...
}}
--ネットワーク文法の生成
---recog/bigram の作成((単語ラベル CSJ_F_train.word.lbl ...
#geshi(bash){{
HLStats -s START END -b $HTK_HOME/HTK-CSJ/recog/bigram -o...
}}
---recog/bg.networkの作成
#geshi(bash){{
HBuild -s START END -n $HTK_HOME/HTK-CSJ/recog/bigram $HT...
}}
-音声認識
--学習7回目の設定ファイル($HTK_HOME/HTK-CSJ/hmm7)の評価...
#geshi(bash){{
HVite -C $HTK_HOME/HTK-CSJ/config/config.train -H $HTK_HO...
}}
--認識結果は recog/recout_mono.mlf に出力されます。
---[[recout_mono.mlf:http://shower.human.waseda.ac.jp/~m-...
---4列目のデータが認識尤度。設定を変えれば音素ごとの尤度...
-認識率を求めます。
--[[HtkDeleteSpaceWordLbl.java:http://shower.human.waseda...
#geshi(bash){{
java HtkDeleteSpaceWordLbl $HTK_HOME/HTK-CSJ/transcriptio...
}}
---引数は [単語ラベル(_train.word.lbl)ファイルのパス] [...
---発話のない区間を除去した単語ラベルファイル recog_CSJ_F...
--[[HtkDeleteSpaceMonoMlf.java:http://shower.human.waseda...
#geshi(bash){{
java HtkDeleteSpaceMonoMlf $HTK_HOME/HTK-CSJ/recog/recout...
}}
---引数は [学習結果(.mlf)ファイルのパス] [修正後の学習...
---発話のない区間を除去した学習結果ファイル recout_mono_d...
---同時に、学習結果ファイルには存在するが、単語ラベルには...
--認識率の計算((HResults に -f オプションをつけると、ひと...
#geshi(bash){{
HResults -I $HTK_HOME/HTK-CSJ/recog/recog_CSJ_F_train.wor...
}}
--以下のように表示されます。
====================== HTK Results Analysis ============...
Date: Wed May 19 21:52:19 2010
Ref : /home/m-kouki/HTK/HTK-CSJ/out/rec_CSJ_F_train.wo...
Rec : /home/m-kouki/HTK/HTK-CSJ/out/recout_mono_delspa...
------------------------ Overall Results ---------------...
SENT: %Correct=0.00 [H=0, S=737, N=737]
WORD: %Corr=51.98, Acc=20.39 [H=3001, D=602, S=2170, I=1...
========================================================...
---SENT は、「N個の発話文のうち、H個の文が正しく認識され...
---WORD は、「N個の単語のうち、 H個の単語が正しく認識され...
***triphone音響モデルの認識率を求める [#td25d0d2]
-triphone学習までが完了しているとします。
-「評価用のラベルファイルを作る」 ~ 「ネットワーク文法の...
-トライフォン 音声認識仕様ファイルの作成
#geshi(bash){{
emacs $HTK_HOME/HTK-CSJ/config/config.hvite.tri
}}
--config.hvite.tri
TARGETKIND = MFCC_E_D_A # MFCC_E + Delta + Delta Delta
FORCECXTEXP = T
ALLOWXWRDEXP = F
---テキスト p.22 より引用。なおモノフォンの認識実験のとき...
-音声認識
--学習12回目の設定ファイル($HTK_HOME/HTK-CSJ/hmm12)の評...
#geshi(bash){{
HVite -C $HTK_HOME/HTK-CSJ/config/config.hvite.tri -H $HT...
}}
---出た FATAL ERROR と対処((このエラーは、十分な量の音声...
>ERROR [+8231] GetHCIModel: Cannot find hmm [e-]y[+a]
>>→ 音素リスト CSJ_F_triphones_tied.lst には「e y a」の音...
>対処法1
>>&ref(delTriphone.txt); のように、recog_CSJ_F_monophones...
>対処法2
>>recog_CSJ_F_monophones1.dict から「e y a」を含む単語(...
---対処法2を実施、[[HtkMakeRecogDicts.java:http://shower...
#ref(todo_HTK.txt);
まだエラーが出る。
***monophone音響モデルをJuliusに組み込む [#rc28943d]
***triphone音響モデルをJuliusに組み込む [#oc96ff69]
**5.話者適応 [#e2b4a6f8]
-'''[[音響モデルの適応と評価:http://shower.human.waseda.a...
-'''[[SOMによる音響モデルの話者適応:http://shower.human.w...
-'''[[kmeans法による音響モデルの話者適応:http://shower.hu...
**6.その他の検討 [#k3a6df78]
-'''[[JNASによる音響モデルの構築:http://shower.human.wase...
--JNAS … Japanese Newspaper Article Sentences の略。
-'''[[SOMによる母音カテゴリの推定:http://shower.human.was...
-'''[[複数混合数のモノフォン音響モデル:http://shower.huma...
-&pgid(,HTSによるHMM音声合成);
ページ名:
既存のページ名で編集する