kaldi中的hmm-topology介绍
kaldi中是对音素进行建模,使用HMM模型。一般情况下每个音素有3个状态,每个状态有2个弧。静音音素sil可能有5个状态,且每个状态可能不止2个弧。
kaldi中音素的HMM模型的topo文件,一般是由脚本utils/gen_topo.pl生成。一个示例如下:
<Topology>
<TopologyEntry>
<ForPhones> 1 2 3 4 5 6 7 8 </ForPhones>
<State> 0 <PdfClass> 0
<Transition> 0 0.5
<Transition> 1 0.5
</State>
<State> 1 <PdfClass> 1
<Transition> 1 0.5
<Transition> 2 0.5
</State>
<State> 2 <PdfClass> 2
<Transition> 2 0.5
<Transition> 3 0.5
</State>
<State> 3
</State>
</TopologyEntry>
</Topology>
上面的示例topo文件,描述了音素1、2、3、4、5、6、7和8这8个音素的拓扑结构。它们这8个音素的拓扑结构是一模一样的,都是3个状态,序号为0到2;最后一个3状态是结束状态,或叫“非发射状态”。
hmm-topology.h文件中定义了类HmmTopology,用来表示所有音素的topo结构。这个类是比较简单和形象的。这里给出类的定义。
注意:这里对源代码进行了修改,以方面阅读和理解