| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #include "Base.h" |
| #include "moses/TypeDef.h" |
| #include "moses/Util.h" |
| #include "moses/Manager.h" |
| #include "moses/ChartManager.h" |
| #include "moses/FactorCollection.h" |
| #include "moses/Phrase.h" |
| #include "util/exception.hh" |
|
|
| using namespace std; |
|
|
| namespace Moses |
| { |
|
|
| LanguageModel::LanguageModel(const std::string &line) : |
| StatefulFeatureFunction(line, false), |
| m_enableOOVFeature(false) |
| { |
| |
| |
| this->m_numScoreComponents = this->m_numTuneableComponents = m_enableOOVFeature ? 2 : 1; |
| |
| |
| } |
|
|
|
|
| LanguageModel::~LanguageModel() {} |
|
|
| void LanguageModel::IncrementalCallback(Incremental::Manager &manager) const |
| { |
| UTIL_THROW(util::Exception, "Incremental search is only supported by KenLM."); |
| } |
|
|
| void LanguageModel::ReportHistoryOrder(std::ostream &out,const Phrase &phrase) const |
| { |
| |
| } |
|
|
| void |
| LanguageModel:: |
| EvaluateInIsolation(Phrase const& source, TargetPhrase const& targetPhrase, |
| ScoreComponentCollection &scoreBreakdown, |
| ScoreComponentCollection &estimatedScores) const |
| { |
| |
| float fullScore, nGramScore; |
| size_t oovCount; |
|
|
| CalcScore(targetPhrase, fullScore, nGramScore, oovCount); |
|
|
| float estimateScore = fullScore - nGramScore; |
|
|
| if (m_enableOOVFeature) { |
| vector<float> scores(2), estimateScores(2); |
| scores[0] = nGramScore; |
| scores[1] = oovCount; |
| scoreBreakdown.Assign(this, scores); |
|
|
| estimateScores[0] = estimateScore; |
| estimateScores[1] = 0; |
| estimatedScores.Assign(this, estimateScores); |
| } else { |
| scoreBreakdown.Assign(this, nGramScore); |
| estimatedScores.Assign(this, estimateScore); |
| } |
| } |
|
|
| const LanguageModel &LanguageModel::GetFirstLM() |
| { |
| static const LanguageModel *lmStatic = NULL; |
|
|
| if (lmStatic) { |
| return *lmStatic; |
| } |
|
|
| |
| const std::vector<const StatefulFeatureFunction*> &statefulFFs = StatefulFeatureFunction::GetStatefulFeatureFunctions(); |
| for (size_t i = 0; i < statefulFFs.size(); ++i) { |
| const StatefulFeatureFunction *ff = statefulFFs[i]; |
| const LanguageModel *lm = dynamic_cast<const LanguageModel*>(ff); |
|
|
| if (lm) { |
| lmStatic = lm; |
| return *lmStatic; |
| } |
| } |
|
|
| throw std::logic_error("Incremental search only supports one language model."); |
| } |
|
|
| void LanguageModel::SetParameter(const std::string& key, const std::string& value) |
| { |
| if(key == "oov-feature") { |
| m_enableOOVFeature = Scan<bool>(value); |
| this->m_numScoreComponents = this->m_numTuneableComponents = m_enableOOVFeature ? 2 : 1; |
| } else { |
| StatefulFeatureFunction::SetParameter(key, value); |
| } |
| } |
|
|
| } |
|
|