按照我一贯的做法,来阅读开源代码:
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