美文网首页
Kaldi(A5)语言模型及HCLG.fst生成

Kaldi(A5)语言模型及HCLG.fst生成

作者: Seeker_zz | 来源:发表于2018-03-13 09:57 被阅读2626次

    这节介绍一下如何修改生成适合自己场景的语言模型。

    Ref

    Online decoding in Kaldi(Nnet2) http://kaldi-asr.org/doc/online_decoding.html

    修改语言模型

    首先,我们为什么要修改语言模型?虽然已有现成的Fisher_English或者Librispeech的HCLG.fst,但是他们用到的是3-gram,也就是说上下文一共是3个单词,而且文本涵盖的范围很广。假如我只想在特定范围内进行识别呢?比如仅仅在对某个智能音箱的指令范围内?这就需要我们用自己提供的语料库来限定其识别的范围以提升准确度,并且如果范围较小的话还可以提升实时性。
    参考“Example for using your own language model with existing online-nnet2 models”,我们只需要准备一个文本文件作为语料库即可。在这里文档提到了需要使用SRILM这个工具来生成模型,所以先来安装它。

    安装SRILM

    首先请参考
    SRILM的安装与使用
    官方Doc
    提到了还需要安装TCL,来到tcl download
    下载之后输入以下命令进行安装

    wget https://prdownloads.sourceforge.net/tcl/tcl8.6.7-src.tar.gz
    tar vxzf tcl8.6.7-src.tar.gz
    cd tcl8.6.7/unix
    ./configure
    make
    sudo make install
    

    然后继续SRILM的安装

    vim Makefile
    #修改为SRILM=/home/dale/SRILM
    make World
    PATH=$PATH:/home/dale/SRILM/bin/i686-m64:/home2/zhangzhan/SRILM/bin
    MANPATH=$MANPATH:/home/dale/SRILM/man
    make test
    

    OpenSLR

    首先看看提供给我们下载的语言模型(如果想要更好的识别率可以从这些语言模型中下载,然后根据文档中提供的命令重新训练出一个HCLG.fst
    http://www.openslr.org/11/


    可以看到3-gram和4-gram差的还是很大的…在这里我的项目对实时性要求很高,所以我准备用2-gram。

    生成ARPA语言模型

    准备好自己的文本为train_text.txt

    PATH=$PATH:/home2/zhangzhan/SRILM/bin/i686-m64:/home2/zhangzhan/SRILM/bin
    MANPATH=$MANPATH:/home2/zhangzhan/SRILM/man
    #生成计数文件
    ngram-count -text train_text.txt -order 2 -write xgn_count
    #生成ARPA LM
    ngram-count -read xgn_count -order 2 -lm xgn_lm -interpolate -kndiscount
    gzip xgn_lm
    

    好了,我们的语言模型已经生成好了,名为xgn_lm.gz,下面根据这个文件生成Kaldi所需的HCLG.fst

    生成HCLG.fst

    此处参考官方Doc给出的过程即可,需要注意的是下面命令中将会用到训练时的一些文件,所以需要先跑过训练脚本才能修改。

    PATH=$PATH:/home2/zhangzhan/kaldi-trunk/src/lmbin/:/home2/zhangzhan/kaldi-trunk/src/fstbin:/home2/zhangzhan/kaldi-trunk/tools/openfst-1.6.5/bin/:/home2/zhangzhan/kaldi-trunk/src/bin/
    dict_dir=data/local/dict                # The dict directory provided by the online-nnet2 models
    lm=xgn_lm.gz                      # ARPA format LM you just built.记得在这里修改为刚才构建的
    lang=data/lang_chain                          # Old lang directory provided by the online-nnet2 models
    lang_own=data/lang_own                  # New lang directory we are going to create, which contains the new language model
    ~/kaldi-trunk/egs/wsj/s5/utils/format_lm.sh $lang $lm $dict_dir/lexicon.txt $lang_own
    graph_own_dir=graph_own
    #model_dir=nnet_a_gpu_online
    model_dir=tdnn_1b_sp
    ~/kaldi-trunk/egs/wsj/s5/utils/mkgraph.sh $lang_own $model_dir $graph_own_dir 
    

    最后就在graph_own_dir下面生成好了经过我们定制的HCLG.fst
    至此,我们可以搭建一个属于自己的简单语音识别系统了。后续将会记录一些补充内容。

    相关文章

      网友评论

          本文标题:Kaldi(A5)语言模型及HCLG.fst生成

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