Kaldi学习(一)

最近准备开始进行语音识别算法的学习,所以决定拿kaldi进行解读,这样一方面更加增加自己C++的基本功,另一方面也可以让自己慢慢走入语音识别的大门,自己的路,决定了就走下去,不管有多难。

首先我决定从kaldi的官网入手,不多说进入主题。

kaldi是什么

kaldi是使用c++写的语音识别的工具,apache 授予了v2.0的证书(果真应验,apache旗下无弱将)。kaldi旨在供语音识别研究员使用。

kaldi的命名

据传说,kaldi是埃塞俄比亚人,他发现了咖啡。

kaldi相较于其他工具

kaldi在目标和范围上和HTK相似,目标是用c++写的现代灵活的代码易于修改和扩展。它包含以下重要特点:

  1. 与有限状态转换器的代码级集成(FSTs)。 【我们根据openFst工具包进行编译,将其用作库】
  2. 广泛的线性代数支持。【我们包含一个包装BLAS和LAPACK的矩阵库】
  3. 可扩展的设计。【尽可能的,我们以最通用的方式提供我们的算法。例如,我们的解码器在提供由(帧,fst-input-symbol)索引的分数的对象上进行模版化。这意味着解码器可以从任何合适的分数来源工作,例如神经网络。】
  4. 开放许可。【该代码在apache2.0下获得许可,这是限制最少的许可证之一】
  5. 完整的recipes。【我们的目标适用于构建语音识别系统的完整配方,从广泛使用的数据库(比如语言数据联合会提供的数据)开展工作。】

发布完整配方是kaldi的重要目标之一,由于代码在允许修改和重新发布的许可下公开获得,我们希望鼓励人们以kaldi自己的脚本类似的方式发布他们的代码以及脚本目录。

考虑到时间的限制,我们尽可能的使kaldi的文档尽可能的完整。但是在短时间内,我们不能希望自己生成与HTK一样全面的的文档。特别是在HTKbooks中有很多介绍性资料,为外行人解释统计语音识别,这可能永远都不会出现在kaldi的文档之中。kaldi的大部分文档是这样写的,只有专家才能访问它。在未来,我们希望能够使得它更加的容易访问,同时铭记我们的目标受众是语音识别研究人员和语音识别培训人员。总的来说,kaldi并不是一个傻瓜式的语音识别工具包。他可以让你做很多没有意义的操作(PS:最后这句说的很有意思,大家自行理解)。

The flavor of kaldi

在本节中,我们试图总结kaldi工具包一些更加通用的特性。在某种程度上,他描述了当前开发人员的目标或者说当前项目的状态。这并不意味着排除不同风格的研究人员。

  1. 我们强调通用的算法和通用的组合配方。【我们说通用算法指的是像线性变换那样的东西,而不是专属于语音的内容。但是如果更具体的算法是有用的,我们不会那么教条。我们希望可以在任意数据集上运行的配方,而不是定制的数据集的配方。】
  2. 我们更喜欢证明正确的算法。【配方的设计原则是他们绝不会以灾难性的方式失败,一直在避免可能失败的配方和算法,即使他们在正常情况下没有失败。】
  3. kaldi的代码是经过全面测试的。【目标是让所有或几乎所有的代码都具有测试例程。】
  4. 我们尽量使简单的情况简单化。【在构造一个大型的语音工具包的时候,代码可能会成为很少替换的forest,这很危险。我们试图通过以下的方式来构建工具包,来避免这种情况。每一个命令行语句通常适用于有限的一组案例。例如解码器可能只适用于GMM。因此,当你添加新模型的类型时,您将创建一个新的命令行解码器。(调用相同的底层模版代码)。】
  5. kaldi代码很容易理解。【尽管kaldi工具包整体可能会变的非常庞大,但我们的目标是让每个单独的部分都可以毫不费力的理解。如果他提高了单个件的可理解性,我们将会重复书写代码。】
  6. kaldi代码很容易重构和重用。【我们希望工具包尽可能松散耦合,这意味着给定任何的头文件都应该尽量少#include其他的头文件,矩阵库尤其依赖于另一个子目录中的代码,所以他可以独立于其他所有的kaldi代码独立使用。(PS:不错,这个库想必是算法部分使用最多的了。)】

项目的状态

目前,我们拥有大多数标准结束的代码和脚本,包括所有的标准线性变换,MMI,增强的MMI和MCE判别式训练,以及特征空间判别式训练。我们为华尔街日报和资源管理以及配电盘提供配方,由于词汇和语言模型问题,交换机配方尚未提供最新的结果。因此我们不使用任何的外部数据源。

以上是关于About the kaldi project的部分(省去了最后的引用),看到这里个人相信广大第一次接触他的人都有很多细节不懂,比如什么解码器,什么FSTs,还有那些c++矩阵包到底是如何使用的等等等等。其实我也是存在同样的很多问题,那么我们必须把问题分解,分为多个子任务从分别击破。我的想法是按照官网的理论走一遍,然后针对各个模型走一遍,然后针对模型的论文走一遍,最后代码走一遍。至于里面的第三方的包的使用方法和细节,我则利用业余时间进行测试学习,如果有可能,我会写博客进行介绍。那么今天就先到这里,与诸君共勉。

猜你喜欢

转载自blog.csdn.net/qq_23660243/article/details/80633701
今日推荐