void ScoreComponentCollection::ZeroAllLM(const LMList& lmList) { for (size_t ind = lmList.GetMinIndex(); ind <= lmList.GetMaxIndex(); ++ind) { m_scores[ind] = 0; } }
void ScoreComponentCollection::PlusEqualsAllLM(const LMList& lmList, const ScoreComponentCollection& rhs) { for (size_t ind = lmList.GetMinIndex(); ind <= lmList.GetMaxIndex(); ++ind) { m_scores[ind] += rhs.m_scores[ind]; } }
void TargetPhrase::SetScoreChart(const ScoreProducer* translationScoreProducer, const Scores &scoreVector ,const vector<float> &weightT ,const LMList &languageModels ,const WordPenaltyProducer* wpProducer) { assert(weightT.size() == scoreVector.size()); // calc average score if non-best m_transScore = std::inner_product(scoreVector.begin(), scoreVector.end(), weightT.begin(), 0.0f); m_scoreBreakdown.PlusEquals(translationScoreProducer, scoreVector); // Replicated from TranslationOptions.cpp float totalNgramScore = 0; float totalFullScore = 0; float totalOOVScore = 0; LMList::const_iterator lmIter; for (lmIter = languageModels.begin(); lmIter != languageModels.end(); ++lmIter) { const LanguageModel &lm = **lmIter; if (lm.Useable(*this)) { // contains factors used by this LM const float weightLM = lm.GetWeight(); const float oovWeightLM = lm.GetOOVWeight(); float fullScore, nGramScore; size_t oovCount; lm.CalcScore(*this, fullScore, nGramScore, oovCount); fullScore = UntransformLMScore(fullScore); nGramScore = UntransformLMScore(nGramScore); if (StaticData::Instance().GetLMEnableOOVFeature()) { vector<float> scores(2); scores[0] = nGramScore; scores[1] = oovCount; m_scoreBreakdown.Assign(&lm, scores); totalOOVScore += oovCount * oovWeightLM; } else { m_scoreBreakdown.Assign(&lm, nGramScore); } // total LM score so far totalNgramScore += nGramScore * weightLM; totalFullScore += fullScore * weightLM; } } // word penalty size_t wordCount = GetNumTerminals(); m_scoreBreakdown.Assign(wpProducer, - (float) wordCount * 0.434294482); // TODO log -> ln ?? m_fullScore = m_scoreBreakdown.GetWeightedScore() - totalNgramScore + totalFullScore + totalOOVScore; }
void TargetPhrase::SetScore(const ScoreProducer* translationScoreProducer, const Scores &scoreVector, const ScoreComponentCollection &sparseScoreVector, const vector<float> &weightT, float weightWP, const LMList &languageModels) { CHECK(weightT.size() == scoreVector.size()); // calc average score if non-best float transScore = std::inner_product(scoreVector.begin(), scoreVector.end(), weightT.begin(), 0.0f); m_scoreBreakdown.PlusEquals(translationScoreProducer, scoreVector); m_scoreBreakdown.PlusEquals(sparseScoreVector); // Replicated from TranslationOptions.cpp float totalNgramScore = 0; float totalFullScore = 0; float totalOOVScore = 0; LMList::const_iterator lmIter; for (lmIter = languageModels.begin(); lmIter != languageModels.end(); ++lmIter) { const LanguageModel &lm = **lmIter; if (lm.Useable(*this)) { // contains factors used by this LM const float weightLM = lm.GetWeight(); const float oovWeightLM = lm.GetOOVWeight(); float fullScore, nGramScore; size_t oovCount; lm.CalcScore(*this, fullScore, nGramScore, oovCount); if (StaticData::Instance().GetLMEnableOOVFeature()) { vector<float> scores(2); scores[0] = nGramScore; scores[1] = oovCount; m_scoreBreakdown.Assign(&lm, scores); totalOOVScore += oovCount * oovWeightLM; } else { m_scoreBreakdown.Assign(&lm, nGramScore); } // total LM score so far totalNgramScore += nGramScore * weightLM; totalFullScore += fullScore * weightLM; } } m_fullScore = transScore + totalFullScore + totalOOVScore - (this->GetSize() * weightWP); // word penalty }
void TargetPhrase::SetScore(const ScoreProducer* translationScoreProducer, const Scores &scoreVector, const vector<float> &weightT, float weightWP, const LMList &languageModels) { assert(weightT.size() == scoreVector.size()); // calc average score if non-best m_transScore = std::inner_product(scoreVector.begin(), scoreVector.end(), weightT.begin(), 0.0f); m_scoreBreakdown.PlusEquals(translationScoreProducer, scoreVector); // Replicated from TranslationOptions.cpp float totalFutureScore = 0; float totalNgramScore = 0; float totalFullScore = 0; LMList::const_iterator lmIter; for (lmIter = languageModels.begin(); lmIter != languageModels.end(); ++lmIter) { const LanguageModel &lm = **lmIter; if (lm.Useable(*this)) { // contains factors used by this LM const float weightLM = lm.GetWeight(); float fullScore, nGramScore; lm.CalcScore(*this, fullScore, nGramScore); m_scoreBreakdown.Assign(&lm, nGramScore); // total LM score so far totalNgramScore += nGramScore * weightLM; totalFullScore += fullScore * weightLM; } } m_ngramScore = totalNgramScore; m_fullScore = m_transScore + totalFutureScore + totalFullScore - (this->GetSize() * weightWP); // word penalty }