ZGen  0.2.0
a linearization system for natural language.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
score_map.h
Go to the documentation of this file.
1 #ifndef __ZGEN_SHIFTREDUCE_MODEL_SCORE_MAP_H__
2 #define __ZGEN_SHIFTREDUCE_MODEL_SCORE_MAP_H__
3 
7 #include "ml/perceptron/param.h"
8 
9 namespace ZGen {
10 namespace ShiftReduce {
11 
12 template<class ScoreType>
13 class ScoreMap {
14 private:
16  typedef boost::unordered_map<ScoreType, param_t> map_t;
17  typedef std::vector<ScoreType> cache_t;
18  typedef std::function<void(const ScoreContext&, const Action&, cache_t&)> extractor_t;
19  //typedef std::function<void(const ScoreContext&, const Action&)> extractor_t;
20 public:
21  ScoreMap(extractor_t _extractor): extractor(_extractor) {}
22 
33  floatval_t score(const ScoreContext& ctx, const Action& act,
34  bool avg, floatval_t default_return_value = 0.) {
35  cache.clear();
36  extractor(ctx, act, cache);
37  //extractor(ctx, act);
38  floatval_t ret = 0.;
39  for (int i = 0; i < cache.size(); ++ i) {
40  const ScoreType& entry = cache[i];
41  typename map_t::const_iterator itx = payload.find(entry);
42  if (itx != payload.end()) {
43  if (avg) {
44  ret += itx->second.w_sum;
45  } else {
46  ret += itx->second.w;
47  }
48  }
49  }
50  return ret;
51  }
52 
61  void update(const ScoreContext& ctx, const Action& act,
62  int now, floatval_t scale = 1.) {
63  cache.clear();
64  extractor(ctx, act, cache);
65  for (int i = 0; i < cache.size(); ++ i) {
66  const ScoreType& entry = cache[i];
67  param_t& param = payload[entry];
68  param.add(now, scale);
69  }
70  }
71 
77  void flush(int now) {
78  for (typename map_t::iterator itx = payload.begin();
79  itx != payload.end(); ++ itx) {
80  itx->second.flush(now);
81  }
82  }
83 
90  void save(boost::archive::text_oarchive& oa) {
91  oa << payload;
92  }
93 
99  void load(boost::archive::text_iarchive& ia) {
100  ia >> payload;
101  }
102 
103 private:
104  map_t payload;
105  cache_t cache;
106  extractor_t extractor;
107 };
108 
109 
110 }
111 }
112 
113 #endif // end for __ZGEN_SHIFTREDUCE_MODEL_SCORE_MAP_H__
Definition: score_context.h:47
Definition: action.h:18
void add(int now, floatval_t scale)
Definition: param.h:39
void update(const ScoreContext &ctx, const Action &act, int now, floatval_t scale=1.)
Definition: score_map.h:61
void save(boost::archive::text_oarchive &oa)
Definition: score_map.h:90
ScoreMap(extractor_t _extractor)
Definition: score_map.h:21
double floatval_t
Definition: settings.h:24
void flush(int now)
Definition: score_map.h:77
void load(boost::archive::text_iarchive &ia)
Definition: score_map.h:99
Definition: score_map.h:13
floatval_t score(const ScoreContext &ctx, const Action &act, bool avg, floatval_t default_return_value=0.)
Definition: score_map.h:33