一、相关软件及包的安装
将kaldi从 github 下载到本地,进去 kaldi 目录下,根据 INSTALL 进入 kaldi 目录下的 src 和 tools ,按照目录下的 INSTALL 将依赖包和库都安装好。
二、数据准备
1、下载 kaldi 实例中的语料。
2、自己准备语料,自己准备语料可以参照下载的语料格式及命名,将文件进行分包等。
三、跑代码
进入kaldi/egs,里面有很多例子,我们以清华30小时(egs/thchs30)为例。
1、数据预处理
local/thchs-30_data_prep.sh $H $thchs/data_thchs30 || exit 1;
根据此命令可以在$H目录下生成 data 文件夹,data 文件夹下包含 train,dev, test, test_phone, 里面包含数据集相关的信息 ------ phone.txt; spk2utt; text; utt2spk; wav.scp; word.txt
2、提取 MFCC 特征及进行 CMVN (倒谱均值归一化)
steps/make_mfcc.sh --nj $n --cmd "$train_cmd" data/mfcc/$x exp/make_mfcc/$x mfcc/$x || exit 1;
steps/compute_cmvn_stats.sh data/mfcc/$x exp/mfcc_cmvn/$x mfcc/$x || exit 1;
创建 data/mfcc/train (dev, test), 里面包含了从data/train (dev, test) 下复制过来的上述6个文件以及这两句代码生成的 cmvn.scp 和 feats.scp。
除此之外,data/mfcc/train (dev, test) 保存了详细的MFCC 特征和 CMVN 数据。
3、生成语言模型相关
utils/format_lm.sh data/lang data/graph/word.3gram.lm.gz $thchs/data_thchs30/lm_word/lexicon.txt data/graph/lang || exit 1;
创建data/graph/lang, 包含 L.fst; G.fst ; topo 及一些保存音素对应编号或者次对应编号及一些其他编号的相关文件。
4、训练
steps/train_mono.sh --boost-silence 1.25 --nj $n --cmd "$train_cmd" data/mfcc/train data/lang exp/mono || exit 1;
创建 exp/mono, 包含 final.mdl; tree 等文件用于之后解码将音频特征到状态及音素的映射。
5、构图(生成 HCLG.fst)
(local/thchs-30_decode.sh --mono true --nj $n "steps/decode.sh" exp/mono data/mfcc &)
在文件 local/thchs-30_decode.sh 里
utils/mkgraph.sh $opt data/graph/lang $srcdir $srcdir/graph_word || exit 1;
创建 exp/mono/graph_word, 包含 HCLG.fst; phones.txt; words.txt 等文件,用于之后解码在 HCLG.fst 找寻最小路径。
6、解码
(local/thchs-30_decode.sh --mono true --nj $n "steps/decode.sh" exp/mono data/mfcc &)
在文件 local/thchs-30_decode.sh 里
$decoder --cmd "$decode_cmd" --nj $nj $srcdir/graph_word $datadir/test $srcdir/decode_test_word || exit 1
四、查的相关资料
来源于厦门大学洪青阳副教授的WFST解码器