Kaldi语音识别实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 设计思想

一个开源工具包的成功离不开工具包初始的设计思想。因此,本节将从几个方面来阐述Kaldi的设计思想,试图窥探Kaldi成功背后的奥秘。

2.2.1 初衷

在Kaldi之前已经有了不少与语音识别相关的开源工具包,比如美国卡内基梅隆大学主导开发的Sphinx、英国剑桥大学主导开发的HTK等。这些工具包本身都取得了非常大的成功,为什么要重新开发一个语音识别工具包Kaldi呢?

因为开发人员背景等原因,早期的Kaldi在很多方面都和剑桥大学主导的语音识别工具包HTK非常类似,比如整体的使用风格、涵盖的技术要点等。但是Kaldi在设计之初就有区别于其他语音识别工具包的理念,包括但不限于:

· 源代码库由C++代码写成;

· 容易修改和扩展;

· 涵盖现代的、最新的语音识别技术。

具体体现在实施上,Kaldi相对于其他语音识别工具包的技术特性有;

· 代码容易阅读和理解;

· 代码容易复用和重构;

· 大量的线性代数的支持,易于在不同线性代数库之间切换;

· 尽可能通用的算法实现,避免使用只为特定任务服务的代码;

· 代码级集成有限状态转录机(Finite State Transducers)技术,具有基于FST的现代解码器;

· 始终追踪最新的语音识别技术,保持行业领先。

尽管Kaldi面向的用户群体是有一定语音识别研究基础的研发人员,但是Kaldi设计之初对通用性、可拓展性等一系列源代码层次的考量,大大降低了Kaldi作为语音识别工具包的门槛,是Kaldi目前如此流行不可忽视的一个因素。

2.2.2 开源

不少语音识别工具包都采用了开源协议,Kaldi在开源协议的使用上,选择了更加开放的Apache Licence Version 2.0。这意味着个人、研究机构,甚至商业机构可以相对自由地利用Kaldi进行商业和非商业的活动。

开放的开源协议是Kaldi变得越来越成功的一个重要因素。一方面,开放的开源协议吸引了很多个人开发者和企业开发者(尤其是初创企业)围绕着Kaldi来打造产品,另一方面,随着Kaldi被逐渐用于实际产品中,其性能被不断打磨优化,从而吸引了更多的开发者参与进来。从某种程度上说,Kaldi相对开放的开源协议为语音识别领域初创公司的繁荣做出了不可磨灭的贡献。

2.2.3 训练脚本

Kaldi的一个重要特性是拥有非常完整的语音识别系统训练脚本,这一点主要基于开发早期的两个考虑。第一个考虑是Kaldi的开源特性。由于Kaldi是开源的,Kaldi的主要开发者们希望Kaldi的其他用户和开发者也可以将他们自己的开发工作反馈给社区,因此以“示例”的形式开放了语音识别系统训练脚本,希望用户和开发者可以仿照示例提交自己的开发成果。第二个考虑是Kaldi本身的快速迭代和文档不健全。Kaldi一直处在快速迭代开发中,尽管主要开发者们已经尽量保证了文档的完整性,但是从短期来看,Kaldi的文档和其他语音识别工具包的文档相比,还是相对不完整的,主要开发者们希望通过训练脚本这种“示例”的形式,降低用户的使用门槛。

如果要给Kaldi变得如此流行的原因排序的话,Kaldi的训练脚本绝对是其中最重要的一个。在Kaldi出现之前,语音识别是一个入门门槛非常高的研究领域。一套切实有效的语音识别训练脚本,往往需要经过数年的打磨才能逐渐成型,因此往往作为重要的知识财产而密不外传,很多有兴趣但是没有相应背景的研究人员和开发人员被拒之门外。Kaldi的出现大大降低了打造一套可用的语音识别系统的门槛。本书后续章节希望通过对Kaldi已有训练脚本的梳理和引导,帮助读者快速搭建可用的语音识别系统。