00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef moses_LanguageModelImplementation_h
00023 #define moses_LanguageModelImplementation_h
00024
00025 #include <string>
00026 #include <vector>
00027 #include "moses/Factor.h"
00028 #include "moses/TypeDef.h"
00029 #include "moses/Util.h"
00030 #include "moses/FeatureFunction.h"
00031 #include "moses/Word.h"
00032 #include "Base.h"
00033
00034 #include <boost/shared_ptr.hpp>
00035
00036 namespace Moses
00037 {
00038
00039 class FactorCollection;
00040 class Factor;
00041 class Phrase;
00042
00044 struct LMResult {
00045
00046 float score;
00047
00048 bool unknown;
00049 };
00050
00052 class LanguageModelImplementation : public LanguageModel
00053 {
00054
00055
00056 void ShiftOrPush(std::vector<const Word*> &contextFactor, const Word &word) const;
00057
00058 protected:
00059 std::string m_filePath;
00060 size_t m_nGramOrder;
00061 Word m_sentenceStartWord, m_sentenceEndWord;
00062
00063
00064 LanguageModelImplementation(const std::string& description, const std::string &line)
00065 :LanguageModel(description, line)
00066 {}
00067 public:
00068
00069 virtual ~LanguageModelImplementation() {}
00070
00071
00072
00073
00074
00075
00076 virtual LMResult GetValueGivenState(const std::vector<const Word*> &contextFactor, FFState &state) const;
00077
00078
00079
00080 virtual LMResult GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const = 0;
00081
00083
00084 virtual void GetState(const std::vector<const Word*> &contextFactor, FFState &outState) const;
00085
00086 virtual const FFState *GetNullContextState() const = 0;
00087 virtual const FFState *GetBeginSentenceState() const = 0;
00088 virtual FFState *NewState(const FFState *from = NULL) const = 0;
00089
00090 void CalcScore(const Phrase &phrase, float &fullScore, float &ngramScore, size_t &oovCount) const;
00091
00092 FFState *Evaluate(const Hypothesis &hypo, const FFState *ps, ScoreComponentCollection *out) const;
00093
00094 FFState* EvaluateChart(const ChartHypothesis& cur_hypo, int featureID, ScoreComponentCollection* accumulator) const;
00095
00096 void updateChartScore(float *prefixScore, float *finalScore, float score, size_t wordPos) const;
00097
00099 size_t GetNGramOrder() const {
00100 return m_nGramOrder;
00101 }
00102
00104 const Word &GetSentenceStartWord() const {
00105 return m_sentenceStartWord;
00106 }
00107 const Word &GetSentenceEndWord() const {
00108 return m_sentenceEndWord;
00109 }
00110
00111 const FFState* EmptyHypothesisState(const InputType &) const
00112 {
00113 return NewState(GetBeginSentenceState());
00114 }
00115
00116 };
00117
00118 }
00119
00120 #endif