语音识别并不是什么新鲜话题,但是最近两年大家发现突然大量进入了应用阶段。比如iPhone的Siri,各搜索引擎和购物网站的语音搜索等。最近的大规模应用可能源于移动互联网的创新,智能手机的普及和网络连接(比如3G/4G)提供的硬件基础是重要的前提条件。

目前市面上的应用一般都采取语音上传,服务器端分析的方式。包括Google和苹果等。并且他们的识别效率和准确度确实让人印象深刻。我曾经试用过Google Speech API,识别率同样惊人(https://www.google.com/speech-api/v2/recognize?)。

服务器端解析有一定的弊端。前段时间某TV在说明中告知用户:您的所有语音都将被上传至云端。着实惊吓到了一些用户。但是目前阶段这是唯一可行的方式,因为高质量的语音识别确实需要大量的存储空间和计算能力。

CMU SPHINX是我所知的唯一比较成功的开源语音识别项目。李开复是第一版的作者。当我第一次下载CMU SPHINX时,我对它的识别正确率非常失望。后来一番搜索我才明白,语音识别是很复杂的。它涉及语音模型,语言模型等。语音模型需要几百人,每人几十小时的语音信息量才能产生比较通用的语音库。而语言模型也很复杂,随着词汇量的增加,要猜测语音对应的文字的难度也会快速增加。也就是说要识别不同的人,同时识别大量的词汇,是非常困难的。这其中还涉及到分词,以及上下文等。更别提咱们平时说话混杂中英文了。谷歌和苹果的系统很可能使用了几个T甚至更大的存储空间来存储语音模型和语言模型。并且要有相应的计算能力快速或者实时计算。

所以要想现阶段在手机终端上本地实现高质量大词汇量语音识别是不现实的。可能等到我们的手机也有几个T存储空间时就能实现了。到那时候可能人工智能整个领域的应用都会给我们的生活带来巨大的影响。

但是这并非说CMU SPHINX没有什么别的实际用途。上面说的应用属于全词汇识别,但是有的场合并不需要那么大词汇量。比如,我们用树莓派做个小车,只要支持【前进】,【后退】,【左传】,【右转】,【停止】等少数词汇就可以了。这时候语言模型大大简化,识别率相应飞速提高。语音模型SPHINX带的有一些,另外也可以自己训练针对自己的语音模型,SPHINX有工具可以训练,只要对着屏幕的字录音就可以。

CMU SPHINX提供了一个在线的简单语言模型生成工具(http://www.speech.cs.cmu.edu/tools/lmtool-new.html)可以帮你生成语言模型。

关于如何使用CMU SPHINX上手官方网站有详细指导。 Java程序员看这个: ( http://cmusphinx.sourceforge.net/wiki/tutorialsphinx4 )

最近CMU SPINX上有一篇关于离线识别现状的文章,有详细的说明离线使用的现状。

http://cmusphinx.sourceforge.net/2015/02/current-state-of-offline-speech-recognition-and-smarttv/