27 int main(
int argc,
char *argv[]) {
29 using namespace kaldi;
32 typedef kaldi::int64 int64;
35 "Get examples of data for discriminative neural network training;\n" 36 "each one corresponds to part of a file, of variable (and configurable)\n" 39 "Usage: nnet-get-egs-discriminative [options] <model> " 40 "<features-rspecifier> <ali-rspecifier> <den-lat-rspecifier> " 41 "<training-examples-out>\n" 43 "An example [where $feats expands to the actual features]:\n" 44 "nnet-get-egs-discriminative --acoustic-scale=0.1 \\\n" 45 " 1.mdl '$feats' 'ark,s,cs:gunzip -c ali.1.gz|' 'ark,s,cs:gunzip -c lat.1.gz|' ark:1.degs\n";
59 std::string nnet_rxfilename = po.
GetArg(1),
60 feature_rspecifier = po.
GetArg(2),
61 ali_rspecifier = po.
GetArg(3),
62 clat_rspecifier = po.
GetArg(4),
63 examples_wspecifier = po.
GetArg(5);
70 Input ki(nnet_rxfilename, &binary);
85 int32 num_done = 0, num_err = 0;
86 int64 examples_count = 0;
90 for (; !feat_reader.
Done(); feat_reader.
Next()) {
91 std::string key = feat_reader.
Key();
93 if (!ali_reader.
HasKey(key)) {
94 KALDI_WARN <<
"No pdf-level posterior for key " << key;
98 const std::vector<int32> &alignment = ali_reader.
Value(key);
99 if (!clat_reader.
HasKey(key)) {
100 KALDI_WARN <<
"No denominator lattice for key " << key;
106 if (clat.Properties(fst::kTopSorted,
true) == 0) {
114 left_context, right_context, &eg)) {
115 KALDI_WARN <<
"Error converting lattice to example.";
120 std::vector<DiscriminativeNnetExample> egs;
124 KALDI_VLOG(2) <<
"Split lattice " << key <<
" into " 125 << egs.size() <<
" pieces.";
126 for (
size_t i = 0;
i < egs.size();
i++) {
128 std::vector<DiscriminativeNnetExample> excised_egs;
130 &excised_egs, &stats);
131 for (
size_t j = 0;
j < excised_egs.size();
j++) {
132 std::ostringstream os;
133 os << (examples_count++);
134 std::string example_key = os.str();
135 example_writer.
Write(example_key, excised_egs[
j]);
141 if (num_done > 0) stats.
Print();
143 KALDI_LOG <<
"Finished generating examples, " 144 <<
"successfully processed " << num_done
145 <<
" feature files, " << num_err <<
" had errors.";
146 return (num_done == 0 ? 1 : 0);
147 }
catch(
const std::exception &e) {
148 std::cerr << e.what() <<
'\n';
This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for...
int32 LeftContext() const
Returns the left-context summed over all the Components...
void SplitDiscriminativeExample(const SplitDiscriminativeExampleConfig &config, const TransitionModel &tmodel, const DiscriminativeNnetExample &eg, std::vector< DiscriminativeNnetExample > *egs_out, SplitExampleStats *stats_out)
Split a "discriminative example" into multiple pieces, splitting where the lattice has "pinch points"...
int main(int argc, char *argv[])
void PrintUsage(bool print_command_line=false)
Prints the usage documentation [provided in the constructor].
void ExciseDiscriminativeExample(const SplitDiscriminativeExampleConfig &config, const TransitionModel &tmodel, const DiscriminativeNnetExample &eg, std::vector< DiscriminativeNnetExample > *egs_out, SplitExampleStats *stats_out)
Remove unnecessary frames from discriminative training example.
void Read(std::istream &is, bool binary)
A templated class for writing objects to an archive or script file; see The Table concept...
This struct exists only for diagnostic purposes.
void Write(const std::string &key, const T &value) const
Allows random access to a collection of objects in an archive or script file; see The Table concept...
The class ParseOptions is for parsing command-line options; see Parsing command-line options for more...
bool LatticeToDiscriminativeExample(const std::vector< int32 > &alignment, const Matrix< BaseFloat > &feats, const CompactLattice &clat, BaseFloat weight, int32 left_context, int32 right_context, DiscriminativeNnetExample *eg)
Converts lattice to discriminative training example.
const T & Value(const std::string &key)
void Read(std::istream &is, bool binary)
int32 RightContext() const
Returns the right-context summed over all the Components...
Arc::StateId CreateSuperFinal(MutableFst< Arc > *fst)
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 HasKey(const std::string &key)
void Register(OptionsItf *opts)
fst::VectorFst< CompactLatticeArc > CompactLattice
int NumArgs() const
Number of positional parameters (c.f. argc-1).
This struct is used to store the information we need for discriminative training (MMI or MPE)...
Note on how to parse this filename: it contains functions relatied to neural-net training examples...
const Nnet & GetNnet() const
Config structure for SplitExample, for splitting discriminative training examples.