在学习脚本文件时,重点关注哪些是调用标准函数,哪些是调用特定数据集的数据处理函数;
关注每个阶段处理的输入,输出和控制参数。不要面面俱到,试图理解每行代码。
1. 下载AMI数据集的xml标注文件包;
从xml格式的标注文件提取得到data/local/annotations文件夹下文本格式的标注文件train.txt,eval.txt,dev.txt.
# Download of annotations, pre-processing, local/ami_text_prep.sh data/local/downloads
2. 下载cmu dictionary;
创建silence_phones.txt和optional_silence.txt;
从cmudict/cmudict.0.7a.symbols提取 nonsilence_phones.txt,扔掉重音(stress);
将silence phones 加到extra_questions.txt;
下载wordlist.50k;
limit the vocabulary to the predefined 50k words,从而得到文件lexicon1_raw_nosil_50k.txt;
再增加类似laughter,noise等词汇后得到最终的lexicon.txt;
utils/validate_dict_dir.pl检查。
local/ami_prepare_dict.sh
3. Kaldi标准流程,准备data/lang
input为data/local/dict和"<unk>";
output为data/lang;
临时文件夹为data/local/lang;
总之,“This script adds word-position-dependent phones and constructs a host of other derived files,
that go in data/lang/”
utils/prepare_lang.sh data/local/dict "<unk>" data/local/lang data/lang
4. 使用AMI数据训练language models;
注意:我没有Fisher data,所以删除了“--fisher $FISHER_TRANS“;
input: train.txt和lexicon.txt等
output: language mode 文件为ami.o3g.kn, data/local/lm仍只是临时文件夹;
参数: 缺省order=3(N-gram order)
local/ami_train_lms.sh data/local/annotations/train.txt data/local/annotations/dev.txt data/local/dict/lexicon.txt data/local/lm
5. 使用prune-lm 处理(删去出现频率较低的数据)ami.o3g.kn.gz得到ami.o3g.kn.pr1-7.gz
final_lm=`cat data/local/lm/final_lm` LM=$final_lm.pr1-7 prune-lm --threshold=1e-7 data/local/lm/$final_lm.gz /dev/stdout | gzip -c > data/local/lm/$LM.gz
6. Kaldi标准流程," Convert ARPA-format language models to FSTs";
input: ami.o3g.kn.pr1-7.gz
output: data/lang_ami.o3g.kn.pr1-7/G.fst
data/lang_ami.o3g.kn.pr1-7/L.fst
utils/format_lm.sh data/lang data/local/lm/$LM.gz data/local/dict/lexicon.txt data/lang_$LM