Kaldi aishell2 GMM训练步骤(含aishell1语料转aishell2组织方式)

0 前言

     中文语音识别的aishell2推出已经有一段时间了,由于没有aishell2的语料库,有资格的可以申请,所以拿aishell1的15G语料进行训练,所以写了相关的脚本处理aishell1的语料库,来适配aishell2,可以参考我的github 仓库 aishell2_gmm_train

 

1 语料转换

        下载完aishell1的语料后,将data_aishell.tgz解压后的语料放在egs/aishell2目录下的recipes(自己创建的),将解压后的语料按照github上的路径存放,然后按照以下步骤操作:

1. notepad++打开recipes/data_aishell/transcript/aishell1的aishell_transcript_v0.8.txt文件,将所有的空格全部替换掉(因为aishell2采用了jeba分词脚本,无需分词),做这一步操作后,方便后续脚本处理生成trans.txt wav.scp文件,替换后的文件保存为aishell_transcript_v0.8_remove_space.txt

2. 执行recipes/data_aishell/wav/convert_aishelltoaishell2.py脚本,注意版本为python3,之后会在train目录下生成trans.txt 和 wav.scp  主要是将aishell1的transcript文件中的说话人编号BAC009S0002W0122 转换成AISHELL2格式 IS0002W0122

3. 执行recipes/data_aishell/wav/rename_wav_file.py脚本,将aishell1语料中的BAC009S0002W0122.wav 重命名成aishell2的格式 IS0002W0122.wav

 

2 训练脚本的修改

   1. 注释了大辞典发音字典相关代码,采用的aishell2的发音字典,没有采用aishell1的,结巴分词就是利用该字典分词,见修改内容:prepare_dict.sh

   2. 语言模型训练时,注释了kaldi_lm的训练及srilm的训练方式,自己利用ngram命令生成相关的语言模型,见 train_lms.sh

mkdir -p data/local/lm/3gram-mincount/
ngram-count -text ${lm_dir}/lexicon.txt -order 3 -write ${lm_dir}/words.txt.count
ngram-count -read ${lm_dir}/words.txt.count -order 3 -lm ${lm_dir}/word.3gram.lm -interpolate

 

    3. GMM训练时,在MFCC特征提取时,没有采用aishell2 pitch的特征提取方式,因为pitch增加了相应的维度,导致kaldi自带的online-gmm-decode-faster解码器维度不匹配,修改成make_mfcc.sh脚本,注释掉了 subset the training data for fast startup相关代码,并修改了部分训练时的错误,见run_gmm.sh, 如果需要提取39维mfcc特征值可以参考wakeup_words仓库中的run_gmm.sh 

注: 以上脚本中,注释掉了三音素和DNN的相关训练(wakeup_words仓库中有DNN的训练),如有问题,欢迎拍砖。

你可能感兴趣的:(语音识别)