ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-12-26 20:58:13  阅读:448  来源: 互联网

标签:lang home2 own lm Kaldi SRILM A5 HCLG dir


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

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
至此,我们可以搭建一个属于自己的简单语音识别系统了。后续将会记录一些补充内容。

 

标签:lang,home2,own,lm,Kaldi,SRILM,A5,HCLG,dir
来源: https://blog.csdn.net/QFire/article/details/111769154

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有