對於想盡快上手的新人來說,這部分內容是又累又沒勁,可是又不得不做,沒辦法……硬着頭皮上吧。
1、編寫grammer,生成wordnet
(1)手動編輯grammer文件,並置於config目錄下,內容如下:
$color = RED | BLUE | YELLOW;
(SENT-START ($color) SENT-END)
(2)生成wordnet:
HParse ./config/grammer ./config/wordnet
此時,config目錄會生成wordnet;
2、生成字典:
(1)手動編輯wordlist文件,並置於lists目錄下,wordlist內容如下(內容是經過字典排序的,請不要改動):
BLUE RED SENT-END SENT-START YELLOW
(2)手動編輯global.ded文件,並置於config目錄下,global.ded內容如下
AS sp RS cmu MP sil sil sp
(3)生成monophones和dict_color:
將字典文件的“beep”和“otherDict"置於dict目錄下,然后執行:
HDMan -m -w ./lists/wordlist -n ./lists/monophones -g ./config/global.ded ./dict/dict_color ./dict/beep ./dict/otherDict
此時,lists目錄會生成monophones;dict目錄里會生成dict_color;
3、”wav文件清單“轉"mlf文件清單:
(1)手動編輯labels目錄下“trainprompts”文件(還記得“(一)准備訓練語音文件”中的那份清單嗎?),具體方式為:
BLUE ===》 s01 SENT-START BLUE SENT-END
在原“單詞”(此處為"BLUE")
前綴 "SENT-START",后綴“SENT-END”,並在行首追加錄音文件的文件名"s01"(s01.wav除去擴展名)
修改結果如下如下:
s01 SENT-START BLUE SENT-END s02 SENT-START RED SENT-END s03 SENT-START BLUE SENT-END s04 SENT-START BLUE SENT-END s05 SENT-START BLUE SENT-END s06 SENT-START YELLOW SENT-END s07 SENT-START RED SENT-END s08 SENT-START BLUE SENT-END s09 SENT-START BLUE SENT-END s10 SENT-START RED SENT-END s11 SENT-START YELLOW SENT-END (……省略!省略!節省版面!……) s49 SENT-START BLUE SENT-END s50 SENT-START YELLOW SENT-END
(2)”wav文件清單“轉"mlf文件清單“:
使用腳本文件prompts2mlf
perl ./scripts/prompts2mlf ./labels/trainwords.mlf ./labels/trainprompts
此時,labels目錄會生成trainwords.mlf;
4、生成phones_color.led文件:
(1)手動編輯“mkphones_color.led”文件,並置於config目錄下,內容如下
EX
IS sil sil
DE sp
(2)生成phones_color.led文件:
HLEd -l '*' -d ./dict/dict_color -i ./labels/phones_color.mlf ./config/mkphones_color.led ./labels/trainwords.mlf
此時,labels目錄會生成phones_color.mlf;
5、wav文件轉換成mlf文件:
(1)手動編輯“轉換清單”codetrain.scp,並置於config目錄下,內容如下(只能做參考噢,至少紅色字體部分肯定是不一樣的)
/home/ansersion/htk_color/data/train/speech/s01.wav /home/ansersion/htk_color/data/train/mfc/s01.mfc /home/ansersion/htk_color/data/train/speech/s02.wav /home/ansersion/htk_color/data/train/mfc/s02.mfc /home/ansersion/htk_color/data/train/speech/s03.wav /home/ansersion/htk_color/data/train/mfc/s03.mfc /home/ansersion/htk_color/data/train/speech/s04.wav /home/ansersion/htk_color/data/train/mfc/s04.mfc /home/ansersion/htk_color/data/train/speech/s05.wav /home/ansersion/htk_color/data/train/mfc/s05.mfc /home/ansersion/htk_color/data/train/speech/s06.wav /home/ansersion/htk_color/data/train/mfc/s06.mfc /home/ansersion/htk_color/data/train/speech/s07.wav /home/ansersion/htk_color/data/train/mfc/s07.mfc /home/ansersion/htk_color/data/train/speech/s08.wav /home/ansersion/htk_color/data/train/mfc/s08.mfc /home/ansersion/htk_color/data/train/speech/s09.wav /home/ansersion/htk_color/data/train/mfc/s09.mfc /home/ansersion/htk_color/data/train/speech/s10.wav /home/ansersion/htk_color/data/train/mfc/s10.mfc /home/ansersion/htk_color/data/train/speech/s11.wav /home/ansersion/htk_color/data/train/mfc/s11.mfc (……省略!省略!節省版面!……)/home/ansersion/htk_color/data/train/speech/s49.wav /home/ansersion/htk_color/data/train/mfc/s49.mfc /home/ansersion/htk_color/data/train/speech/s50.wav /home/ansersion/htk_color/data/train/mfc/s50.mfc
(2)手動編輯config_HCopy,並置於config目錄下,內容如下
# Coding parameters TARGETKIND = MFCC_0_D_A TARGETRATE = 100000.0 SAVECOMPRESSED = T SAVEWITHCRC = T WINDOWSIZE = 250000.0 USEHAMMING = T PREEMCOEF = 0.97 NUMCHANS = 26 CEPLIFTER = 22 NUMCEPS = 12 ENORMALISE = F SOURCEFORMAT = WAV
(3)wav文件轉換成mlf文件:
HCopy -T 1 -C ./config/config_HCopy -S ./config/codetrain.scp
此后,data/train/mfc目錄會生成s01.mfc;s02.mfc……s49.mfc;s50.mfc;
6、生成初始hmm——“hmm0”:
(1)手動編輯proto,並置於config目錄下,內容如下
~o <VecSize> 39 <MFCC_0_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 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 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 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 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 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 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 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 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 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 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 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 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>
(2)手動編輯train.scp,並置於config目錄下,內容如下(其實就是codetrain.scp的“右半邊內容”):
/home/ansersion/htk_color/data/train/mfc/s01.mfc /home/ansersion/htk_color/data/train/mfc/s02.mfc /home/ansersion/htk_color/data/train/mfc/s03.mfc /home/ansersion/htk_color/data/train/mfc/s04.mfc /home/ansersion/htk_color/data/train/mfc/s05.mfc /home/ansersion/htk_color/data/train/mfc/s06.mfc /home/ansersion/htk_color/data/train/mfc/s07.mfc /home/ansersion/htk_color/data/train/mfc/s08.mfc /home/ansersion/htk_color/data/train/mfc/s09.mfc /home/ansersion/htk_color/data/train/mfc/s10.mfc /home/ansersion/htk_color/data/train/mfc/s11.mfc (……省略!省略!節省版面!……)/home/ansersion/htk_color/data/train/mfc/s49.mfc /home/ansersion/htk_color/data/train/mfc/s50.mfc
(3)手動編輯config_color文件,並置於config目錄下,內容變為(即”config_HCopy“文件刪除“SOURCEFORMAT = WAV”那行):
# Coding parameters TARGETKIND = MFCC_0_D_A TARGETRATE = 100000.0 SAVECOMPRESSED = T SAVEWITHCRC = T WINDOWSIZE = 250000.0 USEHAMMING = T PREEMCOEF = 0.97 NUMCHANS = 26 CEPLIFTER = 22 NUMCEPS = 12 ENORMALISE = F
(4)生成初始hmm0的內容:
HCompV -C ./config/config_color -f 0.01 -m -S ./config/train.scp -M ./hmm0 ./config/proto
此時,hmm0目錄下會生成proto和vFloors;
7、生成macros、hmmdefs和monoOffSP:
(1)生成macros:
perl scripts/makeMacros hmm0/vFloors hmm0/macros
此時,hmm0目錄下會生成macros;
(2)生成hmmdefs:
perl scripts/makeHmmdefs hmm0/proto lists/monophones hmm0/hmmdefs
此時,hmm0目錄下會生成hmmdefs;
(3)生成monoOffSP:
perl scripts/makeMonoOffsp ./lists/monophones ./lists/monoOffSP
此時,lists目錄下會生成monoOffSP;
好了,終於可以去訓練hmm模型了。
HTK Book涉及內容:
Chapter 3: 3.1.1 Step 1 - the Task Grammar
Chapter 3: 3.1.2 Step 2 - the Dictionary
Chapter 3: 3.1.4 Step 4 - Creating the Transcription Files
Chapter 3: 3.1.5 Step 5 - Coding the Data
Chapter 3: 3.2.1 Step 6 - Creating Flat Start Monophones