按照我一貫的做法,來閱讀開源代碼:
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