33 using namespace kaldi;
35 typedef kaldi::int64 int64;
38 "Rescores lattice with kaldi-rnnlm. This script is called from \n" 39 "scripts/rnnlm/lmrescore.sh. An example for rescoring \n" 40 "lattices is at egs/swbd/s5c/local/rnnlm/run_lstm.sh \n" 42 "Usage: lattice-lmrescore-kaldi-rnnlm [options] \\\n" 43 " <embedding-file> <raw-rnnlm-rxfilename> \\\n" 44 " <lattice-rspecifier> <lattice-wspecifier>\n" 45 " e.g.: lattice-lmrescore-kaldi-rnnlm --lm-scale=-1.0 \\\n" 46 " word_embedding.mat \\\n" 47 " --bos-symbol=1 --eos-symbol=2 \\\n" 48 " final.raw ark:in.lats ark:out.lats\n";
51 rnnlm::RnnlmComputeStateComputationOptions opts;
53 int32 max_ngram_order = 3;
56 po.Register(
"lm-scale", &lm_scale,
"Scaling factor for language model " 58 po.Register(
"max-ngram-order", &max_ngram_order,
59 "If positive, allow RNNLM histories longer than this to be identified " 60 "with each other for rescoring purposes (an approximation that " 61 "saves time and reduces output lattice size).");
66 if (po.NumArgs() != 4) {
71 if (opts.bos_index == -1 || opts.eos_index == -1) {
72 KALDI_ERR <<
"You must set --bos-symbol and --eos-symbol options";
75 std::string word_embedding_rxfilename = po.GetArg(1),
76 rnnlm_rxfilename = po.GetArg(2),
77 lats_rspecifier = po.GetArg(3),
78 lats_wspecifier = po.GetArg(4);
88 const rnnlm::RnnlmComputeStateInfo info(opts, rnnlm, word_embedding_mat);
94 int32 n_done = 0, n_fail = 0;
96 rnnlm::KaldiRnnlmDeterministicFst rnnlm_fst(max_ngram_order, info);
98 for (; !compact_lattice_reader.Done(); compact_lattice_reader.Next()) {
99 std::string key = compact_lattice_reader.Key();
102 if (lm_scale != 0.0) {
109 ArcSort(&clat, fst::OLabelCompare<CompactLatticeArc>());
121 Invert(&composed_lat);
125 if (determinized_clat.Start() == fst::kNoStateId) {
126 KALDI_WARN <<
"Empty lattice for utterance " << key
127 <<
" (incompatible LM?)";
130 compact_lattice_writer.Write(key, determinized_clat);
136 compact_lattice_writer.Write(key, clat);
141 KALDI_LOG <<
"Done " << n_done <<
" lattices, failed for " << n_fail;
142 return (n_done != 0 ? 0 : 1);
143 }
catch(
const std::exception &e) {
144 std::cerr << e.what();
This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for...
A templated class for writing objects to an archive or script file; see The Table concept...
This class represents a matrix that's stored on the GPU if we have one, and in memory if not...
void ReadKaldiObject(const std::string &filename, Matrix< float > *m)
The class ParseOptions is for parsing command-line options; see Parsing command-line options for more...
void ScaleLattice(const std::vector< std::vector< ScaleFloat > > &scale, MutableFst< ArcTpl< Weight > > *fst)
Scales the pairs of weights in LatticeWeight or CompactLatticeWeight by viewing the pair (a...
void ConvertLattice(const ExpandedFst< ArcTpl< Weight > > &ifst, MutableFst< ArcTpl< CompactLatticeWeightTpl< Weight, Int > > > *ofst, bool invert)
Convert lattice from a normal FST to a CompactLattice FST.
A templated class for reading objects sequentially from an archive or script file; see The Table conc...
void ComposeCompactLatticeDeterministic(const CompactLattice &clat, fst::DeterministicOnDemandFst< fst::StdArc > *det_fst, CompactLattice *composed_clat)
This function Composes a CompactLattice format lattice with a DeterministicOnDemandFst<fst::StdFst> f...
fst::VectorFst< LatticeArc > Lattice
fst::VectorFst< CompactLatticeArc > CompactLattice
std::vector< std::vector< double > > GraphLatticeScale(double lmwt)
bool IsSimpleNnet(const Nnet &nnet)
This function returns true if the nnet has the following properties: It has an output called "output"...
#define KALDI_ASSERT(cond)
bool DeterminizeLattice(const Fst< ArcTpl< Weight > > &ifst, MutableFst< ArcTpl< Weight > > *ofst, DeterminizeLatticeOptions opts, bool *debug_ptr)
This function implements the normal version of DeterminizeLattice, in which the output strings are re...