本章節對照 HTK Books 章節之 - 3.3 Create Tied-State Triphones , Step 9 - Making Triphones from Monophones。
用指令檔把單音素轉為三音素
前面章節已經擁有單音素的檔案,包含對齊後的檔案 aligned.mlf ,而現在要先轉換單音素到三音素的集合,首先,要先建立 mktri.led 這個檔案,並輸入內容:
WB sp WB sil TC
(請記得要在最後斷行)
然後,輸入 HLEd 的指令:
HLEd -n triphones1 -l '*' -i wintri.mlf mktri.led aligned.mlf
綁定 HMM 以共享狀態 (Shared-State)
Tied-State 總共是將三個音素綁定起來辨識,所以從單因素的 xx 就會變成 xx-xx+xx 這樣的形態呈現在音素檔中。
首先為了要執行把所有音素做轉換,要用指令檔執行,但指令檔的指令數目太多了,需要有腳本來幫助處理,在 HTK-Tools 中會找到 sample 資料夾,裡面有 HTK-Tutorial 這個目錄,請拿目錄中的 maketrihed 這個檔案複製到 /etc 目錄中,這是一個 Perl 的檔案,本文中也會使用 Perl 來協助處理。 (請安裝好 Perl)
然後,使用 Perl 指令,在 /etc 目錄執行這個 Perl 程式:
perl maketrihed monophones1 triphones1
接著,它就會產生出一個 mktri.hed 包含所需的指令檔案。
完成指令檔後,就可以執行 HHEd 指令來重新計算綁定這些參數,再透過 HRest 重新估計得到更新的機率模型。
請建立一個 hmm10 的資料夾後,使 HHEd 用指令:
HHEd -A -D -T 1 -H hmm9\proto -H hmm9\hmmdefs -M hmm10 mktri.hed monophones1
執行參數重估
完成後,需要連續建立 2 次參數重估後的模型 hmm11, hmm12,不過在先前,都是使用單音素進行建模,跟 mfcc 檔案 (.mfc) 放在一起的 label 檔案 (.lab) ,也必須更新成三音素的 label 檔案,請打開 wintri.mlf ,去掉 MLF 標籤和檔案名稱、句號 "." 後,各自放到對應的 .lab 檔案中:
範例:
wintri.mlf
#!MLF!# <- 不要複製 "'*'/a0319.lab" <- 對應的檔案,不要複製 sil ae+n ae-n+d sil . <- 句號,不要複製 "'*'/a0320.lab" <- 下一個檔案 sil w+ih f-uh+l uh-l+ih l-ih+n ... ... ...
a0319.lab
sil ae+n ae-n+d sil
這個步驟很麻煩,如果你有一大堆資料,請自行寫程式處理。
完成後,再建立一個 hmm11 的目錄,然後使用指令:
HERest -A -D -T 1 -C config -I wintri.mlf -t 250.0 150.0 3000.0 -S train.scp -H hmm10/proto -H hmm10/hmmdefs -M hmm11 triphones1
再建立一個 hmm12 的目錄,執行指令:
HERest -A -D -T 1 -C config -I wintri.mlf -t 250.0 150.0 3000.0 -s stats -S train.scp -H hmm11/proto -H hmm11/hmmdefs -M hmm12 triphones1
最後一個指令建立了一個 stats 的檔案,這是接下來會使用到的文件。
Reference:
http://levinboim.blogspot.tw/2012/05/htk-tutorial-microblogging-may-27.html
https://labrosa.ee.columbia.edu/doc/HTKBook21/node82.html
http://www.cnblogs.com/welen/p/3781894.html
http://www.voxforge.org/home/dev/acousticmodels/linux/create/htkjulius/tutorial/triphones/step-10/comments/error-7321
http://www.voxforge.org/home/dev/acousticmodels/linux/create/htkjulius/tutorial/triphones/step-9
沒有留言:
張貼留言