以aishell数据集为例,演示如何进行chain-model在线解码。
1.首先生成配置文件
steps/online/nnet3/prepare_online_decoding.sh --add_pitch true data/lang_chain exp/nnet3/extractor exp/chain/tdnn_1a_sp exp/chain/nnet_online
aishell训练时提取的特征加入了pitch(音高)特征,所以这里需要将参数--add_pitch设置为true
data/lang_chain为存储chain模型解码网络图中G.fst和L.fst文件以及词汇表words.txt文件的文件夹,内容如下:
exp/nnet3/extractor文件夹应该为一些中间文件,内容如下:
exp/chain/tdnn_1a_sp为chain模型储存文件夹
exp/chain/nnet_online为生成的配置文件夹,运行成功后内容如下:
2.准备自己的数据
准备要识别的音频文件,为音频文件生成utt2spk文件,spk2utt文件和wav.scp文件,utt2spk每一行为语音文件名与说话人id的对应,spk2utt每一行为说话人id的与
语音文件名的对应(注意一个说话人id可以对应多条语音,而一条语音只能对应一个说话人),wav.scp为语音文件名与文件储存路径的对应
这里用的aishell的chain-model,所以可以把文件名改成aishell数据集的格式
3.在线解码
需要用到kaldi源码里的三个程序:wav-copy,online2-wav-nnet3-latgen-faster,lattice-scale,这三个程序的路径分别是:
kaldi/src/featbin/wav-copy
kaldi/src/online2bin/online2-wav-nnet3-latgen-faster
kaldi/src/latbin/lattice-scale
执行指令:
/home/rd/gezhao/kaldi/src/online2bin/online2-wav-nnet3-latgen-faster --do-endpointing=false --frames-per-chunk=20 --extra-left-context-initial=0 --online=true --frame-subsampling-factor=3 --config=/home/rd/gezhao/kaldi/egs/aishell/s5/exp/chain/nnet_online/conf/online.conf --min-active=200 --max-active=7000 --beam=15.0 --lattice-beam=6.0 --acoustic-scale=1.0 --word-symbol-table=/home/rd/gezhao/kaldi/egs/aishell/s5/data/lang_chain/words.txt /home/rd/gezhao/kaldi/egs/aishell/s5/exp/chain/tdnn_1a_sp/final.mdl /home/rd/gezhao/kaldi/egs/aishell/s5/exp/chain/tdnn_1a_sp/graph/HCLG.fst ark:spk2utt 'ark,s,cs:/home/rd/gezhao/kaldi/src/featbin/wav-copy scp,p:wav.scp ark:- |' 'ark:|/home/rd/gezhao/kaldi/src/latbin/lattice-scale --acoustic-scale=10.0 ark:- ark:- | gzip -c >lat.1.gz'
若报错:
说明特征维度对不上,需要修改生成配置文件夹的mfcc.conf为下图(与kaldi/egs/aishell/s5/conf/mfcc.conf一致):
之后重新运行上述指令,成功解码:
tdnn模型的在线解码与chain-model类似,只是文件的路径不同而已。