From 2b30e44c7845c0e9fccbf2fc0ea535a0c5322d60 Mon Sep 17 00:00:00 2001 From: "Wu, Ke" Date: Thu, 11 Dec 2014 18:51:21 -0500 Subject: Add IgnoredStateSize() to FeatureFunction --- decoder/ff.h | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'decoder/ff.h') diff --git a/decoder/ff.h b/decoder/ff.h index 3280592e..afa3dbca 100644 --- a/decoder/ff.h +++ b/decoder/ff.h @@ -17,11 +17,17 @@ class FeatureFunction { friend class ExternalFeature; public: std::string name_; // set by FF factory using usage() - FeatureFunction() : state_size_() {} - explicit FeatureFunction(int state_size) : state_size_(state_size) {} + FeatureFunction() : state_size_(), ignored_state_size_() {} + explicit FeatureFunction(int state_size, int ignored_state_size = 0) + : state_size_(state_size), ignored_state_size_(ignored_state_size) {} virtual ~FeatureFunction(); bool IsStateful() const { return state_size_ > 0; } int StateSize() const { return state_size_; } + // Returns the number of bytes in the state that should be ignored during + // search. When non-zero, the last N bytes in the state should be ignored when + // splitting a hypernode by the state. This allows the feature function to + // store some side data and later retrieve it via the state bytes. + int IgnoredStateSize() const { return ignored_state_size_; } // override this. not virtual because we want to expose this to factory template for help before creating a FF static std::string usage(bool show_params,bool show_details) { @@ -71,12 +77,17 @@ class FeatureFunction { SparseVector* estimated_features, void* context) const; - // !!! ONLY call this from subclass *CONSTRUCTORS* !!! + // !!! ONLY call these from subclass *CONSTRUCTORS* !!! void SetStateSize(size_t state_size) { state_size_ = state_size; } + + void SetIgnoredStateSize(size_t ignored_state_size) { + ignored_state_size_ = ignored_state_size; + } + private: - int state_size_; + int state_size_, ignored_state_size_; }; #endif -- cgit v1.2.3 From d2c51ae79bca9b7c87f87ff458f77a6f07fff9a6 Mon Sep 17 00:00:00 2001 From: "Wu, Ke" Date: Wed, 17 Dec 2014 10:42:18 -0500 Subject: Warn about possible misuse of IgnoredStateSize() related functions --- decoder/ff.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'decoder/ff.h') diff --git a/decoder/ff.h b/decoder/ff.h index afa3dbca..647b4834 100644 --- a/decoder/ff.h +++ b/decoder/ff.h @@ -27,6 +27,12 @@ class FeatureFunction { // search. When non-zero, the last N bytes in the state should be ignored when // splitting a hypernode by the state. This allows the feature function to // store some side data and later retrieve it via the state bytes. + // + // In general, this should not be necessary and it should always be possible + // to replace this with a more appropriate design of state (if you find + // yourself having to ignore some part of the state, you are most likely + // storing redundant information in the state). Be sure that you + // understand how this affects ApplyModelSet() before using it. int IgnoredStateSize() const { return ignored_state_size_; } // override this. not virtual because we want to expose this to factory template for help before creating a FF @@ -82,6 +88,7 @@ class FeatureFunction { state_size_ = state_size; } + // See document of IgnoredStateSize() above. void SetIgnoredStateSize(size_t ignored_state_size) { ignored_state_size_ = ignored_state_size; } -- cgit v1.2.3