一、使用说明
1.1 描述
训练三音素模型。与单音素模型训练相比,因为建模单元变为三音素,因此多了决策树状态绑定。
steps/deltas.shUsage: steps/train_deltas.sh <num-leaves> <tot-gauss> <data-dir> <lang-dir> <alignment-dir> <exp-dir>e.g.: steps/train_deltas.sh 2000 10000 data/train_si84_half data/lang exp/mono_ali exp/tri1main options (for others, see top of script file)"--cmd (utils/run.pl|utils/queue.pl <queue opts>) # how to run jobs.--config <config-file> # config containing options--stage <stage> # stage to do partial re-run from.
<num-leaves>
:该参数指定聚类数量,即决策树叶子节点的数量。由于三音素的引入导致模型参数量爆炸,因此需要通不过个距离绑定进行参数共享。叶子最终节点的个数代表最终系统的HMM的状态数。
<tot-guass>
:指定整个系统的所有GMM合并到一起的高斯总数。GMM-HMM系统中,每个HMM状态包含一个GMM模型。早期语音识别工具,每个HMM状态中高斯混合数量一致,如为32或64.但kaldi中并没有这样的限制,数据量更充足的状态会分配更多高斯,但系统的总高斯会限制在一定范围内。
注:以上两个参数与实际训练数据量有关。
叶子节点设置与最终会有差别。这是由于决策树分裂是根据调整决策树分裂获得的虽然增量阈值来停止分裂,最后节点会在设置的80-90%。
<data-dir>
:输入训练数据文件夹的路径。
<lang-dir>
:输入语言文件夹的路径。
<alignment-dir>
:输入的对齐文件夹的路径。
<exp-dir>
:输出的训练目录的路径。
aishell调用实例
1.2 步骤
# 特征处理 [feats] -> [feats]apply-cmvn | add-deltas# 由生成的单音素模型的对齐结果对三音素参数统计,用于生成决策树[final.ali feats] -> [treeacc]acc-tree-stats# 三音素绑定,[treeacc] -> [tree]cluster-phonecompile-questionsbuild-tree # 该步骤完成决策树三音素聚类# 三音素模型初始化,[treeacc tree topo] -> [1.occ 1.mdl] -> [1.mdl]gmm-init-model | gmm-mixup# 将单音素对其文件中的元素替换为决策树的叶子,[final.mdl 1.mdl final.ali] -> [ali.new]convert-ali # 生成训练图,[1.mdl text l.fst] -> [train.fst]compile-train-graph# 迭代训练# 和单音素训练阶段差不多。# 不过由于单音素素有初始对齐,因此三音素迭代时顺序与其有所不同for i < iteration# 重新对齐,[train.fst $i.mdl] ->[$i+1.ali] gmm-align-compiled# 重新统计所需统计量,[$i.ali] -> [$i.acc]gmm-acc-stats-ali# 估计新的模型,[$i.acc] -> [$i.mdl]gmm-est # 该步骤增加混合高斯分量的数目# 输出最后的模型final.mdl = $i.mdl
实例
二、部分阶段详细介绍
2.1 决策树聚类
acc-tree-stats
统计音素有关的信息
读取特征及其对应信息,计算决策树聚类过程中需要的一些统计量,即各个phone的特征均值、方差,及该phone所出现的语音帧的数量。
compile-questions
聚类生成问题集合
对系统中的单音素进行相似性聚类,形成问题集。供决策树分裂聚类使用。
2.2 初始化三音素模型,转换对齐
gmm-init-model
生成初始化三音素模型
使用决策树tree和决策树统计量treeacc以及topo初始化GMM。
gmm-mixup
增加GMM混合分量的个数,或合并GMM混合分量
convert-ali
将对齐进行转换
由单音素GMM得到训练数据的对齐文件,但是单音素GMM中的TransitionModel和三音素GMM中的TransitionModel不同,两者的每个数据成员都不一样,所以要把用单音素GMM中的tid(transition-id)表示的对齐转换成三音素GMM的tid表示的对齐。
多次训练三音素模型原因:如训练一个10000个状态的三音素系统。首先需要使用单音素系统产生的对齐先训练一个比较少的状态如5000状态的三音素系统,再由其生成一个10000状态的三音素系统,从而达到更好的模型精度。而不是直接由单音素系统生成10000个状态的三音素系统。 *如有问题或建议欢迎私信。* *严禁私自转载,侵权必究* **参考:** [1] [《kaldi语音识别实战》[book]](/p/121555933) [2] [Kaldi三音素GMM学习笔记 [CSDN]](/qq_36782366/article/details/101532855) [3] [kaldi HMM-GMM全部训练脚本分解 [博客园]](/sunhongwen/p/9507252.html)