以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)状态转移路径。

以kaldi中的yesno为例谈谈transition_第1张图片

 

再来看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。

以kaldi中的yesno为例谈谈transition_第2张图片

以上通过对例子yesno的讲解就可以很好的理解跟transition相关的概念了。

你可能感兴趣的:(智能语音)