@@ -32,15 +32,19 @@ int main(int argc, char *argv[]) {
3232
3333 const char *usage =
3434 " Print out per-frame log-likelihoods for each utterance, as an archive\n "
35- " of vectors of floats.\n "
35+ " of vectors of floats. If --average=true, prints out the average per-frame\n "
36+ " log-likelihood for each utterance, as a single float.\n "
3637 " Usage: fgmm-global-get-frame-likes [options] <model-in> <feature-rspecifier> "
3738 " <likes-out-wspecifier>\n "
3839 " e.g.: fgmm-global-get-frame-likes 1.mdl scp:train.scp ark:1.likes\n " ;
3940
4041 ParseOptions po (usage);
42+ bool average = false ;
4143 std::string gselect_rspecifier;
4244 po.Register (" gselect" , &gselect_rspecifier, " rspecifier for gselect objects "
4345 " to limit the #Gaussians accessed on each frame." );
46+ po.Register (" average" , &average, " If true, print out the average per-frame "
47+ " log-likelihood as a single float per utterance." );
4448 po.Read (argc, argv);
4549
4650 if (po.NumArgs () != 3 ) {
@@ -63,7 +67,8 @@ int main(int argc, char *argv[]) {
6367
6468 SequentialBaseFloatMatrixReader feature_reader (feature_rspecifier);
6569 RandomAccessInt32VectorVectorReader gselect_reader (gselect_rspecifier);
66- BaseFloatVectorWriter likes_writer (likes_wspecifier);
70+ BaseFloatVectorWriter likes_writer (average ? " " : likes_wspecifier);
71+ BaseFloatWriter average_likes_writer (average ? likes_wspecifier : " " );
6772 int32 num_done = 0 , num_err = 0 ;
6873
6974 for (; !feature_reader.Done (); feature_reader.Next ()) {
@@ -104,7 +109,10 @@ int main(int argc, char *argv[]) {
104109
105110 tot_like += likes.Sum ();
106111 tot_frames += file_frames;
107- likes_writer.Write (key, likes);
112+ if (average)
113+ average_likes_writer.Write (key, likes.Sum () / file_frames);
114+ else
115+ likes_writer.Write (key, likes);
108116 num_done++;
109117 }
110118 KALDI_LOG << " Done " << num_done << " files; " << num_err
0 commit comments