kaldi学习笔记-三音素训练2

本文介绍三音素训练部分。

上篇文章已经提到了如何对三音素聚类,构建决策树,接下来进行对三音素中各个GMM进行训练。三音素训练部分和单音素大致相同,都是运用EM算法进行参数的更新,具体部分可以看单音素训练部分。同样也是用gmm-align-compiled,gmm-acc-stats-ali,gmm-est这三个进行参数更新,重新对齐等。本文因此主要介绍与单音素训练不同的初始化部分。

1. gmm-init-model

Usage: gmm-init-model [options] <tree-in> <tree-stats-in> <topo-file> <model-out> [<old-tree> <old-model>]

输入:决策树,决策树统计量,topo文件
输出:三音素的模型

读取决策树的统计量计算mean,mean_invvar,gconst等建立声学模型am-gmm,运用该函数InitAmGmm()。用tree和topo初始化TransitionModel trans_model。将transition model和am-gmm 共同输入到1.mdl中作为初始化的三音素模型, 并用GetOccs()将每个pdf的occupancy输出为1.occ

2. gmm-mixup

Usage:  gmm-mixup [options] <model-in> <state-occs-in> <model-out>

输入:三音素模型,每个pdf所占的分量
输出:新的模型

这一步用MergeByCount()或者SplitByCount(), 分裂或者合并单高斯直到和指定的高斯数目一样,最后输出新的模型。其中用到的算法和单音素训练中gmm-est里提到的一样,这里不再详述。

3. convert-ali

Usage:  convert-ali  [options] <old-model> <new-model> <new-tree> <old-alignments-rspecifier> <new-alignments-wspecifier>

输入:训练好的单音素模型,三音素模型,tree,单音素的对齐序列
输出:三音素的对齐序列

之前由单音素GMM我们得到训练数据的对齐文件,但是单音素GMM中的模型和三音素GMM中模型不同,两者的每个数据成员都不一样,所以要把用单音素表示的对齐转换成三音素表示的对齐。

根据每个单音素对齐序列中transition-id 我们可以直到表示单音素模型中哪个phone的哪个状态,因为虽然变成三音素了,中心位置phone和第几个状态没有变,根据决策树直接换成三音素模型中transition-id,输出新的对齐序列即可。

最后由convert-ali得到三音素莫心的对齐后,后面的GMM参数更新就和单音素GMM一样,采用EM算法。

完。

发布了8 篇原创文章 · 获赞 11 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览