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

這節(jié)介紹一下如何修改生成適合自己場景的語言模型。

Ref

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

修改語言模型

首先,我們?yōu)槭裁匆薷恼Z言模型?雖然已有現(xiàn)成的Fisher_English或者Librispeech的HCLG.fst,但是他們用到的是3-gram,也就是說上下文一共是3個單詞,而且文本涵蓋的范圍很廣。假如我只想在特定范圍內(nèi)進行識別呢?比如僅僅在對某個智能音箱的指令范圍內(nèi)?這就需要我們用自己提供的語料庫來限定其識別的范圍以提升準確度,并且如果范圍較小的話還可以提升實時性。
參考“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

然后繼續(xù)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

首先看看提供給我們下載的語言模型(如果想要更好的識別率可以從這些語言模型中下載,然后根據(jù)文檔中提供的命令重新訓練出一個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
#生成計數(shù)文件
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

好了,我們的語言模型已經(jīng)生成好了,名為xgn_lm.gz,下面根據(jù)這個文件生成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.記得在這里修改為剛才構(gòu)建的
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下面生成好了經(jīng)過我們定制的HCLG.fst。
至此,我們可以搭建一個屬于自己的簡單語音識別系統(tǒng)了。后續(xù)將會記錄一些補充內(nèi)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 很多人覺得繪畫很難,很多人覺得很簡單,大部分畫不好的人都把這些歸咎于自己沒天賦,其實,在我看來,你要成為大畫家,確...
    攝影師超超閱讀 996評論 2 20
  • 我記得,我騎共享單車的樣子,連自己都想笑。我記得,我開車的樣子,連自己都逗樂。我記得,無論在路上行駛什么交通...
    8e0b8093b46f閱讀 93評論 0 4
  • 鴿子和狗吠。人對于聲音是相當敏感的。世界萬物,都會發(fā)出自己的聲音。水杯與水的摩擦聲,空調(diào)運行的聲音,摩托車啟動的噪...
    被踩著的尾巴閱讀 202評論 0 2
  • 哇,運城的天真美,云也變化極多。 你看,這朵云像一架飛船,停留在天空中,好像還在等待著它的同伴們。 ...
    06小石頭曾立軒閱讀 215評論 0 0
  • 《無題》—— littlesen (山木)曲曲池邊路,春來少人行。含水芙蓉葉,春去氣猶清。夕嵐分彩翠,高樹藏鶯聲。...
    嵐風的葉子閱讀 1,473評論 0 0

友情鏈接更多精彩內(nèi)容