這篇文章是根據yesno樣例下的run.sh腳本寫出來的,當然腳本里還有許多附帶工具暫時就來不及一一詳解,看以後有沒有時間和興趣了。
1.
train_cmd="utils/run.pl"
decode_cmd="utils/run.pl"
定義機器運作方式,這裏是本地多任務處理工作方式,而不是gpu.
2.
if [ ! -d waves_yesno ]; then
wget http://www.openslr.org/resources/1/waves_yesno.tar.gz || exit 1;
# was:
# wget http://sourceforge.net/projects/kaldi/files/waves_yesno.tar.gz || exit 1;
tar -xvzf waves_yesno.tar.gz || exit 1;
fi
train_yesno=train_yesno
test_base_name=test_yesno
判斷是否有yesno音頻,有的話直接解壓,沒有的話,下載再解壓;命名訓練集和測試集。
3.
local/prepare_data.sh waves_yesno
local/prepare_dict.sh
utils/prepare_lang.sh --position-dependent-phones false data/local/dict "<SIL>" data/local/lang data/lang
local/prepare_lm.sh
根據音頻,準備適應kaldi框架的數據格式;準備字典,並生成相應的fst文件, L_disambig.fst(具有消歧的作用);準備語言模型,並聲稱相應的fst文件,G.fst。
4.
for x in train_yesno test_yesno; do
steps/make_mfcc.sh --nj 1 data/$x exp/make_mfcc/$x mfcc
steps/compute_cmvn_stats.sh data/$x exp/make_mfcc/$x mfcc
utils/fix_data_dir.sh data/$x
done
對訓練集和測試集分別提取特徵,並倒譜均值方差歸一化(去除噪聲,提高音頻質量)。
5.
steps/train_mono.sh --nj 1 --cmd "$train_cmd" \
--totgauss 400 \
data/train_yesno data/lang exp/mono0a
單因素訓練,使用400個高斯。
6.
utils/mkgraph.sh data/lang_test_tg exp/mono0a exp/mono0a/graph_tgpr
生成HCLG.fst,解碼網絡。
7.
steps/decode.sh --nj 1 --cmd "$decode_cmd" \
exp/mono0a/graph_tgpr data/test_yesno exp/mono0a/decode_test_yesno
for x in exp/*/decode*; do [ -d $x ] && grep WER $x/wer_* | utils/best_wer.sh; done
利用測試集進行解碼測試,並輸出word級別最優錯誤率。
END