赞
踩
我目前使用kaldi分成两块: hmm-gmm和神经网络。
学习kaldi的话,先从hmm-gmm入手比较好,像steps/train_delta.sh, steps/train_fmllr.sh, steps/decode.sh这些脚本都是基于hmm-gmm模型。kaldi官网上没有多少关于hmm-gmm的资料,没有hmm-gmm基础知识的初学者可能对于decision tree,alignment, lattice这些概念一头雾水。若要搞清楚这些概念,可以看语音识别另一开原工具htk的文档htk book,htk book是学习hmm-gmm很好的一部著作,将hmm-gmm从训练到解码的过程讲解的很透彻。只要知道决策树,训练/识别网络扩展,viterbi解码,EM算法,区分训练这几个概念的原理hmm-gmm也就理解透彻了。htk book对于这些都有讲解,部分内容如EM算法,区分训练需要看一些文献。htk book第二,八,十,十二,十三章需要重点看;在学习htkbook的过程中,可以结合着kaldi的脚本对照理解;比如steps/train_delta.sh中build-tree命令那部分的代码对应htk book第十章tree-based clustering, gmm-est命令那部分的代码对应htk book第八章的Parameter Re-Estimation Formulae;
搞清楚hmm-gmm之后对语音识别就有了一个清晰的理解,接下来就可以上手神经网络。kaldi支持很多神经网路,如MLP, RNN, CNN, LSTM,如果对神经网路了解不多还是从MLP入手较好,MLP是神经网路中最基础的模型。
神经网路kaldi有3个工具nnet1, nnet2, nnet3,初学者可以从nnet1开始。nnet1使用的是hmm-dnn架构,相关的知识可以查阅微软俞栋2009-2013期间发表的论文。
nnet2的架构和nnet1同样是hmm-dnn架构,但是使用的是dan povey团队设计的NSGD算法,支持多线程并行训练,学习nnet2可以追dan povey从2012年之后的论文
至于nnet3,chain model,以及其他的神经网路结构(rn,cnn,lstm)的学习,当完成我上面的说的学习内容后自然对语音识别有一个大体的认识,后面要做的就是看相关的文献。微软,dan povey,google, 多伦多大学来自这些地方的论文不断的追就行了。
最后总结,语音识别是对理论要求很高的方向,学习过程中一定要注重理论知识的学习,很多公式还是有必要自己去推导下才能有深刻的理解。
文献:
HMM-GMM部分
此文献详细讲解了hmm-gmm训练算法的推导过程
此文献详细讲解了EM算法的基本原理
此文献详细讲解了区分训练的基本原理
神经网络部分:
kaldi作者Dan Povey的个人主页,学习nnet2, nnet3, chain model看Povey的论文会很有帮助;
dnn部分:
微软俞栋和多伦多大学合作,逐层训练rbm,将训练得到的rbm连接起来作为dnn训练的初始模型. 并将dnn与hmm结合用于语音识别,kaldi的nnet1工具使用的就是上述2篇论文的架构;
lstm部分:
kaldi例程中使用的lstm架构便出自于google的这两篇论文
kaldi中lstm的训练算法便出自微软的这篇论文
cnn部分:
kaldi中cnn的例程较少,而且其最新的cnn实现单元TimeHeightConvolutionComponent 与机器视觉那边的cnn实现有着很大的区别, 如果按照机器视觉中的cnn实现去做语音识别,那么训练的计算复杂度太高;kaldi最初的cnn实现单元ConvolutionComponent的设计思路和机器视觉cnn实现的思路是一致的,但是由于计算复杂度太高,现在已经打算废弃;上述两篇文章出自IBM,我在学习kaldi cnn的过程中发现kaldi TimeHeightConvolutionComponent设计的思路应该是出自这两篇论文,这种cnn架构学界称为dilated cnn,非常适合语音识别的模型训练,能够大幅度降低训练时间;
《语音识别实践》:微软研究院俞栋对HMM-DNN架构在语音识别中的相关理论讲解;内容主要是2009~2014期间学术界关于HMM-DNN架构的论文;
《模式识别》: 这本书第四章的非线性分类器作为神经网络的入门还是很合适的,理论讲解很详细;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。