29 int main(
int argc,
char *argv[]) {
31 using namespace kaldi;
33 using fst::SymbolTable;
38 "Creates training graphs (without transition-probabilities, by default)\n" 39 "This version takes FSTs as inputs (e.g., representing a separate weighted\n" 40 "grammar for each utterance)\n" 41 "Note: the lexicon should contain disambiguation symbols and you should\n" 42 "supply the --read-disambig-syms option which is the filename of a list\n" 43 "of disambiguation symbols.\n" 44 "Warning: you probably want to set the --transition-scale and --self-loop-scale\n" 45 "options; the defaults (zero) are probably not appropriate.\n" 46 "Usage: compile-train-graphs-fsts [options] <tree-in> <model-in> <lexicon-fst-in> " 47 " <graphs-rspecifier> <graphs-wspecifier>\n" 49 " compile-train-graphs-fsts --read-disambig-syms=disambig.list\\\n" 50 " tree 1.mdl lex.fst ark:train.fsts ark:graphs.fsts\n";
54 int32 batch_size = 250;
58 std::string disambig_rxfilename;
61 po.
Register(
"batch-size", &batch_size,
62 "Number of FSTs to compile at a time (more -> faster but uses " 63 "more memory. E.g. 500");
64 po.
Register(
"read-disambig-syms", &disambig_rxfilename,
"File containing " 65 "list of disambiguation symbols in phone symbol table");
74 std::string tree_rxfilename = po.
GetArg(1);
75 std::string model_rxfilename = po.
GetArg(2);
76 std::string lex_rxfilename = po.
GetArg(3);
77 std::string fsts_rspecifier = po.
GetArg(4);
78 std::string fsts_wspecifier = po.
GetArg(5);
90 std::vector<int32> disambig_syms;
91 if (disambig_rxfilename !=
"")
93 KALDI_ERR <<
"fstcomposecontext: Could not read disambiguation symbols from " 94 << disambig_rxfilename;
95 if (disambig_syms.empty())
96 KALDI_WARN <<
"You supplied no disambiguation symbols; note, these are " 97 <<
"typically necessary when compiling graphs from FSTs (i.e. " 98 <<
"supply L_disambig.fst and the list of disambig syms with\n" 99 <<
"--read-disambig-syms)";
107 int num_succeed = 0, num_fail = 0;
109 if (batch_size == 1) {
111 for (; !fst_reader.
Done(); fst_reader.
Next()) {
112 std::string key = fst_reader.
Key();
113 const VectorFst<StdArc> &grammar = fst_reader.
Value();
115 VectorFst<StdArc> decode_fst;
118 decode_fst.DeleteStates();
120 if (decode_fst.Start() != fst::kNoStateId) {
122 fst_writer.
Write(key, decode_fst);
124 KALDI_WARN <<
"Empty decoding graph for utterance " 130 std::vector<std::string> keys;
131 std::vector<const VectorFst<StdArc>*> grammars;
132 while (!fst_reader.
Done()) {
135 for (; !fst_reader.
Done() &&
136 static_cast<int32
>(grammars.size()) < batch_size;
138 keys.push_back(fst_reader.
Key());
139 grammars.push_back(
new VectorFst<StdArc>(fst_reader.
Value()));
141 std::vector<fst::VectorFst<fst::StdArc>* > fsts;
143 KALDI_ERR <<
"Not expecting CompileGraphs to fail.";
146 for (
size_t i = 0;
i < fsts.size();
i++) {
148 if (fsts[
i]->Start() != fst::kNoStateId) {
150 fst_writer.
Write(keys[
i], *(fsts[i]));
152 KALDI_WARN <<
"Empty decoding graph for utterance " 160 KALDI_LOG <<
"compile-train-graphs: succeeded for " << num_succeed
161 <<
" graphs, failed for " << num_fail;
163 }
catch(
const std::exception &e) {
164 std::cerr << e.what();
This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for...
void DeletePointers(std::vector< A *> *v)
Deletes any non-NULL pointers in the vector v, and sets the corresponding entries of v to NULL...
void PrintUsage(bool print_command_line=false)
Prints the usage documentation [provided in the constructor].
BaseFloat self_loop_scale
A templated class for writing objects to an archive or script file; see The Table concept...
void Write(const std::string &key, const T &value) const
void Register(const std::string &name, bool *ptr, const std::string &doc)
void ReadKaldiObject(const std::string &filename, Matrix< float > *m)
void Register(OptionsItf *opts)
BaseFloat transition_scale
The class ParseOptions is for parsing command-line options; see Parsing command-line options for more...
A templated class for reading objects sequentially from an archive or script file; see The Table conc...
int Read(int argc, const char *const *argv)
Parses the command line options and fills the ParseOptions-registered variables.
std::string GetArg(int param) const
Returns one of the positional parameters; 1-based indexing for argc/argv compatibility.
bool CompileGraph(const fst::VectorFst< fst::StdArc > &word_grammar, fst::VectorFst< fst::StdArc > *out_fst)
int NumArgs() const
Number of positional parameters (c.f. argc-1).
#define KALDI_ASSERT(cond)
bool CompileGraphs(const std::vector< const fst::VectorFst< fst::StdArc > *> &word_fsts, std::vector< fst::VectorFst< fst::StdArc > *> *out_fsts)
void ReadFstKaldi(std::istream &is, bool binary, VectorFst< Arc > *fst)
int main(int argc, char *argv[])
bool ReadIntegerVectorSimple(const std::string &rxfilename, std::vector< int32 > *list)
ReadFromList attempts to read this list of integers, one per line, from the given file...