这篇文章是根据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