1 数据准备
数据准备阶段的输出包含两个部分:一部分与“数据”相关,保存在data/train、data/dev、data/test之类的目录下,“数据”部分与特定的录音数据有关,包括训练测试集划分、音频分段、文本标注、发音标注、说话人信息等;另一部分与“语言”相关,保存在data/local、data/dict、data/lang、data/graph目录下,“语言”部分与当前使用的语言本身相关,包括发音词典、音素集合、语言模型等。
如果想用现有的识别系统和语言模型对自己时的录音数据进行解码,那么只需要重写“数据”相关,并准备数据匹配的发音词典。
1.1 “数据”相关
主要涉及脚本:local/thchs-30_data_prep.sh
#data preparation
#generate text, wav.scp, utt2pk,spk2utt
local/thchs-30_data_prep.sh $H$thchs/data_thchs30 || exit 1;
- 在data文件夹下创建train,dev,test文件夹,分别用于保存训练、验证、测试的初始数据。利用thchs-30_data_prep.sh脚本在每个文件夹中生成以下6个文件:
- wav.scp,每个语句的音频文件,索引标识符一般为utterance-id。如果音频存在segment文件,则索引标识符为recording-id,记录每一个分段。
- utt2spk,记录每个utterance属于哪个说话人,由utterance-id索引。
- spk2utt,记录每个说话人说了那些utterances,由speaker-id索引。
- word.txt和text,每个语句的文本标注,由utterance-id索引。这里的文本标注从原始数据集中copy而来,不用保证都在词汇表中,未出现的文本标注将映射到data/lang/oov.txt中。
- phone.txt,每个语句的发音标注,由utterance-id索引。发音标注中的音素信息从原始数据集中copy而来。
forxin train dev test; do
echo"cleaning data/$x"
cd$dir/data/$x
rm -rf wav.scp utt2spk spk2utt word.txt phone.txt text
echo"preparing scps and text in data/$x"
fornnin`find $corpus_dir/$x/*.wav | sort -u | xargs -i basename {} .wav`; do
spkid=`echo $nn| awk -F"_" '{print"" $1}'`
spk_char=`echo $spkid| sed 's/\([A-Z]\).*/\1/'`
spk_num=`echo $spkid| sed 's/[A-Z]\([0-9]\)/\1/'`
spkid=$(printf'%s%.2d' "$spk_char" "$spk_num")
utt_num=`echo $nn