自动语音识别(Automatic speech recognition,ASR)领域被广泛使用的开源语音识别工具包 Kaldi 现在也集成了 TensorFlow。这一举措让 Kaldi 的开发者可以使用 TensorFlow 来部署他们的深度学习模块,同时 TensorFlow 的用户也可以更为方便地使用 Kaldi 的各种经验。
一、传统 ASR 有哪些问题?
建立一个可以在各种语言、口音、环境和对话类型中理解人类语言的 ASR 系统,是一项非常复杂的任务。传统的 ASR 系统是将许多单独的模块集成一个流水线,其中每个模块都在前一个模块的输出上进行。原始音频数据从一端进入,然后从另一端输出识别语音转录内容。典型的基于统计模式识别方法的语音识别系统一般会由信号处理及特征提取模块、声学模块、发音词典、语言模块和解码器等组成。在 Kaldi 工具包中,为了支持越来越多的终端用户应用程序,集成了更多的模块。
在过去几年里,随着深度神经网络的发展,许多现有的 ASR 模块都被深度神经网络所取代,这种取代使得单词识别精度得到很大的提高。但是在开发生产级的 ASR 系统时,仍然有许多问题需要克服:
算法——深度学习算法在一些问题,例如声学环境(噪声)、特定语言发音、词汇范围等方面能够给出非常好的结果,但部署的过程中并不总是能很好的适应;
数据——构建不同语言、不同声学环境的 ASR 系统需要大量的多种类型的数据,但我们可能没有恰好需要的这种数据。
规模——一般能支持大量使用和许多种语言的 ASR 系统,通常会耗费大量的计算。
我们以 ASR 系统中的语言模块来说。语言模块是大多数先进的 ASR 系统的关键部分,他们主要依靠统计模型来揭示语言单元的内在统计规律,为整个系统提供了语言背景,有助于预测正确的单词序列,并且能够区分听起来相似的单词。随着近来机器学习方面的突破,语音识别开发人员正在使用基于深度学习的语言模型,被称为神经语言模型。这种神经语言模型的结果相比传统统计方法有显著的提升。但神经语言模型的训练和部署都是极为复杂且非常耗时的。
二、将 TensorFlow 集成到 Kaldi 中
总部位于西雅图的 IntelligentWire 公司是一家通过云软件来弥合实时手机通话和业务应用之间差距的公司。他们的目标就是将企业代表与客户进行的数千次对话内容实时分析和处理,并自动处理数据输入和响应请求等任务。为了使 ASR 系统在这种情况下有用,就必须保证它能以非常低的延迟、提供非常准确的转录,并且计算规模不能很大以有效地支持数千个并发对话。在这种需求下,IntelligentWire 公司的 Yishay Carmiel 和 Hainan Xu 带领的两支团队意识到这些困难,并共同合作完成了 Kaldi 和 TensorFlow 的集成。
将 TensorFlow 集成到 Kaldi 后,他们对 ASR 的开发周期减少了一个数量级。例如上面所说的语言模块,如果将 TensorFlow 应用到这个模块,那么从模型道概念验证可能只需要几天,而不是几个星期;对于整个 ASR 系统,开发周期也从几个月减少到了几个星期。此外,TensorFlow 的集成也使 Kaldi 所需要的数据大为简化。
将 TensorFlow 作为一个模块集成到 Kaldi 中,对于 Kaldi 研发人员来说,好处是巨大的。同样的,这种集成也让 TensorFlow 的开发人员能够轻松地访问强大的 ASR 平台,并且能够将现有的语音处理流程(如 Kaldi 强大的声学模型)纳入到机器学习应用程序中。Kaldi 中的那些用于培训 TensorFlow 模型的模块可以不影响整体地进行替换,这对于扩展极为方便。此外,现在已经用到生产中的 Kaldi 系统可以用来评估这个集成模型的质量。
我们希望 Kaldi-TensorFlow 的集成能够将这两个充满活力的开放源码的开发社区更加贴近,共同支持各种新的基于语言的产品和研究的突破。
雷锋网注——
集成模型代码:https://github.com/kaldi-asr/kaldi
示例:https://github.com/kaldi-asr/kaldi/tree/master/egs/ami/s5/local/tfrnnlm
本文为雷锋网根据谷歌开发者 Raziel Alvarez 的博客《Kaldi now offers TensorFlow integration》整理而成,Alvarez 是谷歌的研究工程师,IntelligentWire 的创始人。