接上回,我们继续看run.sh
#copy feats and cmvn to test.ph, avoid duplicated mfcc & cmvn #拷贝mfcc特征和cmvn到test.ph,避免重复的mfcc和cmvn
cp data/mfcc/test/feats.scp data/mfcc/test_phone && cp data/mfcc/test/cmvn.scp data/mfcc/test_phone || exit 1;
如果此时运行,会报错data/mfcc/test/feats.scp 找不到该文件,是因为我们之前在 run.sh中选择只对train进行处理,其实还需要对dev test 也进行处理,所以我们需要将dev test加上,然后重新进行处理,就不会报错了。
我们看一下data/mfcc/test/feats.scp 我们看到这个也是mfcc特征提取一样的,也有ark:标识,但是说话者ID都是D,说明是测试集的
我们看到/opt/kaldi/egs/thchs30/thchs30-openslr/data_thchs30/test下都是D开头的,说明就是测试集
我们看一下data/mfcc/test/cmvn.scp,里面都是D的测试集的ark:标识
最后执行后发现,它将data/mfcc/test/feats.scp 和 data/mfcc/test/cmvn.scp 都要拷贝到data/mfcc/test_phone这下面。
我们继续往下看
#prepare language stuff #准备语料
#build a large lexicon that invovles words in both the training and decoding. #建立一个涉及训练和解码中的单词的大词典。
(
echo "make word graph ..." #制作词图
cd $H; mkdir -p data/{dict,lang,graph} && \ #因为$H为pwd本目录,然后在本目录下创建以下目录
cp $thchs/resource/dict/{extra_questions.txt,nonsilence_phones.txt,optional_silence.txt,silence_phones.txt} data/dict && \ #将相应目录的相应文件拷贝到dict目录
我们看一下extra_questions.txt,应该是音素
nonsilence_phones.txt
optional_silence.txt
silence_phones.txt
cat $thchs/resource/dict/lexicon.txt $thchs/data_thchs30/lm_word/lexicon.txt | \ #将两个目录的lexicon.txt文件输出到data_thchs30/lm_word/lexicon.txt 同时过滤掉带<s>或</s>的行,并且删除相同的重复信息
grep -v '<s>' | grep -v '</s>' | sort -u > data/dict/lexicon.txt || exit 1;
utils/prepare_lang.sh --position_dependent_phones false data/dict "<SPOKEN_NOISE>" data/local/lang data/lang || exit 1; #调用utils下的prepare_lang.sh脚本来准备语言模型 参数 --position_dependent_phones为false 参数data/dict为"<SPOKEN_NOISE>" data/local/lang data/lang 后面我们具体分析一下prepare_lang.sh
gzip -c $thchs/data_thchs30/lm_word/word.3gram.lm > data/graph/word.3gram.lm.gz || exit 1; #将word.3gram.lm压缩为word.3gram.lm.gz并保留源文件
utils/format_lm.sh data/lang data/graph/word.3gram.lm.gz $thchs/data_thchs30/lm_word/lexicon.txt data/graph/lang || exit 1; #这块应该是格式化语言模型
)
这些后面在详细的分析,我们继续
跟上面一样
#make_phone_graph #制作音素图
(
echo "make phone graph ..."
cd $H; mkdir -p data/{dict_phone,graph_phone,lang_phone} && \ #因为$H为pwd本目录,然后在本目录下创建以下目录
cp $thchs/resource/dict/{extra_questions.txt,nonsilence_phones.txt,optional_silence.txt,silence_phones.txt} data/dict_phone && \ #跟上面是同样的文件
cat $thchs/data_thchs30/lm_phone/lexicon.txt | grep -v '<eps>' | sort -u > data/dict_phone/lexicon.txt && \ #将lexicon.txt文件输出到data/dict_phone/lexicon.txt 同时过滤掉带<eps>的行,并且删除相同的重复信息
echo "<SPOKEN_NOISE> sil " >> data/dict_phone/lexicon.txt || exit 1; #输出到lexicon.txt中
utils/prepare_lang.sh --position_dependent_phones false data/dict_phone "<SPOKEN_NOISE>" data/local/lang_phone data/lang_phone || exit 1; #调用utils下的prepare_lang.sh脚本来准备语言模型 参数 --position_dependent_phones为false 参数data/dict_phone为"<SPOKEN_NOISE>" data/local/lang_phone data/lang_phone 后面我们具体分析一下prepare_lang.sh
gzip -c $thchs/data_thchs30/lm_phone/phone.3gram.lm > data/graph_phone/phone.3gram.lm.gz || exit 1; #将phone.3gram.lm压缩为phone.3gram.lm.gz并保留源文件
utils/format_lm.sh data/lang_phone data/graph_phone/phone.3gram.lm.gz $thchs/data_thchs30/lm_phone/lexicon.txt \
data/graph_phone/lang || exit 1; #这块应该是格式化语言模型
)
未完待续。。。。。。