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 <hieuhoang@gmail.com>2017-01-02 15:44:08 +0300
committerHieu Hoang <hieuhoang@gmail.com>2017-01-02 15:44:26 +0300
commitcf93594af98e35329be7120d01255a98d0ad1fa4 (patch)
tree6e5186be349d9b40d4503e60ccc1c1e69c900f46 /contrib
parent29b0072edac3312a82564ea614a5c64030997061 (diff)
re-implement -feature-overwrite
Diffstat (limited to 'contrib')
-rw-r--r--contrib/moses2/FF/FeatureFunction.h2
-rw-r--r--contrib/moses2/FF/FeatureFunctions.cpp42
-rw-r--r--contrib/moses2/FF/FeatureFunctions.h5
-rw-r--r--contrib/moses2/legacy/Parameter.cpp4
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 &parameter = 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",