nnet-get-egs.cc File Reference
#include <sstream>
#include "base/kaldi-common.h"
#include "util/common-utils.h"
#include "hmm/transition-model.h"
#include "nnet2/nnet-example-functions.h"
Include dependency graph for nnet-get-egs.cc:

Go to the source code of this file.

Namespaces

 kaldi
 This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for mispronunciations detection tasks, the reference:
 
 kaldi::nnet2
 

Functions

static void ProcessFile (const MatrixBase< BaseFloat > &feats, const Posterior &pdf_post, const std::string &utt_id, int32 left_context, int32 right_context, int32 num_frames, int32 const_feat_dim, int64 *num_frames_written, int64 *num_egs_written, NnetExampleWriter *example_writer)
 
int main (int argc, char *argv[])
 

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 94 of file nnet-get-egs.cc.

References SequentialTableReader< Holder >::Done(), ParseOptions::GetArg(), RandomAccessTableReader< Holder >::HasKey(), KALDI_LOG, KALDI_WARN, SequentialTableReader< Holder >::Key(), SequentialTableReader< Holder >::Next(), ParseOptions::NumArgs(), MatrixBase< Real >::NumRows(), ParseOptions::PrintUsage(), kaldi::nnet2::ProcessFile(), ParseOptions::Read(), ParseOptions::Register(), RandomAccessTableReader< Holder >::Value(), and SequentialTableReader< Holder >::Value().

94  {
95  try {
96  using namespace kaldi;
97  using namespace kaldi::nnet2;
98  typedef kaldi::int32 int32;
99  typedef kaldi::int64 int64;
100 
101  const char *usage =
102  "Get frame-by-frame examples of data for neural network training.\n"
103  "Essentially this is a format change from features and posteriors\n"
104  "into a special frame-by-frame format. To split randomly into\n"
105  "different subsets, do nnet-copy-egs with --random=true, but\n"
106  "note that this does not randomize the order of frames.\n"
107  "\n"
108  "Usage: nnet-get-egs [options] <features-rspecifier> "
109  "<pdf-post-rspecifier> <training-examples-out>\n"
110  "\n"
111  "An example [where $feats expands to the actual features]:\n"
112  "nnet-get-egs --left-context=8 --right-context=8 \"$feats\" \\\n"
113  " \"ark:gunzip -c exp/nnet/ali.1.gz | ali-to-pdf exp/nnet/1.nnet ark:- ark:- | ali-to-post ark:- ark:- |\" \\\n"
114  " ark:- \n"
115  "Note: the --left-context and --right-context would be derived from\n"
116  "the output of nnet-info.";
117 
118 
119  int32 left_context = 0, right_context = 0,
120  num_frames = 1, const_feat_dim = 0;
121 
122  ParseOptions po(usage);
123  po.Register("left-context", &left_context, "Number of frames of left "
124  "context the neural net requires.");
125  po.Register("right-context", &right_context, "Number of frames of right "
126  "context the neural net requires.");
127  po.Register("num-frames", &num_frames, "Number of frames with labels "
128  "that each example contains.");
129  po.Register("const-feat-dim", &const_feat_dim, "If specified, the last "
130  "const-feat-dim dimensions of the feature input are treated as "
131  "constant over the context window (so are not spliced)");
132 
133  po.Read(argc, argv);
134 
135  if (po.NumArgs() != 3) {
136  po.PrintUsage();
137  exit(1);
138  }
139 
140  std::string feature_rspecifier = po.GetArg(1),
141  pdf_post_rspecifier = po.GetArg(2),
142  examples_wspecifier = po.GetArg(3);
143 
144  // Read in all the training files.
145  SequentialBaseFloatMatrixReader feat_reader(feature_rspecifier);
146  RandomAccessPosteriorReader pdf_post_reader(pdf_post_rspecifier);
147  NnetExampleWriter example_writer(examples_wspecifier);
148 
149  int32 num_done = 0, num_err = 0;
150  int64 num_frames_written = 0, num_egs_written = 0;
151 
152  for (; !feat_reader.Done(); feat_reader.Next()) {
153  std::string key = feat_reader.Key();
154  const Matrix<BaseFloat> &feats = feat_reader.Value();
155  if (!pdf_post_reader.HasKey(key)) {
156  KALDI_WARN << "No pdf-level posterior for key " << key;
157  num_err++;
158  } else {
159  const Posterior &pdf_post = pdf_post_reader.Value(key);
160  if (pdf_post.size() != feats.NumRows()) {
161  KALDI_WARN << "Posterior has wrong size " << pdf_post.size()
162  << " versus " << feats.NumRows();
163  num_err++;
164  continue;
165  }
166  ProcessFile(feats, pdf_post, key,
167  left_context, right_context, num_frames,
168  const_feat_dim, &num_frames_written, &num_egs_written,
169  &example_writer);
170  num_done++;
171  }
172  }
173 
174  KALDI_LOG << "Finished generating examples, "
175  << "successfully processed " << num_done
176  << " feature files, wrote " << num_egs_written << " examples, "
177  << " with " << num_frames_written << " egs in total; "
178  << num_err << " files had errors.";
179  return (num_egs_written == 0 || num_err > num_done ? 1 : 0);
180  } catch(const std::exception &e) {
181  std::cerr << e.what() << '\n';
182  return -1;
183  }
184 }
This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for...
Definition: chain.dox:20
A templated class for writing objects to an archive or script file; see The Table concept...
Definition: kaldi-table.h:368
kaldi::int32 int32
Allows random access to a collection of objects in an archive or script file; see The Table concept...
Definition: kaldi-table.h:233
std::vector< std::vector< std::pair< int32, BaseFloat > > > Posterior
Posterior is a typedef for storing acoustic-state (actually, transition-id) posteriors over an uttera...
Definition: posterior.h:42
The class ParseOptions is for parsing command-line options; see Parsing command-line options for more...
Definition: parse-options.h:36
A templated class for reading objects sequentially from an archive or script file; see The Table conc...
Definition: kaldi-table.h:287
#define KALDI_WARN
Definition: kaldi-error.h:150
MatrixIndexT NumRows() const
Returns number of rows (or zero for empty matrix).
Definition: kaldi-matrix.h:64
static void ProcessFile(const MatrixBase< BaseFloat > &feats, const Posterior &pdf_post, const std::string &utt_id, int32 left_context, int32 right_context, int32 num_frames, int32 const_feat_dim, int64 *num_frames_written, int64 *num_egs_written, NnetExampleWriter *example_writer)
Definition: nnet-get-egs.cc:32
#define KALDI_LOG
Definition: kaldi-error.h:153