htk解碼器網路
Htk解碼器網路
之前看過一部分wfst解碼器的程式碼,跟pocketsphinx的解碼器部分結構上面不太一樣,所以閱讀了一下htk的解碼器部分的說明,以期望對pocketsphinx的程式碼閱讀有幫助。
參考資料:
HTK book http://htk.eng.cam.ac.uk/download.shtml
解碼器網路
一、 解碼器網路的概況
網路分為兩種:word網路和phone網路。
l word網路有兩種形式:一種是由語法檔案(Task Grammer)構建的網路;還有一種是由語言模型(
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
(一) 主要步驟
根據發音詞典的音素決定聲學模型的名字,以及是否需要根據上下文進行擴充套件。分為三種情況:
(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這三個引數決定進行何種級別的展開。
Word網路裡面的word節點前面擴充套件該word的發音,根據上下文擴充套件的話,初始和最終的三音素可能需要複製成多個節點用於對應於前一個word或者後一個word。
如下圖中:t的輸出but有三個出邊,所以需要將t這個節點複製為三個t節點,每一個t節點後面都跟著but節點。
4. Linking of models to network nodes
將單音素根據上下文生成對應的三音素
對應於: