1. 程式人生 > >htk解碼器網路

htk解碼器網路

Htk解碼器網路

之前看過一部分wfst解碼器的程式碼,跟pocketsphinx的解碼器部分結構上面不太一樣,所以閱讀了一下htk的解碼器部分的說明,以期望對pocketsphinx的程式碼閱讀有幫助。

參考資料:

HTK book http://htk.eng.cam.ac.uk/download.shtml

 

解碼器網路

一、     解碼器網路的概況

網路分為兩種:word網路和phone網路。

l  word網路有兩種形式:一種是由語法檔案(Task Grammer)構建的網路;還有一種是由語言模型(

word loop)構建的網路。網路的描述形式是SLF(Standard Lattice Format)格式的檔案。

l  根據詞典將詞級別的網路可以擴充套件為phone級別的網路。

 

具體過程參考下圖:

上圖中相關命令的含義如下:

HParse:將語法樹檔案轉化為SLF

HBuild:將二元語言模型(bigramlanguage model)轉化為SLF,或者將word網路分解成子網路

HSGen:根據SLF檔案隨機生成一些結果,用於評估構建網路的複雜度

HDMan:產生詞典檔案

HLStats:產生語言模型

HDict:網路載入詞典檔案

HLM:網路載入語言模型

HNet:將詞典、HMM set和word網路轉化為HMM的網路

HRec:載入HMM網路來識別語音輸入

HVite:集合了HNet和HRec的功能

二、     什麼是解碼器網路

雖然也是由節點node和邊arc構成的,但是和wfst網路還是有很大的不同,等以後涉及wfst網路的時候再做詳細的類比。對於word網路的SLF,節點表示word,邊表示word之間的轉移概率。

簡單的word網路如下:

 

它對應的SLF檔案如下:

詳細含義和規則參考HTK book的Chapter 20。

為了減少邊的數量,可以增加空節點!NULL,如下圖所示

 

三、     Word級別網路(SLF檔案)的是怎麼生成的

(一)         根據語法檔案產生

1.      使用HParse命令,語法規則:

|

或關係

[ ]

裡面是可選項

{ }

0或者多次重複

<> 

1或者多次重複

<<>> 

上下文有關的迴圈

   

2.      使用HBuild命令

根據主網路(a main lattice) 和子網路集合(aset of sub-lattices)生成word網路。相當於網路中的一個節點代表一個子網路。

(二)         根據語言模型產生

使用HBuild命令讀取二元的語言模型生成,結構圖如下:

 

四、      詞典怎麼產生

(一)         詞典的型別

1.      Phone級別的詞典

2.      word-internal contextdependencies級別的詞典

HNet命令會自動將phone級別的字典擴充套件為該型別

也可以自己將dict擴充套件成這種型別

3.      Cross-word dependencies級別的詞典

 

只能由HNet產生

(二)         詞典的生成

使用HDMan命令生成詞典,可以有多個字典的輸入檔案

五、     Word網路和詞典擴充套件為hmm網路

輸入:詞典、word網路、HMM set

輸出:HMM網路

命令:HNet

(一)         主要步驟

1.      Context definition

根據發音詞典的音素決定聲學模型的名字,以及是否需要根據上下文進行擴充套件。分為三種情況:

(a) Context Free

上下文確定的時候該音素不變,比如sp這個三音素(在每個詞發音的結尾會加入該音素)。

(b) Context Independent

也是上下文確定的時候不變,比如sil這個三音素(相當於靜音)。sil和sp的區別在於sil可能會出現在其他的三音素中,但是sp不會,比如sil-aa+r。

(c) Context Dependent

上下文有關,三音素的形式,取決於hmm set裡面有沒有這種三音素的定義

2.      Determination of network type

如果詞典裡面的所有phone都出現在hmm set裡面的話,無需進行phone的擴充套件,直接在word網路中按照詞典的發音展開即可。

如果不滿足上面條件,將詞典的phone按照internal context expansion展開,判斷展開以後的音素是否都出現在hmm set中。

如果不滿足上面條件,將詞典的phone按照full cross-word context expansion展開,判斷展開以後的音素是否都出現在hmm set中。

ALLOWCXTEXP,ALLOWXWRDEXP, FORCECXTEXP這三個引數決定進行何種級別的展開。

3.      Network expansion

Word網路裡面的word節點前面擴充套件該word的發音,根據上下文擴充套件的話,初始和最終的三音素可能需要複製成多個節點用於對應於前一個word或者後一個word。

如下圖中:t的輸出but有三個出邊,所以需要將t這個節點複製為三個t節點,每一個t節點後面都跟著but節點。

 

4.      Linking of models to network nodes

將單音素根據上下文生成對應的三音素

對應於:

(二)         例項