kaldi-train_mono.sh详解

本文介绍Kaldi中单音素模型的训练流程,包括初始化GMM、构建图、对齐、最大似然估计等步骤,并解释了关键参数的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kaldi中训练声学模型,首先是训练单音素模型,即mono-phone过程,

本文主要讲述mono-phone训练的过程。

代码为steps/train_mono.sh

用法如下所示:

steps/train_mono.sh [options] <training-data-dir> <lang-dir> <exp-dir>
training-data-dir表示事先准备好的要准备训练数据文件夹(即第0步准备的:wav.scp,text,utt2spk,spk2utt文件等,local/data_prep.sh生成);

lang-dir表示事先准备好的和语言模型相关的文件(即第20步准备的L_disambig.fst,L.fst,oov.int,oov.txt,phones.txt,topo,

words.txt文件等,由step/prepare_lang.sh生成);

exp-dir表示输出文件路径;

[options]表示输入配置参数,如下所示:

-nj:并行job数

-cmd:job调度分发脚本,默认是run.pl(Grid Engine分发脚本)

调用如下:

local/train_mono.sh --nj "$train_nj" --cmd "$train_cmd" $traindatadir $langdir $expdir/mono


打开steps/train_mono.sh,首先是一项参数

主要的如下所示:

scale_opts控制缩放选项:

--transition-scale=1.0 --acoustic-scale=0.1 --self-loop-scale=0.1

num_iters训练迭代次数;

max_iter_inc每个轮次最大增加的高斯数

totgauss总高斯数;

careful传递给gmm-align-complied参数,默认为false;

boost_silence系数,用来增加静音音素的似然;

realign_iters在第N次迭代进行一次对齐操作,

在训练的job并行训练过程中,训练数据的各个子集合是分散到不同的处理器去进行训练,然后每轮迭代后会进行合并。

下面就讲一下训练的过程:

1.首先是初始化GMM,使用的脚本是/kaldi-trunk/src/gmmbin/gmm-init-mono输出是0.mdl和tree文件;

2.compile training graphs,使用的脚本是/kaldi-trunk/source/bin/compile-training-graphs,输入是tree,0.mdl和L.fst

   输出是fits.JOB.gz,其是在训练过程中构建graph的过程;

3.接下来是一个对齐的操作,kaldi-trunk/source/bin/align-equal-compiled

4.然后是基于GMM的声学模型进行最大似然估计得过程,脚本为/kaldi-trunk/src/gmmbin/gmm-est

5.然后进行迭代循环中进行操作,如果本步骤到了对齐的步骤,则调用脚本kaldi-kaldi/src/gmmbin/gmm-align-compiled

6.重新估计GMM,累计状态,用脚本/kaldi-trunk/src/gmmbin/gmm-acc-states-ali;调用新生成的参数(高斯数)重新估计GMM,调用脚本/kaldi-trunk/src/gmmbin/gmm-est

7.对分散在不同处理器上的结果进行合并,生成.mdl结果,调用脚本gmm-acc-sum

8.增加高斯数,如果没有超过设定的迭代次数,则跳转到步骤5重新进行训练

最后生成的.mdl即为声学模型文件

在离线识别阶段,即可以调用utils/mkgraph.sh;来对刚刚生成的声学文件进行构图

之后解码,得到离线测试的识别率。

以上就完成了声学模型训练第一个阶段,mono-phone训练的代码介绍过程。

参考文献:https://blog.youkuaiyun.com/quheDiegooo/article/details/70132679

### Kaldi依赖检查脚本中Python版本和Intel MKL未安装问题的解决方案 #### 1. 解决Python2.7未安装的问题 Kaldi工具链可能仍然需要Python 2.7的支持,尽管现代开发环境更倾向于使用Python 3.x。如果`extras/check_dependencies.sh`报告缺少Python 2.7,则可以通过以下方法解决问题: 在基于Debian/Ubuntu的系统上,可以运行以下命令来安装Python 2.7及其相关包: ```bash sudo apt-get update sudo apt-get install python2.7 python-pip ``` 对于其他Linux发行版(如CentOS/RHEL),可以尝试通过系统的软件仓库安装Python 2.7[^1]。 完成安装后重新运行`extras/check_dependencies.sh`以验证是否解决了该问题。 --- #### 2. 安装Intel MKL或替代矩阵代数库 当`check_dependencies.sh`检测到Intel MKL缺失时,通常会建议运行`extras/install_mkl.sh`脚本来自动安装MKL。以下是具体操作步骤: - **自动安装Intel MKL** 运行以下命令以启动MKL安装过程: ```bash cd kaldi/tools/extras/ ./install_mkl.sh ``` 此脚本将下载并配置Intel MKL库。需要注意的是,某些操作系统可能会提供通过包管理器安装的MKL版本。例如,在Ubuntu 20.04及以上版本中,可以直接通过APT安装MKL,并确认其是最新的稳定版本[^2]。 - **手动指定路径或其他替代方案** 如果不希望使用Intel MKL,也可以选择其他兼容的矩阵运算库作为替代品。更多详情可参考官方文档中的说明页面: [http://kaldi-asr.org/doc/matrixwrap.html](http://kaldi-asr.org/doc/matrixwrap.html)[^3] 配置完成后再次运行`tools/extras/check_dependencies.sh`以确保所有依赖项均已满足。 --- #### 3. 总结注意事项 为了成功解决上述问题,请注意以下几点: - 确认已正确安装所需的Python版本以及pip工具。 - 使用推荐的方法安装Intel MKL或者替换为支持的第三方库。 - 执行完每一步之后都应调用`check_dependencies.sh`进行验证,直到不再显示任何错误消息为止。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值