該系統能夠識別連續說出的數字串和若干組姓名。建模是針對子詞(sub-word, eg. 音素),具有一定的可擴充性。當加入一個新名字時,只需修改發音字典和任務語法即可。模型爲連續混合高斯輸出,運用語音決策樹聚類形成的綁定狀態式三音素。
1.數據準備
需要錄製訓練數據和測試數據。爲進行校準,還需要數據的標註文本。這裏用任務語法(task grammar)產生真值文本(ground truth)。爲了處理訓練數據,需要定義一個語音集合和一個字典用以涵蓋訓練和測試數據中涉及的單詞。
[step 1]任務語法定義
創建文件:gram
創建位置:根目錄下
文件內容:
上面的語法是高層表示,必須通過HParse轉成HTK可用的底層表示。
運行:
HParse gram wdnet
生成:wdnet
生成位置:根目錄
生成內容:
[step 2]字典定義
創建文件夾:dict lists
創建文件:BEEP語音字典(網上可以下載)beep beep.ded(空) names(手工製作的專有人名的發音,包括SEND-START,SEND-END) name.ded
放入位置:dict
創建文件:global.ded
創建位置:根目錄下
文件內容:
此例中利用BEEP語音字典,除去其中的重音符,並在每個發音後加入sp(short pause,小停頓)。如果有啞音標誌,就用MP命令把sil和sp合併成sil。
創建文件:wlist
創建位置:lists
創建內容:執行:
HDMan -m -w .\lists\wlist -g global.ded -n .\lists\monophones1 -l dlog .\dict\dict1 .\dict\beep .\dict\names
生成文件:monophones1 (用於用到的音素列表)
生成位置:lists
生成文件:dlog(參數文件記錄過程)
生成位置:根目錄
生成文件:dict1
生成位置:dict
注1 :實際上,這裏應該手工修改 dict1 ,爲SENT-END 和SENT-START 加上無輸出標誌,
爲了展示隊後面步驟地影響,這裏故意不添加。
注:HDMan工具的具體詳細解釋以及使用可以參看HTK BOOK P262
[step 3]錄製語音數據
創建文件夾:labels
HSGen工具可以生成符合task grammar的句子,用來指導錄音(HTK BOOK裏叫sentence prompts):
執行:
HSGen -l -n 140 wdnet.\dict\dict1>.\labels\trainprompts
執行:
HSGen -l -n 15 wdnet .\dict\dict1>.\labels\testprompts
根據上述指令文件,錄製相應的140個訓練用語音數據文件和15個測試用語音數據文件。
生成文件:trainprompts testprompts
一個錄製的例子如下:
HSLab .\data\Train\speech\S0001
注:隨本文的壓縮包沒有包括這些數據文件,但包括了它們對應的特徵文件,所以對整個實驗沒有什麼影響。
[step 4]標註數據,得到真值文件創建文件夾:scripts labels
創建文件:prompts2mlf(HTK scripts目錄下自帶)
創建位置:scripts
Perl腳本prompts2mlf(在scripts目錄下HTK自帶)可以把錄音文本截成單詞級真值文件。
執行:
perl .\scripts\prompts2mlf.\labels\trainwords.mlf .\labels\trainprompts
perl .\scripts\prompts2mlf.\labels\testwords.mlf .\labels\testprompts
注:要在每個lab路徑之前加上“*/”
生成文件:trainwords.mlf testwords.mlf
生成位置:labels
標註編輯器HLEd可把單詞級真值文本(wordlevel MLF)轉成音素級真值文本(phonelevel MLF):
創建文件:mkphones0.led
創建位置:根目錄
創建內容:
EX命令表示按照字典dict1進行展開,IS表示在每個話語的前後插入標誌,DE一行表示phones0.mlf中單詞間不用sp隔開。
執行:HLEd -l * -d .\dict\dict1 -i .\labels\phones0.mlf mkphones0.led .\labels\trainwords.mlf
生成文件:phones0.mlf
生成位置:labels
注:HLEd工具的詳細講解可以參考HTK BOOK P284