从去年开始,深度学习工具箱如雨后春笋般一个接一个出来。但是作为语音识别的学生,研究或者工程人员应该选择哪个工具呢?下面是我的一些理解,希望对大家选用工具有一点帮助。
1、tensorflow
社区应该目前是最大的,谷歌有那么一大帮人来维护,所以很多人都在开始使用。在tf最近一次更新中我们可以看到tf开始有两个对语音特征支持的特性:为音频特征生成添加了AudioSpectrogram 操作跟为语音特征生成添加了Mfcc操作。之前的tf做语音的工具大多外接kaldi的特征或者Python来写特征处理这部分。tf做语音的例子有很多,比如:tfkaldi、speech-to-text-wavenet、Automatic_Speech_Recognition等。但这些要不效果不好,要不借助kaldi。此外,如果想使用tf来训练神经网络,怎么更好的利用多卡还是需要探索的。
2、mxnet社区很早就开始支持语音识别的例子,其中目前有2个exmaple,有兴趣的可以去看下。据说mxnet是支持多卡多机性能比较好,毕竟有李沐大神在。但是他们还是借助了kaldi来解码。链接如下:https://github.com/dmlc/mxnet/tree/master/example下的speech-demo跟speech_recognition。
3、keras
在语音识别的例子github也有,keras-kaldi。有兴趣的去看下,目前 性能还是没有kaldi本身好。链接如下:https://github.com/dspavankumar/keras-kaldi。
4、CNTK
是微软的深度学习工具,微软的语音组也使用这个工具,CNTK里本身 也有语音的例子,当然github上也有CNTK-kaldi的例子,有兴趣的可以看下。
总结下,由于语音识别本身的特殊性,字典,隐马尔可夫,解码等一些特殊的东西,我建议所有学识别的人都需要学kaldi,你需要使用它来了解识别的一些原理跟知识。如果你一定要使用tf之类的,可以在神经网路阶段使用。但之前的一些阶段目前最好的解决方式还是kaldi。目前github上有很多end-to-end的处理方式,但是我觉得如果不用字典语言模型等效果一定没那么好。下面的kaldi的作者Dan Povey回答tensorflow跟kaldi 问题的答复:
Tensorflow is a lower-level, more general-purpose tool.Unless you're the kind of person or team that knows deeply about speech recognition and has months or years to work on it, you wouldn't be able to use Tensorflor for ASR.People have tried using TensorFlow with Kaldi and generally speaking they have not gotten as good results as Kaldi's own inbuilt neural net tools. Which is not to say it's not possible, but it's a lot of work and it doesn't make your life simpler than using Kaldi's own tools.
所以我觉得目前最佳的路线:有数据有机器,GMM-HMM,DNN-HMM,LSTM-HMM,LSTM-CTC。至于工具kaldi是需要掌握的,然后如果有对tf或者mxnet效率优化的人,如果他们的确比kaldi训练快,可以尝试使用,要不然还是建议使用kaldi本身的nnet3。此外,kaldi目前也开始支持图像的一些例子,比如cifar等。
