当前位置:   article > 正文

Kaldi(A5)语言模型及HCLG.fst生成_二元语言模型生成的g.fst

二元语言模型生成的g.fst

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

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
下载之后输入以下命令进行安装

 

  1. wget https://prdownloads.sourceforge.net/tcl/tcl8.6.7-src.tar.gz
  2. tar vxzf tcl8.6.7-src.tar.gz
  3. cd tcl8.6.7/unix
  4. ./configure
  5. make
  6. sudo make install

然后继续SRILM的安装

 

  1. vim Makefile
  2. #修改为SRILM=/home/dale/SRILM
  3. make World
  4. PATH=$PATH:/home/dale/SRILM/bin/i686-m64:/home2/zhangzhan/SRILM/bin
  5. MANPATH=$MANPATH:/home/dale/SRILM/man
  6. make test

OpenSLR

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


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

 

生成ARPA语言模型

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

 

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

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

生成HCLG.fst

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

 

  1. 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/
  2. dict_dir=data/local/dict # The dict directory provided by the online-nnet2 models
  3. lm=xgn_lm.gz # ARPA format LM you just built.记得在这里修改为刚才构建的
  4. lang=data/lang_chain # Old lang directory provided by the online-nnet2 models
  5. lang_own=data/lang_own # New lang directory we are going to create, which contains the new language model
  6. ~/kaldi-trunk/egs/wsj/s5/utils/format_lm.sh $lang $lm $dict_dir/lexicon.txt $lang_own
  7. graph_own_dir=graph_own
  8. #model_dir=nnet_a_gpu_online
  9. model_dir=tdnn_1b_sp
  10. ~/kaldi-trunk/egs/wsj/s5/utils/mkgraph.sh $lang_own $model_dir $graph_own_dir

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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/159987
推荐阅读
相关标签
  

闽ICP备14008679号