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-06-05 01:09:21 +0400
committerHieu Hoang <hieu@hoang.co.uk>2013-06-05 01:09:21 +0400
commitfc7e4f455011f02928c45265b2fa2b3a27e6d80f (patch)
treefac4eb33f67362b4bd5a727a22d0c67d4bac5d9c
parent7f1a6041badb9d63cd5ca3063dc6902934fc43d6 (diff)
minor cleanup of InputFeature
-rw-r--r--moses/FF/InputFeature.cpp39
-rw-r--r--moses/FF/InputFeature.h14
-rw-r--r--moses/StaticData.cpp29
-rw-r--r--moses/StaticData.h6
4 files changed, 58 insertions, 30 deletions
diff --git a/moses/FF/InputFeature.cpp b/moses/FF/InputFeature.cpp
index 1ef394f9f..8cdaf3f0b 100644
--- a/moses/FF/InputFeature.cpp
+++ b/moses/FF/InputFeature.cpp
@@ -1,6 +1,7 @@
#include <stdexcept>
-
#include "InputFeature.h"
+#include "moses/Util.h"
+#include "util/check.hh"
using namespace std;
@@ -9,32 +10,20 @@ namespace Moses
InputFeature::InputFeature(const std::string &line)
:StatelessFeatureFunction("InputFeature", line)
{
-
-}
-
-const InputFeature &InputFeature::GetInputFeature()
-{
- static const InputFeature *staticObj = NULL;
-
- if (staticObj) {
- return *staticObj;
+ for (size_t i = 0; i < m_args.size(); ++i) {
+ const vector<string> &args = m_args[i];
+ CHECK(args.size() == 2);
+
+ if (args[0] == "num-input-features") {
+ m_numInputScores = Scan<size_t>(args[1]);
+ } else if (args[0] == "real-word-count") {
+ m_numRealWordCount = Scan<size_t>(args[1]);
+ } else {
+ throw "Unknown argument " + args[0];
+ }
}
- // 1st time looking up the feature
- const std::vector<const StatelessFeatureFunction*> &statefulFFs = StatelessFeatureFunction::GetStatelessFeatureFunctions();
- for (size_t i = 0; i < statefulFFs.size(); ++i) {
- const StatelessFeatureFunction *ff = statefulFFs[i];
- const InputFeature *lm = dynamic_cast<const InputFeature*>(ff);
-
- if (lm) {
- staticObj = lm;
- return *staticObj;
- }
- }
-
- throw std::logic_error("No input feature.");
-
}
-}
+} // namespace
diff --git a/moses/FF/InputFeature.h b/moses/FF/InputFeature.h
index fe02801e6..911aff81f 100644
--- a/moses/FF/InputFeature.h
+++ b/moses/FF/InputFeature.h
@@ -9,13 +9,21 @@ namespace Moses
class InputFeature : public StatelessFeatureFunction
{
-
+protected:
+ size_t m_numInputScores;
+ size_t m_numRealWordCount;
public:
InputFeature(const std::string &line);
- // miscellaenous ad-hoc features
- static const InputFeature &GetInputFeature();
+ bool IsUseable(const FactorMask &mask) const
+ { return true; }
+
+ size_t GetNumInputScores() const
+ { return m_numInputScores; }
+ size_t GetNumRealWordsInInput() const
+ { return m_numRealWordCount; }
+
};
diff --git a/moses/StaticData.cpp b/moses/StaticData.cpp
index 58c4ada51..cfea7514a 100644
--- a/moses/StaticData.cpp
+++ b/moses/StaticData.cpp
@@ -60,6 +60,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include "moses/FF/PhraseLengthFeature.h"
#include "moses/FF/DistortionScoreProducer.h"
#include "moses/FF/WordPenaltyProducer.h"
+#include "moses/FF/InputFeature.h"
#include "LM/Ken.h"
#ifdef LM_IRST
@@ -96,6 +97,9 @@ StaticData::StaticData()
,m_needAlignmentInfo(false)
,m_numInputScores(0)
,m_numRealWordsInInput(0)
+ ,m_inputFeature(NULL)
+ ,m_wpProducer(NULL)
+ ,m_unknownWordPenaltyProducer(NULL)
{
m_xmlBrackets.first="<";
m_xmlBrackets.second=">";
@@ -653,14 +657,17 @@ bool StaticData::LoadData(Parameter *parameter)
WordPenaltyProducer *model = new WordPenaltyProducer(line);
vector<float> weights = m_parameter->GetWeights(model->GetScoreProducerDescription());
SetWeights(model, weights);
- m_wpProducer = model;
} else if (feature == "UnknownWordPenalty") {
UnknownWordPenaltyProducer *model = new UnknownWordPenaltyProducer(line);
vector<float> weights = m_parameter->GetWeights(model->GetScoreProducerDescription());
if (weights.size() == 0)
weights.push_back(1.0f);
SetWeights(model, weights);
- m_unknownWordPenaltyProducer = model;
+ } else if (feature == "InputFeature") {
+ InputFeature *model = new InputFeature(line);
+ vector<float> weights = m_parameter->GetWeights(model->GetScoreProducerDescription());
+ SetWeights(model, weights);
+
} else if (feature == "PhraseDictionaryBinary") {
PhraseDictionaryTreeAdaptor* model = new PhraseDictionaryTreeAdaptor(line);
vector<float> weights = m_parameter->GetWeights(model->GetScoreProducerDescription());
@@ -1147,6 +1154,24 @@ void StaticData::LoadFeatureFunctions()
m_generationDictionary.push_back(generation);
}
+ WordPenaltyProducer *wpProducer = dynamic_cast<WordPenaltyProducer*>(ff);
+ if (wpProducer) {
+ CHECK(m_wpProducer == NULL); // max 1 feature;
+ m_wpProducer = wpProducer;
+ }
+
+ UnknownWordPenaltyProducer *unknownWordPenaltyProducer = dynamic_cast<UnknownWordPenaltyProducer*>(ff);
+ if (unknownWordPenaltyProducer) {
+ CHECK(m_unknownWordPenaltyProducer == NULL); // max 1 feature;
+ m_unknownWordPenaltyProducer = unknownWordPenaltyProducer;
+ }
+
+ const InputFeature *inputFeature = dynamic_cast<const InputFeature*>(ff);
+ if (inputFeature) {
+ CHECK(m_inputFeature == NULL); // max 1 input feature;
+ m_inputFeature = inputFeature;
+ }
+
PhraseDictionary *pt = dynamic_cast<PhraseDictionary*>(ff);
if (pt) {
m_phraseDictionary.push_back(pt);
diff --git a/moses/StaticData.h b/moses/StaticData.h
index 82bf6b23c..1e9d8c0da 100644
--- a/moses/StaticData.h
+++ b/moses/StaticData.h
@@ -56,6 +56,7 @@ class GenerationDictionary;
class DecodeStep;
class WordPenaltyProducer;
class UnknownWordPenaltyProducer;
+class InputFeature;
typedef std::pair<std::string, float> UnknownLHSEntry;
typedef std::vector<UnknownLHSEntry> UnknownLHSList;
@@ -129,6 +130,7 @@ protected:
mutable size_t m_verboseLevel;
WordPenaltyProducer* m_wpProducer;
UnknownWordPenaltyProducer *m_unknownWordPenaltyProducer;
+ const InputFeature *m_inputFeature;
bool m_reportSegmentation;
bool m_reportAllFactors;
@@ -435,6 +437,10 @@ public:
return m_unknownWordPenaltyProducer;
}
+ const InputFeature *GetInputFeature() const {
+ return m_inputFeature;
+ }
+
size_t GetNumInputScores() const {
return m_numInputScores;
}