local/aishell_prepare_dict.sh $data/resource_aishell
生成data/local/dict目录下的内容 extra_questions.txt lexiconp.txt lexicon.txt nonsilence_phones.txt optional_silence.txt silence_phones.txt
- extra_questions.txt:用来构建决策树的问题集,可以是空的,包含多组相同的音素,每一组音素包含相同的重音或者声调;
- lexiconp.txt是带概率的字典文件,概率值为每个词出现的概率
- lexicon.txt文件是字典文件
- silence_phones.txt/nonsilence_phones.txt为静音/非静音音素,每一行代表一组相同的base phone,但可能有不同的声调的音素,如:
- optional_silence.txt:包含一个单独的音素用来作为词典中默认的静音音素
local/aishell_data_prep.sh $data/data_aishell/wav $data/data_aishell/transcript
为{train,dev,test}数据生成spk2utt,utt2spk,wav.scp,text四个文件。
- spk2utt: 说话人id 语音文件名(一个说话人对应多个文件名)
- utt2spk:语音文件名 说话人id
- wav.scp:语音文件名 语音文件绝对路径
- text:语音文件名 对应标注
utils/prepare_lang.sh --position-dependent-phones false data/local/dict "<SPOKEN_NOISE>" data/local/lang data/lang
生成data/lang目录下的内容,主要是L.fst
1) --position-dependent-phones false:是否将phone拆成更详细的部分,若选择true,则将在phone后面根据音素所处的位置加上
2) data/dict: 词典源文件夹 。
3) "<SPOKEN_NOISE>":词典里未包含的事例 .
4) data/local/lang : 临时文件夹
5) data/lang: 目标文件夹。
local/aishell_train_lms.sh
生成data/local/lm目录下的内容,训练语言模型data/local/lm/3gram-mincount/lm_unpruned.gz
utils/format_lm.sh data/lang data/local/lm/3gram-mincount/lm_unpruned.gz data/local/dict/lexicon.txt data/lang_test
data/lang_test目录,将语言模型格式化为fst格式文件,即G.fst,文件夹下的其他文件是从data/lang拷贝而来
for x in train dev test; do
steps/make_mfcc_pitch.sh --cmd "$train_cmd" --nj 10 data/$x exp/make_mfcc/$x $mfccdir || exit 1;
steps/compute_cmvn_stats.sh data/$x exp/make_mfcc/$x $mfccdir || exit 1;
utils/fix_data_dir.sh data/$x || exit 1;
done
1.steps/make_mfcc_pitch.sh:提取mfcc特征,这里加入了pitch(音高)特征。
命令工具 compute-mfcc-feats用来计算MFCC特征,需要两个参数,rspecifier是用来读.wav数据,wspecifier是用来写特征(就是r 和w)。典型的用法是,
将数据写入一个大的"archive"文件,也写到一个"scp"文件以便随机读取.
MFCC的计算由Mfcc类型的对象完成,它有Compute()函数可以根据波形计算特征.一个完整的MFCC计算如下:
1) 计算出一个文件中帧的数目(通常帧长25ms,帧移10ms)
2) 对每一帧提取数据,可选做Dithering(抖动),预加重和去除直流偏移,还可以和加窗函数相乘(此处支持多种选项,如Hanmming 窗).
3)计算该点能量(也可用对数能量 )
4) 做快速傅里叶变换(FFT)并计算功率谱
5)计算每个梅尔滤波器的能量,如23个部分重叠的三角滤波器,其中心在梅尔频域等间距
6) 计算对数能量并做离散余弦变换,根据要求保留系数(如13个)
7) 选做倒谱变换;它仅仅是比例变换,确保系数在合理范围内
上下截止频率根据三角滤波器界定,由选项–low-freq和–high-freq控制,通常分别设置为0Hz和奈奎斯特频率附近,如对16kHz采样的语音设置为–low-freq=20 和 –high-freq=7800
2.steps/compute_cmvn_stats.sh,倒谱均值方差归一化。
在实际情况下,受不同麦克风及音频通道的影响,会导致相同音素的特征差别比较大,通过CMVN可以得到均值为0,方差为1的标准特征。均值方差可以以一段语音为单位计算,但更好的是在一个较大的数据及上进行计算,这样识别效果会更加robustness。Kaldi中计算均值和方差的代码在compute-cmvn-stats.cc, 归一化在apply-cmvn.cc。