// -*- mode: c++; indent-tabs-mode: nil; tab-width:2 -*- | |
// $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 | |
{ | |
namespace Incremental | |
{ | |
class Manager; | |
} | |
class FactorCollection; | |
class Factor; | |
class Phrase; | |
//! Abstract base class which represent a language model on a contiguous phrase | |
class LanguageModel : public StatefulFeatureFunction | |
{ | |
protected: | |
LanguageModel(const std::string &line); | |
bool m_enableOOVFeature; | |
public: | |
static const LanguageModel &GetFirstLM(); | |
virtual ~LanguageModel(); | |
bool OOVFeatureEnabled() const { | |
return m_enableOOVFeature; | |
} | |
virtual void SetParameter(const std::string& key, const std::string& value); | |
virtual const FFState* EmptyHypothesisState(const InputType &input) const = 0; | |
/* calc total unweighted LM score of this phrase and return score via arguments. | |
* Return scores should always be in natural log, regardless of representation with LM implementation. | |
* Uses GetValue() of inherited class. | |
* \param fullScore scores of all unigram, bigram... of contiguous n-gram of the phrase | |
* \param ngramScore score of only n-gram of order m_nGramOrder | |
* \param oovCount number of LM OOVs | |
*/ | |
virtual void CalcScore(const Phrase &phrase, float &fullScore, float &ngramScore, std::size_t &oovCount) const = 0; | |
virtual void CalcScoreFromCache(const Phrase &phrase, float &fullScore, float &ngramScore, std::size_t &oovCount) const { | |
} | |
virtual void IssueRequestsFor(Hypothesis& hypo, | |
const FFState* input_state) { | |
} | |
virtual void sync() { | |
} | |
virtual void SetFFStateIdx(int state_idx) { | |
} | |
// KenLM only (others throw an exception): call incremental search with the model and mapping. | |
virtual void IncrementalCallback(Incremental::Manager &manager) const; | |
virtual void ReportHistoryOrder(std::ostream &out,const Phrase &phrase) const; | |
virtual void EvaluateInIsolation(const Phrase &source | |
, const TargetPhrase &targetPhrase | |
, ScoreComponentCollection &scoreBreakdown | |
, ScoreComponentCollection &estimatedScores) const; | |
}; | |
} | |