《kaldi语音识别实战》:带特征变换的三音素模型训练——train_lda_mllt.sh,train_sat.sh解析

关于LDA、MLLT及fMLLR的特征变换请阅读《kaldi语音识别实战》阅读笔记:特征变换

一、train_lda_mllt.sh

1.1 描述

对输入特征进行LDA+MLLT特征变换后进行三音素训练。LDA和MLLT变换矩阵会随着训练重新估计新的。MLLT在这里指的是STC(半绑定定协方差)。用于全局特征变换。

Usage: steps/train_lda_mllt.sh [options] <#leaves> <#gauss> <data> <lang> <alignments> <dir>
e.g.: steps/train_lda_mllt.sh 2500 15000 data/train_si84 data/lang exp/tri1_ali_si84 exp/tri2b
Main 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.

aishell调用实例
在这里插入图片描述

1.2 步骤

# 生成先验概率,根据升学特征和对齐计算LDA所需统计量,[splice-feats final.ali] -> [lda.acc]
ali-to-post
weight-silence-post
acc-lda
# 估计LDA矩阵,[lda.acc] -> [lda.mat]
est-lda
# 以LDA变换为基础构建特征管道
feat="$splicefeat | transform-feats lda.mat"
# 通过对转换后的特征重新统计,用于生成决策树[final.ali feats.*lda.mat] -> [treeacc]
acc-tree-stats
# 三音素绑定,[treeacc] -> [tree]
cluster-phone
compile-questions
build-tree //该步骤完成决策树三音素聚类
# 三音素模型初始化,[treeacc tree topo] -> [1.occ 1.mdl]
gmm-init-model
# 将三音素决策树的叶子替换为转换后模型决策树的叶子,[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
	#估计MLLT统计量
	ali-to-post | weight-silence-post | gmm-acc-mllt
        # 估计MLLT矩阵
	est-mllt
	# 对gmm模型进行变换,[mllt.mat mdl] -> [new.mdl]
	gmm-transform-means
        # 组合LDA和MLLT矩阵,[lda.mat mllt.mat] -> [lda.mat]
	compose-transforms
        # 重新定义特征管道
        # feat="$splicefeat | transform-feats $(x+1).mat"
	# 重新统计所需统计量,[$i.ali] -> [$i.acc]
	gmm-acc-stats-ali
	# 更新GMM模型参数,[$i.acc] -> [$i.mdl]
	gmm-est //该步骤增加混合高斯分量的数目
# 输出最后的模型
final.mdl = $i.mdl
done

相比train_deltas.sh多了LDA+MLLT变换。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、train_sat.sh

2.1 描述

使用fMLLR训练,fMLLT用于说话人特定的特征变换,训练默认基于LDA+MLLT变换后的特征及其强制对齐的结果。

Usage: steps/train_sat.sh <#leaves> <#gauss> <data> <lang> <ali-dir> <exp-dir>
 e.g.: steps/train_sat.sh 2500 15000 data/train_si84 data/lang exp/tri2b_ali_si84 exp/tri3b
Main 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.

aishell调用实例
在这里插入图片描述

2.2 步骤

# 生成先验概率,估计初始fMLLR矩阵,[splice-feats spk2utt] -> [trans]
ali-to-post
weight-silence-post
gmm-est-fmllr
# 以fMLLR变换的特征为基础构建特征管道,mlltfeat为进行差分后或者基于LDA变换后的特征
feats="$sifeat | transform-feats trans"
# 通过对转换后的特征重新统计,用于生成决策树[final.ali feats.*lda.mat] -> [treeacc]
acc-tree-stats
# 三音素绑定,[treeacc] -> [tree]
cluster-phone
compile-questions
build-tree //该步骤完成决策树三音素聚类
# 三音素模型初始化,[treeacc tree topo] -> [1.occ 1.mdl]
gmm-init-model
# 将三音素决策树的叶子替换为转换后模型决策树的叶子,[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
	# 估计fMLLR的矩阵 -> [fmllr.trans]
	ali-to-post | weight-silence-post | gmm-est-fmllr
	# 组合变换矩阵,[trans.mat fmllr.trans] -> [new_trans]
   	compose-transforms
        # 重新构建特征管道
        feats="$sifeats| transform-feats new_trans"
	# 重新统计所需统计量,[$i.ali] -> [$i.acc]
	gmm-acc-stats-ali
	# 估计新的模型,[$i.acc] -> [$i.mdl]
	gmm-est # 该步骤增加混合高斯分量的数目
# 输出最后的模型
final.mdl = $i.mdl

aishell实例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如有问题或建议欢迎私信。
严禁私自转载,侵权必究

参考
[1] 《kaldi语音识别实战》[book]
[2] kaldi HMM-GMM全部训练脚本分解 [博客园]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值