train_mono.sh 是音素训练脚本,下面详细介绍各个功能:
这部分是训练用参数,调用mono.sh时可以通过 –name value的方式改变这些参数.
nj=4 并行个数
cmd=run.pl 处理程序
scale_opts="--transition-scale=1.0 --acoustic-scale=0.1 --self-loop-scale=0.1"
num_iters=40 ** Number of iterations of training 训练循环次数
max_iter_inc=30 ** Last iter to increase ** Gauss on. 每个循环里增加的高斯数
totgauss=1000 ** Target ** Gaussians. 总高斯数(可能难理解,但可以这么解释:比如有3状态HMM,每个状态用4组均值方差描述(GMM混合数是4个意思),那总共用了12个高斯,kaldi里不用具体指定GMM个数,而指定整个系统中总共需要多少个单高斯)
careful=false
boost_silence=1.0 ** Factor by which to boost silence likelihoods in alignment
realign_iters="1 2 3 4 5 6 7 8 9 10 12 14 16 18 20 23 26 29 32 35 38"; 循环到这个数时做对其
config= ** name of config file.
stage=-4
power=0.25 ** exponent to determine number of gaussians from occurrence counts
norm_vars=false ** deprecated, prefer --cmvn-opts "--norm-vars=false"
cmvn_opts= ** can be used to add extra options to cmvn.
** End configuration section.
echo "$0 $@" ** Print the command line for logging
- - name value 参数处理
if [ -f path.sh ]; then . ./path.sh; fi
. parse_options.sh || exit 1;
* - -name 以外的参数必须有3个,否则报错*
if [ $ ** != 3 ]; then
echo "Usage: steps/train_mono.sh [options] <data-dir> <lang-dir> <exp-dir>"
echo " e.g.: steps/train_mono.sh data/train.1k data/lang exp/mono"
echo "main options (for others, see top of script file)"
echo " --config <config-file> ** config containing options"
echo " --nj <nj> ** number of parallel jobs"
echo " --cmd (utils/run.pl|utils/queue.pl <queue opts>) ** how to run jobs."
exit 1;
fi
data=$1 ** 第一个参数是训练数据所在的目录 **
lang=$2 ** 第二个参数是语言模型所在的目录 **
dir=$3 ** 第一个参数是日志和最终目标文件输出目录 **
oov_sym=`cat $lang/oov.int` || exit 1;
* 训练数据根据–nj 参数分割,用于并行处理 *
mkdir -p $dir/log
echo $nj > $dir/num_jobs
sdata=$data/split$nj;
[[ -d $sdata && $data/feats.scp -ot $sdata ]] || split_data.sh $data $nj || exit 1;
$norm_vars && cmvn_opts="--norm-vars=true $cmvn_opts"
echo $cmvn_opts > $dir/cmvn_opts ** keep track of options to CMVN.
**这里可能第一个难理解的地方,但仔细分析也不难
首先这个是一个feats变量定义,这个变量作为后续其他命令的参数,这个主要处理特征数据的。
这里用到了两个kaldi函数,apply-cmvn 和 add-deltas
apply-cmvn 的输入3个文件:
–utt2spk=ark: sd