1. 程式人生 > >以kaldi中的yesno為例談談transition

以kaldi中的yesno為例談談transition

在基於GMM-HMM的傳統語音識別裡,比音素(phone)更小的單位是狀態(state)。一般每個音素由三個狀態組成,特殊的是靜音(SIL)由五個狀態組成。這裡所說的狀態就是指HMM裡的隱藏的狀態,而每幀資料就是指HMM裡的觀測值。每個狀態可以用一個GMM模型表示(這個GMM模型的引數是通過訓練得到的)。在識別時把每幀資料對應的特徵值放進每個狀態的GMM裡算概率,概率最大的那個就是這幀對應的狀態。再從狀態得到音素(HMM負責),從音素得到詞(字典模型負責),從詞得到句子(語言模型負責),最終完成識別。可以從一個狀態轉到另一個狀態,即狀態之間存在轉移(transition)。Transition是kaldi裡一個非常重要的概念,相關的有transition-state、transition-index、transition-id等,初一看雲裡霧裡不太好理解,其實它們都是根據topo圖(/s5/data/lang/topo)得到的。今天就基於yesno的例子對它們做一個講解。

 

先看yesno中的topo圖(見下圖),它有三個音素:SIL、yes、no (yes和no均作為一個音素處理),id 分別為1、2、3. SIL有5個狀態,id為0—4 ,5為結束態。yes/no分別有三個狀態,id為0—2 ,3為結束態。

SIL中狀態0—3 分別有4條狀態轉移路徑(或者叫轉移弧),以狀態0為例,可以自環(self-loop)到0,也可以轉移到1或者2或者3. 狀態4有2條狀態轉移路徑,可以自環(self-loop)到4,也可以轉移到結束態5. Yes/no中狀態0—1均有2條狀態轉移路徑。所以這個topo圖中共有30條(4*4+2(SIL)+ 3*2(yes)+3*2(no)= 30)狀態轉移路徑。

 

再來看transition中相關的幾個概念:

Phone:音素,前文已提過,id是從1開始的整數。在yesno中共三個音素(SIL、yes、no),id分別為1、2、3。

HMM-state:HMM裡隱藏的狀態。每個音素的HMM-state都是從0開始的整數。在yesno中SIL的HMM-state分別為0、1、2、3、4,yes/no的HMM-state分別為0、1、2。

pdf-id:每個state相對應的GMM概率密度函式(pdf: probability density function)的id,這個值是全域性唯一從0開始的整數。pdf-id分為forward-pdf-id和self-loop-pdf-id兩種,值一樣,即pdf-id = forward-pdf-id = self-loop-pdf-id。在yesno中SIL有5個狀態,pdf-id分別為0、1、2、3、4、5,yes有3個狀態,pdf-id分別為5、6、7,no有3個狀態,pdf-id分別為8、9、10。

transition-state:表示一個轉移狀態,用(phone,HMM-state,forward-pdf-id , self-loop-pdf-id)表示。這個概念相對抽象些。

transition-index:表示一個狀態的轉移路徑的index,在每個狀態內從0開始的整數。在yesno中SIL的狀態0有4個轉移路徑,其transition-index分別為0、1、2、3。其他狀態類似。

transition-id: 所有狀態轉移路徑的id,全域性唯一從1開始的整數,跟(transition-state, transition-index)一一對應。在yesno中SIL的狀態0有4個轉移路徑,其transition-id分別為1、2、3、4,SIL的狀態1有4個轉移路徑,其transition-id分別為5、6、7、8,SIL的狀態2有4個轉移路徑,其transition-id分別為9、10、11、12,SIL的狀態3有4個轉移路徑,其transition-id分別為13、14、15、16,SIL的狀態4有2個轉移路徑,其transition-id分別為17、18;yes的狀態0有2個轉移路徑,其transition-id分別為19、20,yes的狀態1有2個轉移路徑,其transition-id分別為21、22,yes的狀態2有2個轉移路徑,其transition-id分別為23、24;no的狀態0有2個轉移路徑,其transition-id分別為25、26,no的狀態1有2個轉移路徑,其transition-id分別為27、28,no的狀20有2個轉移路徑,其transition-id分別為29、30,所以yesno中transition-id範圍是1—30.

 

下表列出了yesno中這些變數的具體值,它們會被存起來,有一一對應的關係,知道一個值後就可以知道相對應的其他值。比如常用的通過transition-id得到pdf-id。

以上通過對例子yesno的講解就可以很好的理解跟transition相關的概念