diff options
| author | Avneesh Saluja <asaluja@gmail.com> | 2013-03-28 18:28:16 -0700 | 
|---|---|---|
| committer | Avneesh Saluja <asaluja@gmail.com> | 2013-03-28 18:28:16 -0700 | 
| commit | 5b8253e0e1f1393a509fb9975ba8c1347af758ed (patch) | |
| tree | 1790470b1d07a0b4973ebce19192e896566ea60b /decoder/ff_basic.cc | |
| parent | 2389a5a8a43dda87c355579838559515b0428421 (diff) | |
| parent | b203f8c5dc8cff1b9c9c2073832b248fcad0765a (diff) | |
fixed conflicts
Diffstat (limited to 'decoder/ff_basic.cc')
| -rw-r--r-- | decoder/ff_basic.cc | 80 | 
1 files changed, 80 insertions, 0 deletions
| diff --git a/decoder/ff_basic.cc b/decoder/ff_basic.cc new file mode 100644 index 00000000..f9404d24 --- /dev/null +++ b/decoder/ff_basic.cc @@ -0,0 +1,80 @@ +#include "ff_basic.h" + +#include "fast_lexical_cast.hpp" +#include "hg.h" + +using namespace std; + +// Hiero and Joshua use log_10(e) as the value, so I do to +WordPenalty::WordPenalty(const string& param) : +  fid_(FD::Convert("WordPenalty")), +    value_(-1.0 / log(10)) { +  if (!param.empty()) { +    cerr << "Warning WordPenalty ignoring parameter: " << param << endl; +  } +} + +void WordPenalty::TraversalFeaturesImpl(const SentenceMetadata& smeta, +                                        const Hypergraph::Edge& edge, +                                        const std::vector<const void*>& ant_states, +                                        SparseVector<double>* features, +                                        SparseVector<double>* estimated_features, +                                        void* state) const { +  (void) smeta; +  (void) ant_states; +  (void) state; +  (void) estimated_features; +  features->set_value(fid_, edge.rule_->EWords() * value_); +} + + +SourceWordPenalty::SourceWordPenalty(const string& param) : +    fid_(FD::Convert("SourceWordPenalty")), +    value_(-1.0 / log(10)) { +  if (!param.empty()) { +    cerr << "Warning SourceWordPenalty ignoring parameter: " << param << endl; +  } +} + +void SourceWordPenalty::TraversalFeaturesImpl(const SentenceMetadata& smeta, +                                        const Hypergraph::Edge& edge, +                                        const std::vector<const void*>& ant_states, +                                        SparseVector<double>* features, +                                        SparseVector<double>* estimated_features, +                                        void* state) const { +  (void) smeta; +  (void) ant_states; +  (void) state; +  (void) estimated_features; +  features->set_value(fid_, edge.rule_->FWords() * value_); +} + + +ArityPenalty::ArityPenalty(const std::string& param) : +    value_(-1.0 / log(10)) { +  string fname = "Arity_"; +  unsigned MAX=DEFAULT_MAX_ARITY; +  using namespace boost; +  if (!param.empty()) +    MAX=lexical_cast<unsigned>(param); +  for (unsigned i = 0; i <= MAX; ++i) { +    WordID fid=FD::Convert(fname+lexical_cast<string>(i)); +    fids_.push_back(fid); +  } +  while (!fids_.empty() && fids_.back()==0) fids_.pop_back(); // pretty up features vector in case FD was frozen.  doesn't change anything +} + +void ArityPenalty::TraversalFeaturesImpl(const SentenceMetadata& smeta, +                                         const Hypergraph::Edge& edge, +                                         const std::vector<const void*>& ant_states, +                                         SparseVector<double>* features, +                                         SparseVector<double>* estimated_features, +                                         void* state) const { +  (void) smeta; +  (void) ant_states; +  (void) state; +  (void) estimated_features; +  unsigned a=edge.Arity(); +  features->set_value(a<fids_.size()?fids_[a]:0, value_); +} + | 
