Kaldi 源码阅读--hmm-topology

本文从Kaldi源码的HMM部分开始进行阅读,重点关注HMM的topology。HmmTopology类包括phones_、phone2idx_和entries_三个成员变量,分别用于管理电话类型、电话索引和拓扑条目。TopologyEntry定义了HMM状态,包含forward_pdf_class、self_loop_pdf_class和transitions,描述了HMM状态间的转移概率。
摘要由CSDN通过智能技术生成

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 与 状态的转移概率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值