NGramMake

Description

This operation produces a smoothed, normalized language model from input n-gram count FST. It smooths the model in one of six ways:

  • witten_bell: smooths using Witten-Bell (cite), with a hyperparameter k, as presented in Carpenter (2005).
  • absolute: smooths based on Absolute Discounting (cite), using bins and discount parameters.
  • katz: smooths based on Katz Backoff (cite), using bins parameters.
  • kneser_ney: smooths based on Kneser-Ney (cite), a variant of Absolute Discounting.
  • presmoothed: normalizes at each state based on the n-gram count of the history.
  • unsmoothed: normalizes the model but provides no smoothing.

See Chen and Goodman (1998) for a discussion of these smoothing methods.

All of the smoothing methods can be used to build either a mixture model (in which higher order n-gram distributions are interpolated with lower order n-gram distributions) or a backoff model (using the --backoff option, in which lower order n-gram distributions are only used if the higher order n-gram was unobserved in the corpus). Even though some of the methods are typically primarily used with either mixture or backoff smoothing (e.g., Katz with backoff), in this library they can be used with either. Note that mixture models are converted to a backoff topology by pre-summing the mixtures and placing the mixed probability on the highest order transition.

If the --bins option is left as the default (-1), then the number of bins for the discounting methods (katz,absolute,kneser_ney) are set to method appropriate defaults (5 for katz, 1 for absolute).

The C++ classes are all derived from the base class NGramMake.

Usage

ngrammake [--options] [in.fst [out.fst]]
  --method: type = string, one of: witten_bell (default) | absolute | katz | 
                                   kneser_ney | presmoothed | unsmoothed
  --backoff: type = bool, default = false
  --bins: type = int64, default = -1
  --witten_bell_k, type = double, default = 1.0
  --discount_D, type = double, default = 1.0
 
 class NGramAbsolute ngram(StdMutableFst *countfst);
 
 class NGramKatz ngram(StdMutableFst *countfst);
 
 class NGramKneserNey ngram(StdMutableFst *countfst);
 
 class NGramUnsmoothed ngram(StdMutableFst *countfst);
 
 class NGramWittenBell ngram(StdMutableFst *countfst);
 

Examples

Caveats

The presmoothed method normalizes at each state based on the n-gram count of the history, which is only appropriate under specialized circumstances, such as when the counts have been derived from strings with backoff transitions indicated.

References

-- MichaelRiley - 09 Dec 2011

Edit | Attach | Watch | Print version | History: r7 < r6 < r5 < r4 < r3 | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r4 - 2011-12-15 - BrianRoark
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback