Blame view

src/lat/confidence.h 3.27 KB
8dcb6dfcb   Yannick Estève   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
  // lat/confidence.h
  
  // Copyright 2013  Johns Hopkins University (Author: Daniel Povey)
  
  // See ../../COPYING for clarification regarding multiple authors
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //  http://www.apache.org/licenses/LICENSE-2.0
  //
  // THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  // KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
  // WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
  // MERCHANTABLITY OR NON-INFRINGEMENT.
  // See the Apache 2 License for the specific language governing permissions and
  // limitations under the License.
  
  
  #ifndef KALDI_LAT_CONFIDENCE_H_
  #define KALDI_LAT_CONFIDENCE_H_
  
  #include <vector>
  #include <map>
  
  #include "base/kaldi-common.h"
  #include "util/common-utils.h"
  #include "fstext/fstext-lib.h"
  #include "lat/kaldi-lattice.h"
  
  namespace kaldi {
  
  /// Caution: this function is not the only way to get confidences in Kaldi.
  /// This only gives you sentence-level (utterance-level) confidence.  You can
  /// get word-by-word confidence within a sentence, along with Minimum Bayes Risk
  /// decoding, by looking at sausages.h.
  /// Caution: confidences estimated using this type of method are not very
  /// accurate.
  /// This function will return the difference between the best path in clat and
  /// the second-best path in clat (a positive number), or zero if clat was
  /// equivalent to the empty FST (no successful paths), or infinity if there
  /// was only one path in "clat".  It will output to "num_paths" (if non-NULL)
  /// a number n = 0, 1 or 2 saying how many n-best paths (up to two) were found.
  /// If n >= 1 it outputs to "best_sentence" (if non-NULL) the best word-sequence;
  /// if n == 2 it outputs to "second_best_sentence" (if non-NULL) the second best
  /// word-sequence (this may be useful for testing whether the two best word
  /// sequences are somehow equivalent for the task at hand).  If you need more
  /// information than this or want to look deeper inside the n-best list, then
  /// look at the implementation of this function.
  /// This function requires that distinct paths in "lat" have distinct word
  /// sequences; this will automatically be the case if you generated "clat"
  /// in any normal way, such as from a decoder, because a deterministic FST
  /// has this property.
  /// This function assumes that any acoustic scaling you want to apply,
  /// has already been applied.
  BaseFloat SentenceLevelConfidence(const CompactLattice &clat,
                                    int32 *num_paths,
                                    std::vector<int32> *best_sentence,
                                    std::vector<int32> *second_best_sentence);
  
  
  /// This version of SentenceLevelConfidence takes as input a state-level lattice.
  /// It needs to determinize it first, but it does so in a "smart" way that only generates
  /// about as many output paths as it needs.
  BaseFloat SentenceLevelConfidence(const Lattice &lat,
                                    int32 *num_paths,
                                    std::vector<int32> *best_sentence,
                                    std::vector<int32> *second_best_sentence);
  
  
  
  
  
  }  // namespace kaldi
  
  #endif  // KALDI_LAT_CONFIDENCE_H_