| // $Id$ | |
| /*********************************************************************** | |
| Moses - factored phrase-based language decoder | |
| Copyright (C) 2006 University of Edinburgh | |
| This library is free software; you can redistribute it and/or | |
| modify it under the terms of the GNU Lesser General Public | |
| License as published by the Free Software Foundation; either | |
| version 2.1 of the License, or (at your option) any later version. | |
| This library is distributed in the hope that it will be useful, | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| Lesser General Public License for more details. | |
| You should have received a copy of the GNU Lesser General Public | |
| License along with this library; if not, write to the Free Software | |
| Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
| ***********************************************************************/ | |
| namespace Moses | |
| { | |
| //! This will also load. Returns a templated backward LM. | |
| LanguageModel *ConstructBackwardLM(const std::string &line, const std::string &file, FactorType factorType, bool lazy); | |
| class FFState; | |
| // template<typename M> class BackwardLanguageModelTest; | |
| class BackwardLanguageModelTest; | |
| /* | |
| * An implementation of single factor backward LM using Kenneth's code. | |
| */ | |
| template <class Model> class BackwardLanguageModel : public LanguageModelKen<Model> | |
| { | |
| public: | |
| BackwardLanguageModel(const std::string &line, const std::string &file, FactorType factorType, bool lazy); | |
| virtual const FFState *EmptyHypothesisState(const InputType &/*input*/) const; | |
| virtual void CalcScore(const Phrase &phrase, float &fullScore, float &ngramScore, size_t &oovCount) const; | |
| virtual FFState *Evaluate(const Hypothesis &hypo, const FFState *ps, ScoreComponentCollection *out) const; | |
| FFState *Evaluate(const Phrase &phrase, const FFState *ps, float &returnedScore) const; | |
| private: | |
| // These lines are required to make the parent class's protected members visible to this class | |
| using LanguageModelKen<Model>::m_ngram; | |
| using LanguageModelKen<Model>::m_beginSentenceFactor; | |
| using LanguageModelKen<Model>::m_factorType; | |
| using LanguageModelKen<Model>::TranslateID; | |
| // friend class Moses::BackwardLanguageModelTest<Model>; | |
| friend class Moses::BackwardLanguageModelTest; | |
| /* | |
| lm::ngram::ChartState* GetState(FFState *ffState) { | |
| return NULL; | |
| } | |
| */ | |
| /* | |
| double Score(FFState *ffState) { | |
| BackwardLMState *lmState = static_cast< BackwardLMState* >(ffState); | |
| lm::ngram::ChartState &state = lmState->state; | |
| lm::ngram::RuleScore<Model> ruleScore(*m_ngram, lmState); | |
| return ruleScore.Finish(); | |
| } | |
| */ | |
| }; | |
| } // namespace Moses | |
| // To create a sample backward language model using SRILM: | |
| // | |
| // (ngram-count and reverse-text are SRILM programs) | |
| // | |
| // head -n 49 ./contrib/synlm/hhmm/LICENSE | tail -n 45 | tr '\n' ' ' | ./scripts/ems/support/split-sentences.perl | ./scripts/tokenizer/lowercase.perl | ./scripts/tokenizer/tokenizer.perl | reverse-text | ngram-count -order 3 -text - -lm - > lm/backward.arpa | |