使用Kaldi计算GOP时找不到apply-cmvn和add-deltas的解决求助
解决Kaldi GOP计算中找不到apply-cmvn和add-deltas命令的问题
问题原因
apply-cmvn和add-deltas是Kaldi自带的核心二进制工具,出现找不到命令的错误,本质是系统Shell无法定位到这些工具的所在路径,通常是Kaldi的bin目录未被添加到环境变量PATH中,或者运行脚本时未加载Kaldi的环境配置。
解决方法
方法1:临时配置环境变量(单次生效)
找到你的Kaldi安装根目录(比如/home/user/kaldi),在终端执行以下命令,将Kaldi的工具目录加入PATH:
export PATH=$PATH:/home/user/kaldi/src/bin:/home/user/kaldi/tools/openfst/bin
执行完成后,再运行run.sh即可。
方法2:修改run.sh脚本,自动加载Kaldi环境
打开run.sh文件,在脚本最开头添加一行(替换为你的Kaldi根目录):
source /home/user/kaldi/tools/env.sh && source /home/user/kaldi/src/env.sh
这样每次运行脚本时,都会自动加载Kaldi的环境配置,无需手动设置PATH。
方法3:永久配置环境变量(全局生效)
编辑用户目录下的~/.bashrc(如果使用zsh则编辑~/.zshrc),在文件末尾添加:
export PATH=$PATH:/home/user/kaldi/src/bin:/home/user/kaldi/tools/openfst/bin
保存后执行以下命令使配置生效:
source ~/.bashrc
之后所有终端会话都会自动识别Kaldi的工具命令。
错误日志参考
# compute-gmm-gop exp/eval_gop/tree exp/eval_gop/final.mdl data/lang/L.fst "ark,s,cs:apply-cmvn --utt2spk=ark:data/eval/split1/1/utt2spk scp:data/eval/split1/1/cmvn.scp scp:data/eval/split1/1/feats.scp ark:- | add-deltas ark:- ark:- |" "ark:utils/sym2int.pl --map-oov 221 -f 2- data/lang/words.txt data/eval/split1/1/text|" ark,t:exp/eval_gop/gop.1 # Started at Thu Feb 23 22:31:43 IST 2023 # compute-gmm-gop exp/eval_gop/tree exp/eval_gop/final.mdl data/lang/L.fst 'ark,s,cs:apply-cmvn --utt2spk=ark:data/eval/split1/1/utt2spk scp:data/eval/split1/1/cmvn.scp scp:data/eval/split1/1/feats.scp ark:- | add-deltas ark:- ark:- |' 'ark:utils/sym2int.pl --map-oov 221 -f 2- data/lang/words.txt data/eval/split1/1/text|' ark,t:exp/eval_gop/gop.1 sh: 1: apply-cmvn: not found sh: 1: add-deltas: not found sym2int.pl: replacing ORALS with 221 sym2int.pl: replacing P with 221 sym2int.pl: replacing H with 221 sym2int.pl: replacing D with 221 sym2int.pl: replacing (TW-) with 221 sym2int.pl: replacing YAHOO with 221 sym2int.pl: replacing (N-) with 221 sym2int.pl: replacing (AL-) with 221 sym2int.pl: replacing (YOU) with 221 sym2int.pl: replacing (MEAN) with 221 sym2int.pl: replacing MHM with 221 sym2int.pl: replacing (PLANES) with 221 sym2int.pl: replacing SCHOLARLY with 221 sym2int.pl: replacing (US-) with 221 sym2int.pl: replacing RACHEL with 221 sym2int.pl: replacing (C-) with 221 sym2int.pl: replacing (%HESITATION) with 221 sym2int.pl: replacing (WEE-) with 221 sym2int.pl: replacing CESSNA with 221 ** Replaced 19 instances of OOVs with 221 LOG (compute-gmm-gop[5.3]:main():gopbin/compute-gmm-gop.cc:68) Done. WARNING (compute-gmm-gop[5.3]:Close():kaldi-io.cc:512) Pipe apply-cmvn --utt2spk=ark:data/eval/split1/1/utt2spk scp:data/eval/split1/1/cmvn.scp scp:data/eval/split1/1/feats.scp ark:- | add-deltas ark:- ark:- | had nonzero return status 32512 ERROR (compute-gmm-gop[5.3]:~SequentialTableReaderArchiveImpl():util/kaldi-table-inl.h:678) TableReader: error detected closing archive 'apply-cmvn --utt2spk=ark:data/eval/split1/1/utt2spk scp:data/eval/split1/1/cmvn.scp scp:data/eval/split1/1/feats.scp ark:- | add-deltas ark:- ark:- |' [ Stack-Trace: ] kaldi::MessageLogger::HandleMessage(kaldi::LogMessageEnvelope const&, char const*) kaldi::MessageLogger::~MessageLogger() kaldi::SequentialTableReaderArchiveImpl<kaldi::KaldiObjectHolder<kaldi::Matrix<float> > >::~SequentialTableReaderArchiveImpl() kaldi::SequentialTableReaderArchiveImpl<kaldi::KaldiObjectHolder<kaldi::Matrix<float> > >::~SequentialTableReaderArchiveImpl() kaldi::SequentialTableReader<kaldi::KaldiObjectHolder<kaldi::Matrix<float> > >::~SequentialTableReader() main __libc_start_main _start terminate called after throwing an instance of 'std::runtime_error' what(): # Accounting: time=1 threads=1 # Ended (code 134) at Thu Feb 23 22:31:44 IST 2023, elapsed time 1 seconds
内容的提问来源于stack exchange,提问作者snailoftheyear
相关产品推荐
相关产品推荐

