美文网首页
Kaldi(A3)Online Decoder

Kaldi(A3)Online Decoder

作者: Seeker_zz | 来源:发表于2018-03-12 16:59 被阅读3239次

Ref

使用训练好的模型进行识别

NNET2

官网上给出的参考方法使用的是FisherEnglish训练好的NNET2模型,使用online2-wav-nnet2-latgen-faster进行解码。(所用到的命令我进行了部分修改)

~/kaldi-bak/src/online2bin/online2-wav-nnet2-latgen-faster --do-endpointing=false \
    --online=false \
    --config=nnet_a_gpu_online/conf/online_nnet2_decoding.conf \
    --max-active=7000 --beam=15.0 --lattice-beam=10.0 \
    --acoustic-scale=0.1 --word-symbol-table=graph/words.txt \
   nnet_a_gpu_online/final.mdl graph/HCLG.fst "ark:spk2utt" "scp:wav.scp" \
   ark:lattice

识别结果如下

LOG (online2-wav-nnet2-latgen-faster[5.3.31~1-4e3c1]:ComputeDerivedVars():ivector-extractor.cc:183) Computing derived variables for iVector extractor
LOG (online2-wav-nnet2-latgen-faster[5.3.31~1-4e3c1]:ComputeDerivedVars():ivector-extractor.cc:204) Done.
utt1 HI X M ZERO ZERO SEVEN A TABLE FOR TWO PLEASE 
LOG (online2-wav-nnet2-latgen-faster[5.3.31~1-4e3c1]:Print():online-timing.cc:55) Timing stats: real-time factor for offline decoding was 0.317372 = 1.71365 seconds  / 5.3995 seconds.
LOG (online2-wav-nnet2-latgen-faster[5.3.31~1-4e3c1]:main():online2-wav-nnet2-latgen-faster.cc:282) Decoded 1 utterances, 16 with errors.
LOG (online2-wav-nnet2-latgen-faster[5.3.31~1-4e3c1]:main():online2-wav-nnet2-latgen-faster.cc:284) Overall likelihood per frame was 0.482433 per frame over 538 frames.

用到了解码图HCLG.fst,以及声学模型final.mdlwords.txt用于将数字映射为对应的单词,内容大致如下:

<eps> 0
!SIL 1
<SPOKEN_NOISE> 2
<UNK> 3
A 4
A''S 5
A'BODY 6
A'COURT 7
...

spk2utt用于将语音和说话人对应起来

utt1 utt1
utt2 utt2
...

wav.scp用于指定待解码语音所在路径

utt1 testwav/1.wav

online_nnet2_decoding.conf用于设定解码的一些参数,这个比较麻烦,里面的内容需要根据相对路径进行修改,官网上也提到了,这里就不再赘述。

(如果只是想暂时了解一下Online Decoder到这里可以直接跳到末尾的总结了)


下面介绍一下别的可用的识别模型

GMM

官网上给出的参考用的是online-audio-server-decode-faster,可以看一下他的参数使用。在这里我用到的命令为online2-wav-gmm-latgen-faster,根据Kaldi tools,该命令的使用方式参考egs/rm/s5/local/online/run_gmm.sh及其调用的steps/online/decode.sh,缺少online_decoding.conf这个文件?参考wsj\s5\steps\online\prepare_online_decoding.sh生成,其中有个cmvn需要mfcc特征来生成,参考s4版本的,下载CMUhttp://www.speech.cs.cmu.edu/databases/rm1/,由于该语料库不是公开的,能下载下来的数据是MFCC格式的打包,应该也是可以生成配置文件的,在这里并没有尝试做过。其他语料库的训练脚本都是从GMM开始训练的,所以这个模型应该是最容易获得的。

NNET3

参考这个帖子,Google论坛-Optimizing nnet3/chain models for speed and memory consumption,其中提到目前实时性表现最好的是Chain模型。来到帖子中这位尝试将Kaldi应用到嵌入式平台上的作者的Github,参考他的训练脚本https://github.com/gooofy/speech/blob/master/data/src/speech/kaldi-run-chain.sh可以得到与上面的NNET2类似的解码命令。

SimpleDecoder代码

这一部分是官网上关于Decoder介绍的一小段,可能对解码的理解有些用处。

DecodableAmDiagGmmScaled gmm_decodable(am_gmm, trans_model, features, acoustic_scale);
decoder.Decode(gmm_decodable);

DecodableAmDiagGmmScaled是一个输入为transition-id,从trans_model中得到对应pdf-id,得到相应的特征值,并以这个特征值解出可能性的对象。

bool GetBestPath(Lattice *fst_out);

各个transtion-id的概率都搞完之后,再找一条最可能的路径即为识别的结果。最终产生了一个Lattice(有的翻译为词图),这个Lattice我的理解是一个规模更小的、包含最终识别结果的、整合了语言模型、声学模型和转移概率的图,后续可以用一些命令来从这个图里面找到最可能的路径得出识别结果。其原文解释为

The lattice is a finite-state transducer whose input and output labels are whatever labels were on the FST (typically transition-ids and words, respectively), and whose weights contain the acoustic, language model and transition weights.

整个SimpleDecoder工作的流程有点类似遍历搜索,在前进的过程中记录下自己走过的路径,到达最终的句子末端的时候开始回头看自己走过的路,选出最好的一条路作为识别结果。

实时性改进

准确率和实时性之间的trade-off

  • 修改语言模型
  • 修改解码参数
    识别速度与wav也有关系(有的语音读出来模棱两可,所以在规定的beam下面会存在多个选择,导致规模相应增大,速度变慢)
  • 修改声学模型
    NNET2:Librispeech和Fisher English最终的模型大小相近,没有现成的较小的NNET2模型。
    NNET:http://www.kaldi-asr.org/doc/dnn1.html#dnn1_conversion_to_dnn2 ,可以找一个现成的训练好的较小的NNET模型转换为NNET2模型。(和NNET2的区别在于训练方式不同,原理没区别)
    GMM:由于训练NNET2或是NNET之前都要进行GMM训练,所以现成的GMM声学模型是最多的。比较麻烦的是没有现成的参数配置文件(这个文件是根据脚本和语料库的MFCC特征生成的),选用哪些特征可以参考https://ai-toolkit.blogspot.jp/p/voicebridge.html
    NNET3:https://github.com/kaldi-asr/kaldi/pull/2180
    时间对比 实时性看起来是最好的,经过改进之后setup time也变得可以接受了,缺点是没有现成的较小的模型和配置文件(有一个ASpIRE,不过声学模型比较大),需要重新训练。训练的过程将在后续的文章中提到。

总结

Online Decoder就是一个使用已经训练好的声学模型及语言模型来实现语音识别的解码器,也就是说,我们跑训练脚本的最终目的就是得到这两个模型,后续的文章将会更细致的说明这两个模型的作用及如何配置。

相关文章

网友评论

      本文标题:Kaldi(A3)Online Decoder

      本文链接:https://www.haomeiwen.com/subject/spkgoxtx.html