Kaldi 源码阅读--hmm-topology

来源:互联网 发布:mac没声音 编辑:程序博客网 时间:2024/05/13 01:01

Kaldi 源码阅读–HMM

关于kaldi源码的阅读已经计划很久,今日从HMM开始:
切入点是hmm的topo文件:

 <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 <Final> 0.5 </State> <State> 3 </State> </TopologyEntry> </Topology>

kaldi 在src/hmm/hmm-topology.h 中定义了一个class HmmTopology。它包含三个成员变量:

std::vector< int32> phones_; //list of all phones we have topo for
std::vector< int32 > phone2idx_; //map phones to indexes
std::vector < TopologyEntry> entries_;

hmmTopology定义了一个TopologyEntry。TopologyEntry是一个hmmstate的数组:

typedef std::vector TopologyEntry;
hmmstate则是在其内部定义的一个结构体:
struct HmmState {
int32 forward_pdf_class;
int32 self_loop_pdf_class;
std::vector< std::pair< int32, BaseFloat> > transitions;
} 还定义了构造函数

总之一个模型有若干个phones,会包含若干个hmmstate, 每一个hmmstate 定义了其上的pdf_classs 与 状态的转移概率。

0 0