Welcome to mirror list, hosted at ThFree Co, Russian Federation.

Point.h « mert - github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: f53f5f9821603b0b155aade6ed13b2a46ffe6455 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#ifndef MERT_POINT_H_
#define MERT_POINT_H_

#include <ostream>
#include <map>
#include <vector>
#include "Types.h"

namespace MosesTuning
{


class FeatureStats;
class Optimizer;

/**
 * A class that handles the subset of the Feature weight on which
 * we run the optimization.
 */
class Point : public std::vector<parameter_t>
{
  friend class Optimizer;

private:
  /**
   * The indices over which we optimize.
   */
  static std::vector<unsigned int> m_opt_indices;

  /**
   * Dimension of m_opt_indices and of the parent vector.
   */
  static unsigned int m_dim;

  /**
   * Fixed weights in case of partial optimzation.
   */
  static std::map<unsigned int,parameter_t> m_fixed_weights;

  /**
   * Total size of the parameter space; we have
   * m_pdim = FixedWeight.size() + optinidices.size().
   */
  static unsigned int m_pdim;
  static unsigned int m_ncall;

  /**
   * The limits for randomization, both vectors are of full length, m_pdim.
   */
  static std::vector<parameter_t> m_min;
  static std::vector<parameter_t> m_max;

  statscore_t m_score;

public:
  static unsigned int getdim() {
    return m_dim;
  }
  static void setdim(std::size_t d) {
    m_dim = d;
  }

  static unsigned int getpdim() {
    return m_pdim;
  }
  static void setpdim(std::size_t pd) {
    m_pdim = pd;
  }

  static void set_optindices(const std::vector<unsigned int>& indices) {
    m_opt_indices = indices;
  }

  static const std::vector<unsigned int>& get_optindices() {
    return m_opt_indices;
  }

  static bool OptimizeAll() {
    return m_fixed_weights.empty();
  }

  Point();
  Point(const std::vector<parameter_t>& init,
        const std::vector<parameter_t>& min,
        const std::vector<parameter_t>& max);
  ~Point();

  void Randomize();

  // Compute the feature function
  double operator*(const FeatureStats&) const;
  const Point operator+(const Point&) const;
  void operator+=(const Point&);
  const Point operator*(float) const;

  /**
   * Write the Whole featureweight to a stream (ie m_pdim float).
   */
  friend std::ostream& operator<<(std::ostream& o,const Point& P);

  void Normalize() {
    NormalizeL2();
  }
  void NormalizeL2();
  void NormalizeL1();

  /**
   * Return a vector of size m_pdim where all weights have been
   * put (including fixed ones).
   */
  void GetAllWeights(std::vector<parameter_t>& w) const;

  statscore_t GetScore() const {
    return m_score;
  }
  void SetScore(statscore_t score) {
    m_score = score;
  }
};

}

#endif  // MERT_POINT_H