kaldi如何学习

参考文献:
  链接:https://www.zhihu.com/question/65516424/answer/265297686
  著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我目前使用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部分

<htk book>: HTK Speech Recognition Toolkit

lasa.epfl.ch/teaching/l

此文献详细讲解了hmm-gmm训练算法的推导过程

cc.gatech.edu/~dellaert

此文献详细讲解了EM算法的基本原理

Discriminative Training for Large Vocabulary Speech Recognition (PDF Download Available)

此文献详细讲解了区分训练的基本原理

神经网络部分:

Dan Povey

kaldi作者Dan Povey的个人主页,学习nnet2, nnet3, chain model看Povey的论文会很有帮助;

dnn部分:

Conversational speech transcription using context-dependent deep neural networks

Context-dependent pre-trained deep neural networks for large-vocabulary speech recognition

微软俞栋和多伦多大学合作,逐层训练rbm,将训练得到的rbm连接起来作为dnn训练的初始模型. 并将dnn与hmm结合用于语音识别,kaldi的nnet1工具使用的就是上述2篇论文的架构;

lstm部分:

Long short-term memory recurrent neural network architectures for large scale acoustic modeling

Long short-term memory based recurrent neural network architectures for large vocabulary speech recognition

kaldi例程中使用的lstm架构便出自于google的这两篇论文

Training deep bidirectional LSTM acoustic model for LVCSR by a context-sensitive-chunk BPTT approach

kaldi中lstm的训练算法便出自微软的这篇论文

cnn部分:

Advances in very deep convolutional neural networks for lvcsr

Dense prediction on sequences with time-dilated convolutions for speech recognition

kaldi中cnn的例程较少,而且其最新的cnn实现单元TimeHeightConvolutionComponent 与机器视觉那边的cnn实现有着很大的区别, 如果按照机器视觉中的cnn实现去做语音识别,那么训练的计算复杂度太高;kaldi最初的cnn实现单元ConvolutionComponent的设计思路和机器视觉cnn实现的思路是一致的,但是由于计算复杂度太高,现在已经打算废弃;上述两篇文章出自IBM,我在学习kaldi cnn的过程中发现kaldi TimeHeightConvolutionComponent设计的思路应该是出自这两篇论文,这种cnn架构学界称为dilated cnn,非常适合语音识别的模型训练,能够大幅度降低训练时间;


《语音识别实践》:微软研究院俞栋对HMM-DNN架构在语音识别中的相关理论讲解;内容主要是2009~2014期间学术界关于HMM-DNN架构的论文;

《模式识别》: 这本书第四章的非线性分类器作为神经网络的入门还是很合适的,理论讲解很详细;

猜你喜欢

转载自blog.csdn.net/xwei1226/article/details/80189734