diff options
author | Hieu Hoang <hieuhoang@gmail.com> | 2017-01-02 15:44:08 +0300 |
---|---|---|
committer | Hieu Hoang <hieuhoang@gmail.com> | 2017-01-02 15:44:26 +0300 |
commit | cf93594af98e35329be7120d01255a98d0ad1fa4 (patch) | |
tree | 6e5186be349d9b40d4503e60ccc1c1e69c900f46 /contrib | |
parent | 29b0072edac3312a82564ea614a5c64030997061 (diff) |
re-implement -feature-overwrite
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/moses2/FF/FeatureFunction.h | 2 | ||||
-rw-r--r-- | contrib/moses2/FF/FeatureFunctions.cpp | 42 | ||||
-rw-r--r-- | contrib/moses2/FF/FeatureFunctions.h | 5 | ||||
-rw-r--r-- | contrib/moses2/legacy/Parameter.cpp | 4 |
4 files changed, 48 insertions, 5 deletions
diff --git a/contrib/moses2/FF/FeatureFunction.h b/contrib/moses2/FF/FeatureFunction.h index d38c72b89..1e25fce39 100644 --- a/contrib/moses2/FF/FeatureFunction.h +++ b/contrib/moses2/FF/FeatureFunction.h @@ -80,6 +80,7 @@ public: return m_tuneable; } + virtual void SetParameter(const std::string& key, const std::string& value); // may have more factors than actually need, but not guaranteed. virtual void @@ -118,7 +119,6 @@ protected: std::vector<std::vector<std::string> > m_args; bool m_tuneable; - virtual void SetParameter(const std::string& key, const std::string& value); virtual void ReadParameters(); void ParseLine(const std::string &line); }; diff --git a/contrib/moses2/FF/FeatureFunctions.cpp b/contrib/moses2/FF/FeatureFunctions.cpp index 8ca145060..49a0ace67 100644 --- a/contrib/moses2/FF/FeatureFunctions.cpp +++ b/contrib/moses2/FF/FeatureFunctions.cpp @@ -103,8 +103,9 @@ void FeatureFunctions::Create() unkWP->SetParameter("suffix", m_system.options.unk.suffix); } } - } + + OverrideFeatures(); } FeatureFunction *FeatureFunctions::Create(const std::string &line) @@ -150,6 +151,17 @@ const FeatureFunction *FeatureFunctions::FindFeatureFunction( return NULL; } +FeatureFunction *FeatureFunctions::FindFeatureFunction( + const std::string &name) +{ + BOOST_FOREACH(const FeatureFunction *ff, m_featureFunctions){ + if (ff->GetName() == name) { + return const_cast<FeatureFunction *>(ff); + } + } + return NULL; +} + const PhraseTable *FeatureFunctions::GetPhraseTableExcludeUnknownWordPenalty(size_t ptInd) { // assume only 1 unk wp @@ -243,5 +255,33 @@ void FeatureFunctions::ShowWeights(const Weights &allWeights) } } +void FeatureFunctions::OverrideFeatures() +{ + const Parameter ¶meter = m_system.params; + + const PARAM_VEC *params = parameter.GetParam("feature-overwrite"); + for (size_t i = 0; params && i < params->size(); ++i) { + const string &str = params->at(i); + vector<string> toks = Tokenize(str); + UTIL_THROW_IF2(toks.size() <= 1, "Incorrect format for feature override: " << str); + + FeatureFunction *ff = FindFeatureFunction(toks[0]); + UTIL_THROW_IF2(ff == NULL, "Feature function not found: " << toks[0]); + + for (size_t j = 1; j < toks.size(); ++j) { + const string &keyValStr = toks[j]; + vector<string> keyVal = Tokenize(keyValStr, "="); + UTIL_THROW_IF2(keyVal.size() != 2, "Incorrect format for parameter override: " << keyValStr); + + cerr << "Override " << ff->GetName() << " " + << keyVal[0] << "=" << keyVal[1] << endl; + + ff->SetParameter(keyVal[0], keyVal[1]); + + } + } + +} + } diff --git a/contrib/moses2/FF/FeatureFunctions.h b/contrib/moses2/FF/FeatureFunctions.h index 74c77c7e6..2232e2a97 100644 --- a/contrib/moses2/FF/FeatureFunctions.h +++ b/contrib/moses2/FF/FeatureFunctions.h @@ -95,10 +95,13 @@ protected: System &m_system; size_t m_ffStartInd; + FeatureRegistry m_registry; + FeatureFunction *Create(const std::string &line); std::string GetDefaultName(const std::string &stub); + void OverrideFeatures(); + FeatureFunction *FindFeatureFunction(const std::string &name); - FeatureRegistry m_registry; }; } diff --git a/contrib/moses2/legacy/Parameter.cpp b/contrib/moses2/legacy/Parameter.cpp index 666eb0e98..bd2cd4676 100644 --- a/contrib/moses2/legacy/Parameter.cpp +++ b/contrib/moses2/legacy/Parameter.cpp @@ -94,8 +94,8 @@ Parameter::Parameter() AddParam(search_opts, "weight", "weights for ALL models, 1 per line 'WeightName value'. Weight names can be repeated"); - //AddParam(search_opts, "feature-overwrite", - // "Override arguments in a particular feature function with a particular key. Format: -feature-overwrite \"FeatureName key=value\""); + AddParam(search_opts, "feature-overwrite", + "Override arguments in a particular feature function with a particular key. Format: -feature-overwrite \"FeatureName key=value\""); po::options_description tune_opts("Options used in tuning."); AddParam(tune_opts, "weight-overwrite", |