博客上搜到的都是清华大学的中文数据集thchs30,其实中文和英文的在线识别操作是一样的,我这里用英文librispeech数据集进行测试(kaldi官网上可以下载到数据集和训练好的模型)。
1、创建相关文件
从voxforge把online_demo拷贝到librispeech下,和s5同级。online_demo下建online-data和work两个文件夹,online-data下建audio和models两个文件夹,audio放要识别的wav,models放训练好的模型。
测试tri1模型
在models建tri1文件夹,将librispeech/s5/exp/tri1下的final.mdl和35.mdl拷贝到刚刚新建的tri1文件夹下,将librispeech/s5/exp/tri1/graph_tgpr下的words.txt和HCLG.fst也拷贝到刚刚新建的tri1文件夹下。
2、修改脚本
修改online_demo下的run.sh
2.1 将下面这段注释掉
if [ ! -s ${data_file}.tar.bz2 ];then
echo "Downloading test models and data ..."
wget -T 10 -t 3 $data_url;
if [ ! -s ${data_file}.tar.bz2 ]; then
echo "Download of $data_file hasfailed!"
exit 1
fi
fi
if [ ! -d $ac_model ]; then
echo "Extracting the models and data ..."
tar xf ${data_file}.tar.bz2
fi
2.2 修改模型类型
ac_model_type=tri2b_mmi改成ac_model_type=tri1
2.3 修改在线识别方式
有两种识别方式
online-wav-gmm-decode-faster读取wav文件列表中的语音,并将识别结果以指定格式输出
online-gmm-decode-faster从麦克风中读取语音,并将识别结果输出到控制台
下面为进行修改
online-wav-gmm-decode-faster--verbose=1 --rt-min=0.8 --rt-max=0.85\
--max-active=4000 --beam=12.0--acoustic-scale=0.0769 \
scp:$decode_dir/input.scp$ac_model/model $ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5'ark,t:$decode_dir/trans.txt \
ark,t:$decode_dir/ali.txt$trans_matrix;;
将上面这段修改为(model修改为final.mdl)
online-wav-gmm-decode-faster --verbose=1--rt-min=0.8 --rt-max=0.85\
--max-active=4000 --beam=12.0--acoustic-scale=0.0769 \
scp:$decode_dir/input.scp$ac_model/final.mdl $ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5'ark,t:$decode_dir/trans.txt \
ark,t:$decode_dir/ali.txt$trans_matrix;;
接下来,找到下面这段
online-gmm-decode-faster --rt-min=0.5--rt-max=0.7 --max-active=4000 \
--beam=12.0 --acoustic-scale=0.0769$ac_model/model $ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5'$trans_matrix;;
将其修改为(model修改为final.mdl)
online-gmm-decode-faster --rt-min=0.5--rt-max=0.7 --max-active=4000 \
--beam=12.0 --acoustic-scale=0.0769$ac_model/final.mdl $ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5'$trans_matrix;;
2.4 运行
切换到在线识别目录 cd kaldi/egs/librispeech/online_demo
./run.sh 读取wav文件列表中的语音进行识别
./run.sh --test-mode live 从麦克风识别
当识别标准美音时,结果很准确,但识别中国学生自己的语音时,结果很差
3. 其它模型
3.1 运行tri2b(tri3b,tri4b等是一样的):将librispeech/s5/exp/tri2b下的12.mat和final.mat拷贝到新建的的文件tri2b下,同样将final.mdl、35.mdl、words.txt和HCLG.fst也拷贝到新建的文件tri2b下
3.2 修改run.sh
找到下面这段
ac_model=${data_file}/models/$ac_model_type
trans_matrix=""
audio=${data_file}/audio
将其修改为
ac_model=${data_file}/models/$ac_model_type
trans_matrix="$ac_model/12.mat"
audio=${data_file}/audio
3.3 修改识别方式
(1)
online-wav-gmm-decode-faster--verbose=1 --rt-min=0.8 --rt-max=0.85\
--max-active=4000 --beam=12.0--acoustic-scale=0.0769 \
scp:$decode_dir/input.scp$ac_model/final.mdl $ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5'ark,t:$decode_dir/trans.txt \
ark,t:$decode_dir/ali.txt$trans_matrix;;
找到上面这段,将其修改为(添加了2个参数--left-context=3--right-context=3)
online-wav-gmm-decode-faster--verbose=1 --rt-min=0.8 --rt-max=0.85\
--max-active=4000 --beam=12.0--acoustic-scale=0.0769 \
--left-context=3--right-context=3\
scp:$decode_dir/input.scp$ac_model/final.mdl $ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5'ark,t:$decode_dir/trans.txt \
ark,t:$decode_dir/ali.txt$trans_matrix;;‘
(2)
online-gmm-decode-faster --rt-min=0.5--rt-max=0.7 --max-active=4000 \
--beam=12.0 --acoustic-scale=0.0769$ac_model/final.mdl $ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5'$trans_matrix;;
找到上面这段,将其修改为(添加了2个参数--left-context=3--right-context=3)
online-gmm-decode-faster --rt-min=0.5--rt-max=0.7 --max-active=4000 \
--beam=12.0 --acoustic-scale=0.0769--left-context=3 --right-context=3 \
$ac_model/final.mdl$ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5'$trans_matrix;;
从标准美音的识别结果中可以看出,它的识别结果比tri1好,但识别中国学生的语音效果还是不好。
接下来,神经网络部分的在线识别,我在博客上没有搜到,就没有测试