東坡下載:內(nèi)容最豐富最安全的下載站!

首頁IT技術(shù)軟件教程 → 利用HTK工具包快速建立一個(gè)語音命令識(shí)別系統(tǒng)

利用HTK工具包快速建立一個(gè)語音命令識(shí)別系統(tǒng)

相關(guān)文章發(fā)表評論 來源:本站整理時(shí)間:2017/10/9 17:10:36字體大小:A-A+

更多

作者:專題點(diǎn)擊:24次評論:0次標(biāo)簽: HTK

HTK的全稱是”Hidden Markov Model Toolkit”,是英國劍橋大學(xué)工程學(xué)院開發(fā)的隱馬爾可夫模型(后面簡稱為隱馬模型)工具包,可以方便有效的建立及操作隱馬模型。隱馬模型在許多人工智能領(lǐng)域都有著成功的應(yīng)用,比如語音識(shí)別,當(dāng)前國際上主流的語音識(shí)別系統(tǒng)仍是基于隱馬模型建立的。HTK的開發(fā)也主要是針對語音識(shí)別的應(yīng)用及研究。

HTK是一個(gè)開源工具包,可以在http://htk.eng.cam.ac.uk/進(jìn)行免費(fèi)下載,工具包中包含許許多多的模塊及工具,都是用純C代碼寫成的,基本都以H開頭。其中也有非常詳細(xì)的文檔可供參考。

建立語音訓(xùn)練數(shù)據(jù)
首先我們需要錄音以采集足夠的語音數(shù)據(jù),對于“打開、關(guān)閉、開始、停止”這四個(gè)命令都需要錄一些相應(yīng)的語音樣本,同時(shí)也需要對錄下的語音做一些簡單的標(biāo)注。錄音和標(biāo)注可以采用HTK工具包中的HSLab來完成。

比如在命令行下運(yùn)行“HSLab打開.sig”,然后點(diǎn)擊“Rec”健開始錄音,點(diǎn)擊“Stop”鍵錄音結(jié)束。這時(shí)就會(huì)在當(dāng)前目錄下生成一個(gè)名為“打開_0.sig”文件,再進(jìn)行一次錄音則生成“打開_1.sig”,以此類推。默認(rèn)的錄音采樣率為16kHz,我們采用默認(rèn)的設(shè)置就可以了。

錄音后需要對語音進(jìn)行簡單的標(biāo)注,標(biāo)注也是用HSLab工具,運(yùn)行后按“Mark”鍵,選擇需要標(biāo)注的區(qū)域,按“Labelas”,輸入標(biāo)注的符號,然后回車確定即可。在本問的例子中,每個(gè)語音樣本都是孤立的命令詞,我們只需要標(biāo)注出3個(gè)部分:起始靜音部分(標(biāo)記為sil),命令詞語音部分(標(biāo)記為命令詞,如“打開”),結(jié)束靜音部分(標(biāo)記為sil)。標(biāo)注完成,點(diǎn)擊“Save”鍵保存,會(huì)生成一個(gè)后綴為“l(fā)ab”的文件。

特征提取
語音識(shí)別系統(tǒng)并不直接在語音信號上進(jìn)行識(shí)別,而是先要進(jìn)行特征提取,包括分幀,加窗,求取頻譜及倒譜,這樣確保提取出的特征更加緊湊并盡可能多的保留語音內(nèi)容的信息。

HTK中負(fù)責(zé)提取特征的是HCopy工具,它將wav格式的語音文件轉(zhuǎn)化為包含若干特征

矢量的特征文件。具體命令如下:

HCopy  –A  –D  –C  hcopy.conf  -S  hcopy.scp

其中hcopy.conf是一個(gè)配置文件,用于對特征提取過程中的參數(shù)進(jìn)行配置,如下所示: 

hcopy.scp為待處理語音源文件與特征目標(biāo)文件對的列表,格式如下:

 

隱馬模型結(jié)構(gòu)定義

在本文的例子中,有五個(gè)需要建模的聲音單元:“打開”,“關(guān)閉”,“開始”,“停止”,“sil”。對于每一個(gè)聲音單元都將采用一個(gè)對應(yīng)的隱馬模型來建模。需要確定的隱馬模型結(jié)構(gòu)參數(shù)包括:

1.狀態(tài)個(gè)數(shù)

2.每個(gè)狀態(tài)的輸出函數(shù)形式

3.狀態(tài)間的跳轉(zhuǎn)關(guān)系

在本例中我們采用最常用的結(jié)構(gòu)配置,如下所示:

 

模型包括4個(gè)有輸出的狀態(tài){S2,S3,S4,S5},第一個(gè)和最后一個(gè)狀態(tài){S1,S6}不產(chǎn)生輸出,只是為了操作方便。每個(gè)狀態(tài)的輸出函數(shù)b采     用對角方差陣的混合高斯分布函數(shù)來描述。
隱馬模型訓(xùn)練

  1. 模型初始化

在訓(xùn)練開始必須對模型參數(shù)進(jìn)行初始化,初始化是會(huì)影響訓(xùn)練的收斂速度與準(zhǔn)確性。HTK提供了兩種初始化工具:HInit和HCompv.

(1) 采用HInit初始化

HInit -A -D -T 1 -S trainlist.txt -M model/hmm0 \

-H model/proto/hmmfile -l label -L label_dir nameofhmm

其中,nameofhmm是隱馬模型的名稱,如“開始”、“關(guān)閉”;hmmfile是一個(gè)描述隱馬模型原型的文件,如拓?fù)浣Y(jié)構(gòu),轉(zhuǎn)移關(guān)系,特征維數(shù)等;model/hmm0為初始化生成的初始模型文件。

(2) 采用HCompv初始化

HCompv -A -D -T 1 -S trainlist.txt -M model/hmm0flat \

-H model/proto/hmmfile -f 0.01 nameofhmm

2. 參數(shù)重估

模型參數(shù)的估計(jì)采用HRest工具,調(diào)用該工具完成一輪參數(shù)的重新估計(jì),具體命令行如下:

HRest -A -D -T 1 -S trainlist.txt -M model/hmmi -H vFloors \

-H model/hmmi-1/hmmfile -l label -L label.dir nameofhmm

其中,trainlist.txt文件包含所有用于訓(xùn)練的mfcc特征文件列表,label_dir是存放標(biāo)注文件(.lab)的目錄,vFloors是由HCompv生成的最小方差值的文件。

整個(gè)訓(xùn)練過程需要迭代多次,通常5-10輪次,每次迭代時(shí),HRest程序可輸出數(shù)據(jù)的似然值。

識(shí)別任務(wù)語法及詞典定義

對于任意一個(gè)識(shí)別任務(wù)我們要定義該識(shí)別任務(wù)的語法,并生成待識(shí)別的網(wǎng)絡(luò),識(shí)別網(wǎng)絡(luò)即包括所有可能識(shí)別的詞或句子。在HTK中,支持用戶寫一個(gè)類似EBNF語法范式的文本文件,HParse工具可以自動(dòng)對該文本文件進(jìn)行解析,生成相應(yīng)的識(shí)別網(wǎng)絡(luò)文件。

對于本文中的例子,描述其語法的文本文件“gram.txt”如下:

 

其中,花括號表示允許0至多次出現(xiàn),方括號表示0或1次出現(xiàn)。

然后可通過HParse生成識(shí)別網(wǎng)絡(luò)文件“net.slf”

HParse -A -D -T 1 gram.txt net.slf

生成的識(shí)別網(wǎng)絡(luò)如下圖所示:

 

除了建立識(shí)別語法文件,還需要建立詞典,詞典是為了將最終識(shí)別的結(jié)果與隱馬模型描述的單元名稱建立對應(yīng)關(guān)系,由于在本例中我們是直接以詞為單元來建立模型,所以這里的詞典就非常簡單,詞典“dict.txt”如下所示:

 

識(shí)別及測試

模型訓(xùn)練完成后就可以進(jìn)行識(shí)別和測試了:

1. 首先錄入待識(shí)別的語音,如“input.sig”,利用HCopy將其轉(zhuǎn)換為MFCC特征矢量文件input.mfcc(與訓(xùn)練時(shí)提取特征過程相同)。

2. 識(shí)別是通過Viterbi算法在特征矢量上進(jìn)行計(jì)算,與各個(gè)單詞的隱馬模型進(jìn)行匹配。這一步是通過工具HVite進(jìn)行的,具體命令行如下:
HVite -A -D -T 1 -H hmmdef.mmf -i reco.mlf -w net.slf \

dict.txt hmmlist.txt input.mfcc

其中“reco.mlf”為輸出識(shí)別結(jié)果的文件,其識(shí)別結(jié)果形式如下所示:

識(shí)別及測試

模型訓(xùn)練完成后就可以進(jìn)行識(shí)別和測試了:

1. 首先錄入待識(shí)別的語音,如“input.sig”,利用HCopy將其轉(zhuǎn)換為MFCC特征矢量文件input.mfcc(與訓(xùn)練時(shí)提取特征過程相同)。

2. 識(shí)別是通過Viterbi算法在特征矢量上進(jìn)行計(jì)算,與各個(gè)單詞的隱馬模型進(jìn)行匹配。這一步是通過工具HVite進(jìn)行的,具體命令行如下:
HVite -A -D -T 1 -H hmmdef.mmf -i reco.mlf -w net.slf \

dict.txt hmmlist.txt input.mfcc

其中“reco.mlf”為輸出識(shí)別結(jié)果的文件,其識(shí)別結(jié)果形式如下所示:

 

3. 當(dāng)然HTK也支持采用一種更自然的方式進(jìn)行識(shí)別測試,即直接錄音進(jìn)行識(shí)別,具體命令行如下:

HVite -A -D -T 1 -C directin.conf -g -H hmmsdef.mmf \

-w net.slf  dict.txt hmmlist.txt  

運(yùn)行該命令后,命令行會(huì)出現(xiàn)“READY[1]>”,此時(shí)便可進(jìn)行聲音錄入,按任意鍵結(jié)束錄音,程序會(huì)進(jìn)行識(shí)別并將結(jié)果顯示在屏幕上,    然后出現(xiàn)“READY[2]>”進(jìn)行下一次錄音及識(shí)別。

由于在這種識(shí)別方式里由程序自動(dòng)進(jìn)行特征提取,配置文件direction.conf中需包含錄音音頻格式及特征提取過程所需的各類參數(shù),一個(gè)具體示例如下:

 

擴(kuò)展知識(shí)

相關(guān)評論

閱讀本文后您有什么感想? 已有 人給出評價(jià)!

  • 2791 喜歡喜歡
  • 2101 頂
  • 800 難過難過
  • 1219 囧
  • 4049 圍觀圍觀
  • 5602 無聊無聊
熱門評論
最新評論
發(fā)表評論 查看所有評論(0)
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)