kaldi apiai_decode分析研究2、脚本主要涉及工具参数分析

本系列预计包括3篇文章,分别如下:

1、链式模型下载与运行测试

2、脚本主要涉及工具参数分析

3、在线识别系统搭建

=================================================

在原始情况下,该目录结构如下:

kaldi apiai_decode分析研究2、脚本主要涉及工具参数分析_第1张图片

其中,脚本path.sh主要通过export指令标识kaidi主要工具路径,download-model.sh用于下载已经训练的模板文件

api.ai-kaldi-asr-model.zip并完成解压工作,recognize-wav.sh则完成用户指定的特定wav文件的识别工作。该脚本的源代码和注释如下:

#!/usr/bin/env bash
# Copyright 2016 Api.ai (Author: Ilya Platonov)
# Apache 2.0

# This script demonstrates kaldi decoding using pretrained model. It will decode list of wav files.
#
# IMPORTANT: wav files must be in 16kHz, 16 bit little-endian format.
# 提示该wav文件必须是16khz  ,16 little-endian 格式。
# This script tries to follow with what other scripts are doing in terms of directory structures and data handling.
#
# Use ./download-model.sh script to download asr model
# See https://github.com/api-ai/api-ai-english-asr-model for details about a model and how to use it.

. ./path.sh
MODEL_DIR="exp/api.ai-model"
DATA_DIR="data/test-corpus"

echo "///"
echo "// IMPORTANT: wav files must be in 16kHz, 16 bit little-endian format."
echo "//";

#检查目录下exp/api.ai-model是否存在4个文件,如果不存在,则退出,并提示用户下载
for file in final.mdl HCLG.fst words.txt frame_subsampling_factor; do
  if [ ! -f $MODEL_DIR/$file ]; then
    echo "$MODEL_DIR/$file not found, use ./download-model.sh"
    exit 1;
  fi
done;

#检查是否有需求的三个工具
for app in nnet3-latgen-faster apply-cmvn lattice-scale; do
  command -v $app >/dev/null 2>&1 || { echo >&2 "$app not found, is kaldi compiled?"; exit 1; }
done;

rm -r $DATA_DIR #我自己添加的,主要是新识别的文件都要用这个目录,如果不删除,识别新文件的时候要手动删除data/test-corpus目录
local/create-corpus.sh $DATA_DIR $@ || exit 1;

echo "///"
echo "// Computing mfcc and cmvn (cmvn is not really used)"
echo "//";

#测试文件的梅尔倒谱系数
 steps/make_mfcc.sh --nj 1 --mfcc-config $MODEL_DIR/mfcc.conf \
      --cmd "run.pl" $DATA_DIR exp/make_mfcc exp/mfcc || { echo "Unable to calculate mfcc, ensure 16kHz, 16 bit little-endian wav format or see log"; exit 1; };

    steps/compute_cmvn_stats.sh $DATA_DIR exp/make_mfcc/ exp/mfcc || exit 1;

echo "///"
echo "// Doing decoding (see log for results)"
echo "//";
frame_subsampling_factor=$(cat $MODEL_DIR/frame_subsampling_factor)
#利用工具nnet3-latgen-faster完成识别工作。
nnet3-latgen-faster --frame-subsampling-factor=$frame_subsampling_factor --frames-per-chunk=50 --extra-left-context=0 \
 --extra-right-context=0 --extra-left-context-initial=-1 --extra-right-context-final=-1 \
 --minimize=false --max-active=7000 --min-active=200 --beam=15.0 --lattice-beam=8.0 \
 --acoustic-scale=1.0 --allow-partial=true \
 --word-symbol-table=$MODEL_DIR/words.txt $MODEL_DIR/final.mdl $MODEL_DIR//HCLG.fst \
 "ark,s,cs:apply-cmvn --norm-means=false --norm-vars=false --utt2spk=ark:$DATA_DIR/utt2spk scp:$DATA_DIR/cmvn.scp scp:$DATA_DIR/feats.scp ark:- |" \
 "ark:|lattice-scale --acoustic-scale=10.0 ark:- ark:-  >exp/lat.1"

从上述脚本可以看出,系统主要通过make_mfcc.sh脚本和工具nnet3-latgen-faster完成识别工作。nnet3-latgen-faster是kaldi官方给出的非实时解码器。这里不再对make_mfcc脚本分析,将主要工作放在nnet3-latgen-faster工具使用上。该工具和源代码位于src\nnet3bin\目录下:

kaldi apiai_decode分析研究2、脚本主要涉及工具参数分析_第2张图片

由于暂时是想从工具的观点学习kaldi,且没有找到合适的集成开发环境,分析源代码也着实困难,故暂时没有研究源代码,在该目录下运行./nnet3-latgen-faster可以看到使用说明。结合使用说明,recognize-wav.sh脚本最后一部分注释如下:

nnet3-latgen-faster 
 --frame-subsampling-factor=$frame_subsampling_factor #帧-二次采样比例系数,默认为1,此处为3
 --frames-per-chunk=50 				#每个块中由神经网络分别评估的帧数,默认50,
 --extra-left-context=0 				#在神经网络固有的左上下文之上添加的其他左上下文的帧数,默认为0
 --extra-right-context=0 				#右上下文,默认为0
 --extra-left-context-initial=-1 			#默认-1
 --extra-right-context-final=-1 			#默认-1
 --minimize=false 					#默认假
 --max-active=7000 					#解码器的最大状态,越大越慢越准确,默认2147483647
 --min-active=200 					#解码器的最低活动状态,默认200	
 --beam=15.0 						#解码光束,越大越慢越准确,默认16
 --lattice-beam=8.0 					#晶格生成光束。较大->较慢和较深的晶格(浮动,默认= 10)
 --acoustic-scale=1.0 					#声学对数似然的比例因子,默认0.1
 --allow-partial=true 					#如果为true,则即使未达到结束状态也要产生输出
 --word-symbol-table=$MODEL_DIR/words.txt $MODEL_DIR/final.mdl $MODEL_DIR//HCLG.fst  "ark,s,cs:apply-cmvn  --norm-means=false --norm-vars=false  --utt2spk=ark:$DATA_DIR/utt2spk scp:$DATA_DIR/cmvn.scp scp:$DATA_DIR/feats.scp ark:- |"  
 "ark:|lattice-scale --acoustic-scale=10.0 ark:- ark:-  >exp/lat.1" 单词的符号表[用于调试输出](字符串,默认=“”)

 

你可能感兴趣的:(kaldi,linux)