Kaldi 三音素 GMM 学习笔记
三音素 GMM 与单音素 GMM 的主要差别在于决策树状态绑定,与 GMM 参
数更新相关的原理、程序和类两者都是一样的。
在这个笔记中,我会首先介绍表示 HMM 的 类 HmmTopology 和
TransitionModel,然后介绍三音素 GMM 训练脚本 train_deltas.sh 用到的几个程
序,这几个程序与单音素 GMM 的不同或者只在三音素 GMM 训练中出现。与
GMM 相关的其余部分请参考单音素 GMM 学习笔记。
目录
HmmTopology ................................................................................................................ 1
TransitionModel ............................................................................................................. 2
gmm-init-model ............................................................................................................. 4
gmm-mixup .................................................................................................................... 5
AmDiagGmm::SplitByCount() ................................................................................. 5
convert-ali ...................................................................................................................... 5
HmmTopology
为什么要介绍 HmmTopology(后简称 HT)和 TransitionModel(后简称 TM)?
前面我们几乎一直在讲 GMM 和决策树,那么 HMM 用什么表示?在 Kaldi 中用
TM 表示 HMM,TM 中包含一个 HT 对象,用来表示 HMM 拓扑结构。
在 Kaldi 数据准备阶段,Kaldi 会在 data/lang 目录下自动生成表示 HMM 拓扑
结构的文件 topo,HT 对象就保存 topo 中的信息。一是 topo 中都有哪些音素,
保存在 HT 的数据成员 phone_中;二是每个音素的 HMM 结构是什么,由 HT 的
数 据 成 员 phone2idx_ 和 entries_ 共同决定。我 们 用 下 面 一 个 图 来 解 构
HmmTopology 的数据成员。