31 using namespace kaldi;
35 "Accumulate stats for GMM training (reading in posteriors).\n" 36 "Usage: gmm-acc-stats [options] <model-in> <feature-rspecifier>" 37 "<posteriors-rspecifier> <stats-out>\n" 39 " gmm-acc-stats 1.mdl scp:train.scp ark:1.post 1.acc\n";
43 std::string update_flags_str =
"mvwt";
45 po.Register(
"binary", &binary,
"Write output in binary mode");
46 po.Register(
"update-flags", &update_flags_str,
"Which GMM parameters will be " 47 "updated: subset of mvwt.");
50 if (po.NumArgs() != 4) {
55 std::string model_filename = po.GetArg(1),
56 feature_rspecifier = po.GetArg(2),
57 posteriors_rspecifier = po.GetArg(3),
58 accs_wxfilename = po.GetArg(4);
65 Input ki(model_filename, &binary);
66 trans_model.
Read(ki.Stream(), binary);
67 am_gmm.
Read(ki.Stream(), binary);
75 double tot_like = 0.0;
81 int32 num_done = 0, num_err = 0;
82 for (; !feature_reader.Done(); feature_reader.Next()) {
83 std::string key = feature_reader.Key();
84 if (!posteriors_reader.HasKey(key)) {
85 KALDI_WARN <<
"Could not find posteriors for utterance " << key;
89 const Posterior &posterior = posteriors_reader.Value(key);
91 if (static_cast<int32>(posterior.size()) != mat.
NumRows()) {
92 KALDI_WARN <<
"Posterior vector has wrong size " 93 << (posterior.size()) <<
" vs. " 100 BaseFloat tot_like_this_file = 0.0, tot_weight = 0.0;
104 for (
size_t i = 0;
i < posterior.size();
i++) {
106 for (
size_t j = 0;
j < pdf_posterior[
i].size();
j++) {
107 int32 pdf_id = pdf_posterior[
i][
j].first;
111 tot_weight += weight;
115 for (
size_t j = 0;
j < posterior[
i].size();
j++) {
116 int32 tid = posterior[
i][
j].first;
118 trans_model.
Accumulate(weight, tid, &transition_accs);
121 if (num_done % 50 == 0) {
122 KALDI_LOG <<
"Processed " << num_done <<
" utterances; for utterance " 123 << key <<
" avg. like is " << (tot_like_this_file/tot_weight)
124 <<
" over " << tot_weight <<
" frames.";
126 tot_like += tot_like_this_file;
131 KALDI_LOG <<
"Done " << num_done <<
" files, " << num_err
134 KALDI_LOG <<
"Overall avg like per frame (Gaussian only) = " 135 << (tot_like/tot_t) <<
" over " << tot_t <<
" frames.";
138 Output ko(accs_wxfilename, binary);
139 transition_accs.
Write(ko.Stream(), binary);
140 gmm_accs.
Write(ko.Stream(), binary);
143 return (num_done != 0 ? 0 : 1);
144 }
catch(
const std::exception &e) {
145 std::cerr << e.what();
This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for...
GmmFlagsType StringToGmmFlags(std::string str)
Convert string which is some subset of "mSwa" to flags.
void Write(std::ostream &Out, bool binary) const
Writes to C++ stream (option to write in binary).
BaseFloat AccumulateForGmm(const AmDiagGmm &model, const VectorBase< BaseFloat > &data, int32 gmm_index, BaseFloat weight)
Accumulate stats for a single GMM in the model; returns log likelihood.
Allows random access to a collection of objects in an archive or script file; see The Table concept...
std::vector< std::vector< std::pair< int32, BaseFloat > > > Posterior
Posterior is a typedef for storing acoustic-state (actually, transition-id) posteriors over an uttera...
void InitStats(Vector< double > *stats) const
The class ParseOptions is for parsing command-line options; see Parsing command-line options for more...
const SubVector< Real > Row(MatrixIndexT i) const
Return specific row of matrix [const].
void Read(std::istream &is, bool binary)
void Accumulate(BaseFloat prob, int32 trans_id, Vector< double > *stats) const
A templated class for reading objects sequentially from an archive or script file; see The Table conc...
MatrixIndexT NumRows() const
Returns number of rows (or zero for empty matrix).
void Write(std::ostream &out_stream, bool binary) const
void ConvertPosteriorToPdfs(const TransitionModel &tmodel, const Posterior &post_in, Posterior *post_out)
Converts a posterior over transition-ids to be a posterior over pdf-ids.
void Read(std::istream &in_stream, bool binary)
void Init(const AmDiagGmm &model, GmmFlagsType flags)
Initializes accumulators for each GMM based on the number of components and dimension.