天天看點

kaldi 源碼閱讀(一) - 環境搭建

按照我一貫的做法,來閱讀開源代碼:

1. 編譯以及基礎功能的測試
2. 子產品功能劃分
3. 單一子產品解析(添加注釋或日志)
4. 擴充新demo工程
5. 自定義子產品及調用
           

文章也會按照上述流程進行開展。

進入正題...

一、環境建構

  • 安裝必要工具
sudo apt-get install -y git wget libatlas-dev libatlas-base-dev gfortran g++ zlib1g-dev autoconf automake gcc libtool perl subversion
           
  • 同步代碼
git clone https://github.com/kaldi-asr/kaldi.git kaldi
           
  • kaldi 依賴包

如下工具均在 kaldi/tools 内進行編譯安裝,詳細内容參見 kaldi/tools/Makefile 中的編譯檔案

- OpenFst                狀态機
- IRSTLM                 語言模型工具
- SRILM                    比 IRSTLM 好的語言模型工具
- sph2pipe                将 sph 檔案轉換為 其他格式比如 wav等。 LDC 資料相關的腳本需要該工具。
- sclite                       打分工具,也可以使用簡單程式比如 compute-wer.cc 
- ATLAS                    線代庫
- CLAPACK              線代庫
- OpenBLAS             線代庫
           

二、編譯執行

cd kaldi/tools
# 檢查目前系統是否已經安裝完所依賴的工具,詳細内容參見 kaldi/tools/INSTALL
./extras/check_dependencies.sh
# 安裝完所有内容之後執行如下步驟
make; cd ../src; ./configure; make
           

按上述方式,先安裝基礎的工具,然後編譯 kaldi 基礎元件

三、測試

進入 egs/yesno/s5 目錄中, 執行如下指令:

run.sh
           

運作後生産如下日志:

....
fstminimizeencoded 
fstrmsymbols exp/mono0a/graph_tgpr/disambig_tid.int 
fsttablecompose exp/mono0a/graph_tgpr/Ha.fst data/lang_test_tg/tmp/CLG_1_0.fst 
fstdeterminizestar --use-log=true 
fstisstochastic exp/mono0a/graph_tgpr/HCLGa.fst 
0.5342 -0.000482149
HCLGa is not stochastic
add-self-loops --self-loop-scale=0.1 --reorder=true exp/mono0a/final.mdl 
steps/decode.sh --nj 1 --cmd utils/run.pl exp/mono0a/graph_tgpr data/test_yesno exp/mono0a/decode_test_yesno
decode.sh: feature type is delta
steps/diagnostic/analyze_lats.sh --cmd utils/run.pl exp/mono0a/graph_tgpr exp/mono0a/decode_test_yesno
steps/diagnostic/analyze_lats.sh: see stats in exp/mono0a/decode_test_yesno/log/analyze_alignments.log
Overall, lattice depth (10,50,90-percentile)=(1,1,2) and mean=1.2
steps/diagnostic/analyze_lats.sh: see stats in exp/mono0a/decode_test_yesno/log/analyze_lattice_depth_stats.log
local/score.sh --cmd utils/run.pl data/test_yesno exp/mono0a/graph_tgpr exp/mono0a/decode_test_yesno
local/score.sh: scoring with word insertion penalty=0.0,0.5,1.0
%WER 0.00 [ 0 / 232, 0 ins, 0 del, 0 sub ] exp/mono0a/decode_test_yesno/wer_10_0.0
           

繼續閱讀