Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHieu Hoang <hieu@hoang.co.uk>2013-05-30 21:34:10 +0400
committerHieu Hoang <hieu@hoang.co.uk>2013-05-30 21:34:10 +0400
commit117eb76b0a0eb9563028206a547f8bf3e6e43fb2 (patch)
tree2906efdf0370cc520bd6c4f0d16205ff71f0685f
parentf83622b0b76244964371ca7753a44d711d02c42a (diff)
figure out which feature function to apply at which decode step. Book-keeping
-rw-r--r--moses/FactorTypeSet.cpp13
-rw-r--r--moses/FactorTypeSet.h1
-rw-r--r--moses/PDTAimp.h2
-rw-r--r--moses/TranslationModel/PhraseDictionary.cpp8
-rw-r--r--moses/TranslationModel/PhraseDictionary.h6
-rw-r--r--moses/TranslationModel/PhraseDictionaryMultiModel.cpp4
-rw-r--r--moses/TranslationModel/PhraseDictionaryMultiModelCounts.cpp4
-rw-r--r--moses/TranslationModel/RuleTable/LoaderCompact.cpp2
-rw-r--r--moses/TranslationModel/RuleTable/LoaderStandard.cpp2
-rw-r--r--moses/TranslationModel/RuleTable/PhraseDictionaryFuzzyMatch.cpp2
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);