diff options
author | Hieu Hoang <hieu@hoang.co.uk> | 2013-05-30 21:34:10 +0400 |
---|---|---|
committer | Hieu Hoang <hieu@hoang.co.uk> | 2013-05-30 21:34:10 +0400 |
commit | 117eb76b0a0eb9563028206a547f8bf3e6e43fb2 (patch) | |
tree | 2906efdf0370cc520bd6c4f0d16205ff71f0685f | |
parent | f83622b0b76244964371ca7753a44d711d02c42a (diff) |
figure out which feature function to apply at which decode step. Book-keeping
-rw-r--r-- | moses/FactorTypeSet.cpp | 13 | ||||
-rw-r--r-- | moses/FactorTypeSet.h | 1 | ||||
-rw-r--r-- | moses/PDTAimp.h | 2 | ||||
-rw-r--r-- | moses/TranslationModel/PhraseDictionary.cpp | 8 | ||||
-rw-r--r-- | moses/TranslationModel/PhraseDictionary.h | 6 | ||||
-rw-r--r-- | moses/TranslationModel/PhraseDictionaryMultiModel.cpp | 4 | ||||
-rw-r--r-- | moses/TranslationModel/PhraseDictionaryMultiModelCounts.cpp | 4 | ||||
-rw-r--r-- | moses/TranslationModel/RuleTable/LoaderCompact.cpp | 2 | ||||
-rw-r--r-- | moses/TranslationModel/RuleTable/LoaderStandard.cpp | 2 | ||||
-rw-r--r-- | moses/TranslationModel/RuleTable/PhraseDictionaryFuzzyMatch.cpp | 2 |
10 files changed, 35 insertions, 9 deletions
diff --git a/moses/FactorTypeSet.cpp b/moses/FactorTypeSet.cpp index de2166ba2..44379e9f8 100644 --- a/moses/FactorTypeSet.cpp +++ b/moses/FactorTypeSet.cpp @@ -33,6 +33,19 @@ FactorMask::FactorMask(const vector<FactorType> &factors) } } +bool FactorMask::IsUseable(const FactorMask &other) const +{ + for (size_t i = 0; i < other.size(); ++i) { + if (other[i]) { + if (!this->operator[](i) ) { + return false; + } + } + } + + return true; +} + TO_STRING_BODY(FactorMask); // friend diff --git a/moses/FactorTypeSet.h b/moses/FactorTypeSet.h index 5464cee40..d9ebcf760 100644 --- a/moses/FactorTypeSet.h +++ b/moses/FactorTypeSet.h @@ -45,6 +45,7 @@ public: //! copy constructor FactorMask(const std::bitset<MAX_NUM_FACTORS>& rhs) : std::bitset<MAX_NUM_FACTORS>(rhs) { } + bool IsUseable(const FactorMask &other) const; TO_STRING(); }; diff --git a/moses/PDTAimp.h b/moses/PDTAimp.h index 17ca1d89b..c8598047d 100644 --- a/moses/PDTAimp.h +++ b/moses/PDTAimp.h @@ -276,7 +276,7 @@ public: targetPhrase.SetSourcePhrase(*srcPtr); targetPhrase.GetScoreBreakdown().Assign(m_obj, scoreVector); - targetPhrase.Evaluate(*srcPtr); + targetPhrase.Evaluate(*srcPtr, m_obj->GetFeaturesToApply()); } TargetPhraseCollection* PruneTargetCandidates(std::vector<TargetPhrase> const & tCands, diff --git a/moses/TranslationModel/PhraseDictionary.cpp b/moses/TranslationModel/PhraseDictionary.cpp index a0c94ccdc..8daa04b2e 100644 --- a/moses/TranslationModel/PhraseDictionary.cpp +++ b/moses/TranslationModel/PhraseDictionary.cpp @@ -53,6 +53,14 @@ PhraseDictionary::PhraseDictionary(const std::string &description, const std::st } } // for (size_t i = 0; i < toks.size(); ++i) { + // find out which feature function can be applied in this decode step + const std::vector<FeatureFunction*> &allFeatures = FeatureFunction::GetFeatureFunctions(); + for (size_t i = 0; i < allFeatures.size(); ++i) { + FeatureFunction *feature = allFeatures[i]; + if (feature->IsUseable(m_outputFactors)) { + m_featuresToApply.push_back(feature); + } + } } diff --git a/moses/TranslationModel/PhraseDictionary.h b/moses/TranslationModel/PhraseDictionary.h index 1b1197eb1..ca150e584 100644 --- a/moses/TranslationModel/PhraseDictionary.h +++ b/moses/TranslationModel/PhraseDictionary.h @@ -92,15 +92,19 @@ public: return m_filePath; } + const std::vector<FeatureFunction*> &GetFeaturesToApply() const + { return m_featuresToApply; } + protected: size_t m_tableLimit; - unsigned m_numInputScores; std::string m_filePath; std::string m_targetFile; std::string m_alignmentsFile; + + std::vector<FeatureFunction*> m_featuresToApply; }; } diff --git a/moses/TranslationModel/PhraseDictionaryMultiModel.cpp b/moses/TranslationModel/PhraseDictionaryMultiModel.cpp index e395cb5a3..36a9f7be5 100644 --- a/moses/TranslationModel/PhraseDictionaryMultiModel.cpp +++ b/moses/TranslationModel/PhraseDictionaryMultiModel.cpp @@ -175,7 +175,7 @@ void PhraseDictionaryMultiModel::CollectSufficientStatistics(const Phrase& src, } statistics->targetPhrase->GetScoreBreakdown().Assign(this, scoreVector); // set scores to 0 - statistics->targetPhrase->Evaluate(src); + statistics->targetPhrase->Evaluate(src, GetFeaturesToApply()); (*allStats)[targetString] = statistics; @@ -210,7 +210,7 @@ TargetPhraseCollection* PhraseDictionaryMultiModel::CreateTargetPhraseCollection scoreVector[m_numScoreComponents-1] = 1.0; statistics->targetPhrase->GetScoreBreakdown().Assign(this, scoreVector); - statistics->targetPhrase->Evaluate(src); + statistics->targetPhrase->Evaluate(src, GetFeaturesToApply()); ret->Add(new TargetPhrase(*statistics->targetPhrase)); } diff --git a/moses/TranslationModel/PhraseDictionaryMultiModelCounts.cpp b/moses/TranslationModel/PhraseDictionaryMultiModelCounts.cpp index 298e23a9b..02e615288 100644 --- a/moses/TranslationModel/PhraseDictionaryMultiModelCounts.cpp +++ b/moses/TranslationModel/PhraseDictionaryMultiModelCounts.cpp @@ -275,7 +275,7 @@ void PhraseDictionaryMultiModelCounts::CollectSufficientStatistics(const Phrase& scoreVector[1] = -raw_scores[1]; scoreVector[2] = -raw_scores[2]; statistics->targetPhrase->GetScoreBreakdown().Assign(this, scoreVector); // set scores to 0 - statistics->targetPhrase->Evaluate(src); + statistics->targetPhrase->Evaluate(src, GetFeaturesToApply()); (*allStats)[targetString] = statistics; @@ -328,7 +328,7 @@ TargetPhraseCollection* PhraseDictionaryMultiModelCounts::CreateTargetPhraseColl scoreVector[4] = FloorScore(TransformScore(2.718)); statistics->targetPhrase->GetScoreBreakdown().Assign(this, scoreVector); - statistics->targetPhrase->Evaluate(src); + statistics->targetPhrase->Evaluate(src, GetFeaturesToApply()); } catch (AlignmentException& e) { continue; } diff --git a/moses/TranslationModel/RuleTable/LoaderCompact.cpp b/moses/TranslationModel/RuleTable/LoaderCompact.cpp index 2b4a6003a..11686155e 100644 --- a/moses/TranslationModel/RuleTable/LoaderCompact.cpp +++ b/moses/TranslationModel/RuleTable/LoaderCompact.cpp @@ -227,7 +227,7 @@ bool RuleTableLoaderCompact::LoadRuleSection( targetPhrase->SetTargetLHS(targetLhs); targetPhrase->SetSourcePhrase(sourcePhrase); - targetPhrase->Evaluate(sourcePhrase); + targetPhrase->Evaluate(sourcePhrase, ruleTable.GetFeaturesToApply()); // Insert rule into table. TargetPhraseCollection &coll = GetOrCreateTargetPhraseCollection( diff --git a/moses/TranslationModel/RuleTable/LoaderStandard.cpp b/moses/TranslationModel/RuleTable/LoaderStandard.cpp index fb5052c40..bf0ac0f9f 100644 --- a/moses/TranslationModel/RuleTable/LoaderStandard.cpp +++ b/moses/TranslationModel/RuleTable/LoaderStandard.cpp @@ -242,7 +242,7 @@ bool RuleTableLoaderStandard::Load(FormatType format } targetPhrase->GetScoreBreakdown().Assign(&ruleTable, scoreVector); - targetPhrase->Evaluate(sourcePhrase); + targetPhrase->Evaluate(sourcePhrase, ruleTable.GetFeaturesToApply()); TargetPhraseCollection &phraseColl = GetOrCreateTargetPhraseCollection(ruleTable, sourcePhrase, *targetPhrase, sourceLHS); phraseColl.Add(targetPhrase); diff --git a/moses/TranslationModel/RuleTable/PhraseDictionaryFuzzyMatch.cpp b/moses/TranslationModel/RuleTable/PhraseDictionaryFuzzyMatch.cpp index 669e7306b..a6437db7b 100644 --- a/moses/TranslationModel/RuleTable/PhraseDictionaryFuzzyMatch.cpp +++ b/moses/TranslationModel/RuleTable/PhraseDictionaryFuzzyMatch.cpp @@ -236,7 +236,7 @@ void PhraseDictionaryFuzzyMatch::InitializeForInput(InputType const& inputSenten std::transform(scoreVector.begin(),scoreVector.end(),scoreVector.begin(),FloorScore); targetPhrase->GetScoreBreakdown().Assign(this, scoreVector); - targetPhrase->Evaluate(sourcePhrase); + targetPhrase->Evaluate(sourcePhrase, GetFeaturesToApply()); TargetPhraseCollection &phraseColl = GetOrCreateTargetPhraseCollection(rootNode, sourcePhrase, *targetPhrase, sourceLHS); phraseColl.Add(targetPhrase); |