Kaldi(A5)語言模型及HCLG.fst生成
阿新 • • 發佈:2020-12-27
技術標籤:語音
這節介紹一下如何修改生成適合自己場景的語言模型。
Ref
Online decoding in Kaldi(Nnet2) http://kaldi-asr.org/doc/online_decoding.html
修改語言模型
首先,我們為什麼要修改語言模型?雖然已有現成的Fisher_English或者Librispeech的HCLG.fst,但是他們用到的是3-gram,也就是說上下文一共是3個單詞,而且文字涵蓋的範圍很廣。假如我只想在特定範圍內進行識別呢?比如僅僅在對某個智慧音箱的指令範圍內?這就需要我們用自己提供的語料庫來限定其識別的範圍以提升準確度,並且如果範圍較小的話還可以提升實時性。
安裝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
。
至此,我們可以搭建一個屬於自己的簡單語音識別系統了。後續將會記錄一些補充內容。