kaldi在线识别

博客上搜到的都是清华大学的中文数据集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好,但识别中国学生的语音效果还是不好。

接下来,神经网络部分的在线识别,我在博客上没有搜到,就没有测试



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