|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#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); |
|
} |
|
} |
|
|
|
} |
|
|