Kaldi脚本是kaldi的功能核心,在kaldi编译后,会编译出很多可执行文件,这些文件在脚本里调用生成各种模型结果,这些可执行文件也有一些辅助文件,比如fstdraw和fstprint等等。
这些脚本里通常第一个步骤是数据准备过程,这个过程可以通过命令下载网上的数据,也可以指定数据目录来使用本地数据,有了数据,就是一些_prep类脚本命令,比如timit_data_prep.sh,这个脚本里下段代码:。
#生成文本标签
cat $tmpdir/${x}.trans | sort > $prepare_dir/$x/${y}_text || exit 1;
if [ $y==phn ]; then
cp $prepare_dir/$x/${y}_text $prepare_dir/$x/${y}_text.tmp
python local/normalize_phone.py --map $map_file --to $phoneme_map --src $prepare_dir/$x/${y}_text.tmp --tgt $prepare_dir/$x/${y}_text
rm -f $prepare_dir/$x/${y}_text.tmp
cp $prepare_dir/$x/${y}_text $prepare_dir/$x/transcript_${y}_text
fi
比如cat行,先cat显示文件,文件内容按管道输出,sort排序后再输出到_text文件,如果遇到错误exit 1返回。
if段里调用python脚本来处理数据文件,python的切片和矩阵数据功能非常强,处理数据代码简单还好理解。
从上面代码片段就知道了kaldi脚本的特点,shell编程和python编程结合来处理数据,而shell编程初学者很少用到,python编程复杂环境初学者也很少接触,所以初学者一般很难耐心看kaldi脚本,遇到问题就很难解决。