语音识别工具Kaldi 笔记

`本文翻译来自:[http://white.ucc.asn.au/Kaldi-Notes/tidigits/train]
水平有限,翻译有不准确的地方望指出。

一、远程控制VS本地执行:

cmd.sh
Kaldi被设计用于与SunGrid集群一起工作。它还与其他集群一起工作。我们想在本地运行它,它也可以这样做。通过设置cmd.sh变量:而不是用 queue.pl.

export train_cmd=run.pl
export decode_cmd=run.pl

训练阶段和测试阶段,仍被分成多个jobs,分别处理不同的数据集。

二、训练识别器

这一节是由:[http://kaldi.sourceforge.net/tutorial_running.html#tutorial_running_monophone]
本页面所涵盖的大部分步骤都是由脚本run.sh触发的。
1、训练
使用脚本steps/train_mono完成。但是,在其他训练脚本中(例如steps/train_delta)使用了非常相似的步骤。
用法:

steps/train_mono.sh [options] dir> dir> dir>
  • training-data-dir 是提前准备好的训练数据的路径。
  • lang-dir 是包含所有语言模型文件目录的路径,也可以提前准备。
  • expr -dir是训练存储其所有输出的路径。如果它不存在,它将被创建。
    2、配置和选项
    train_mono脚本有许多配置选项。它们可以通过将它们作为标记传递给脚本:如下所示:-- --。或者将它们全部放入一个配置bash脚本中,并添加标记--config 。还可以通过编辑steps/train_mono中的默认设置来设置它们。

  • nj 并行运行的jobs数。默认为4

  • cmdjob 调用脚本 ,默认为run.pl
  • scale_opts获取一个字符串(用引号括起来)来控制缩放选项。默认为--transition-scale=1.0 --acoustic-scale=0.1 --self-loop-scale=0.1
  • transtic-scale默认为1.0
  • acoustic-scale默认为0.1
  • self-loop-scale默认为0.1
  • num_iters训练迭代次数,默认为40
  • max_iter_inc增加高斯数量的最大值,默认为30
  • totgauss高斯的目标值,默认为1000
  • careful传递给gmm-align-compiled。引用它的文档:“如果是真的,要做careful的对齐,这样更容易检测到对齐是否失败(包括对解码图进行循环)。“(默认false)
  • boost_silence在对齐时可以提高静音段的似然性( Factor by which to boost silence likelihoods in alignment)。默认为1.0
  • realign_iters重新对齐时的迭代次数(默认1 2 3 4 5 6 78 9 10 12 14 16 18 20 23 26 29 32 35 38)
  • power 从发生计数中确定高斯分布的指数,默认0.25
  • cmvn_opts选项将被传递到cmvn——比如scale_opts
  • stage如果程序崩溃了,这将允许您跳过一些步骤。阶段变量设置开始的阶段。下一节将讨论各个阶段(默认-4)
    3、在训练阶段工作的并行是什么
    在训练期间,训练集可以分开,每个不同的过程在不同的话语子集上训练,每个迭代被合并。

三、初始化阶段

1、初始化GMM(Stage -3)
/kaldi-truck/src/gmmin/gmm-int-mono.这定义了一开始有多少个GMM模型。
2、编译训练图(Stage -2)
/kaldi-trunk/source/bin/compile-training-graphs ,用--help 选项获得更多信息。请参阅文档的这一部分:http://kaldi.sourceforge.net/graph_recipe_train.html
3、平等的对齐数据(Stage -1)
创建一个等间距的对齐,作为进一步调整阶段的起点。用/kaldi-trunk/source/bin/align-equal-compiled .使用--help 选项获得更多的信息。
4、估计高斯函数(Stage 0)
基于gmm的声学模型进行最大似然估计。使用/ kaldi-trunk / src / gmmbin / gmm-est。用-help选项调用更多信息。这个脚本说明:
在接下来的步骤中,--min-gaussian-occupancy=3选项很重要,否则我们将无法使用“rare”的phones.之后,它们永远不会正确对齐。

四、训练(Stage=Iteration completed)

每次迭代都执行了许多步。
1、重新对齐
如果迭代是realign_iters的其中之一,那么:
- Boost Silence
Silence 被提升用/kaldi-trunk/src/gmmbin/gmm-boost/silence,--help选项获得更多信息。值得注意的是,它并不一定会提高silence phone (但它在这个培训案例中确实如此),它可以提升任何phone。它通过修改GMM的权重来做到这一点。
- 对齐
给定的GMM模型的特征被对齐。用/kaldi-trunk/src/gmmbin/gmm-align-compiled.用 --help 选项获取更多信息。
2、重新估计GMM模型
第一个积累的统计数据,在下一步中使用。这是用/kaldi-trunk/src/gmmbin/gmm- accs -states-ali完成的。用--help选项获得更多信息。
然后重做基于gmm的声学模型。这是用/kaldi-trunk/src/gmmbin/gmm-est完成的,但是使用了不同的参数。再一次用--help选项来获取更多信息。
3、合并GMMs
然后,通过使用gmm-acc-sum来生成一个模型(a.mdl文件),然后合并来自分段训练数据集的所有不同的GMMs。可以使用/kaldi-trunk/src/gmmbin/gmm-info对模型进行检查,得到关于高斯分布的一些非常基本的信息。
最后,增加gausans的数量(由max_iter_inc限制),这样当所有的迭代(num_iters)都完成时,它将接近gausans (totgauss)的目标总数——假设max_iter_inc没有限制它。

五、制作译码图

如前所述,语法(G)可以由词典 (L)组成,从而得到一个音素到字的映射。
这篇博客文章详细介绍了创作的细节。这将是数据准备步骤的一点修改。

util/mkgraph.sh 的使用方法 :最后的图使用util/mkgraph.sh创建的。对该脚本的介绍:创建一个完全扩展的译码图(HCLG),它代表我们模型中的所有语言模型、语音字典(lexicon)、上下文依赖关系和HMM结构。输出是一个有限状态机,它在输出上有word-id,在输入上有pdf-id。

它还创建了前面提到的上下文依赖图。使用:

utils/mkgraph.sh [options] <lang-dir> <model-dir><graphdir>

lang-dir 和前面一样,目录中包含所有语言模型文件的路径
model-dir 是前一个traino -mono步骤的exp -dir,它现在包含了经过训练的模型
graph-dir 是将最终图形放入的目录。在示例脚本中,这是在expr -dir下作为一个图子目录生成的。如果它不存在,它将被创建。

六、上下文选项

有三个选项可以定义使用多少phone来创建上下文。这些都作为utils/mkgraph.sh脚本的传递选项。

  • –mono 为单因素模型。例一个音素没有上下文(在steps/train_mono.sh中使用)
  • no flag(default) 为三因素模型。
  • --quinphone为五音子模型 。
  • 扩展mkgraph脚本以创建任意长度的上下文并不困难。mkgraph脚本的部分负责这个,使用/kaldi-trunk/src/fstbin/fstcomposecontext,查看它的——帮助获取更多信息。

你可能感兴趣的:(Kaldi语音识别)