diff options
| author | Patrick Simianer <p@simianer.de> | 2011-11-13 16:17:02 +0100 | 
|---|---|---|
| committer | Patrick Simianer <p@simianer.de> | 2011-11-13 16:17:02 +0100 | 
| commit | 853e07938ea3eaf0654911539bd5169a1b660220 (patch) | |
| tree | b8ed5de27564eb86862702ad65aac071d4cd3f5d /dtrain/hgsampler.cc | |
| parent | effc9bfc40a0559ce36a155daa15e0dc53e93b75 (diff) | |
removed hgsampler, more stats, unit_weight_vector arg
Diffstat (limited to 'dtrain/hgsampler.cc')
| -rw-r--r-- | dtrain/hgsampler.cc | 75 | 
1 files changed, 0 insertions, 75 deletions
diff --git a/dtrain/hgsampler.cc b/dtrain/hgsampler.cc deleted file mode 100644 index ad28b162..00000000 --- a/dtrain/hgsampler.cc +++ /dev/null @@ -1,75 +0,0 @@ -// Chris Dyer -#include "hgsampler.h" - -#include <queue> - -#include "viterbi.h" -#include "inside_outside.h" - -using namespace std; - -struct SampledDerivationWeightFunction { -  typedef double Weight; -  explicit SampledDerivationWeightFunction(const vector<bool>& sampled) : sampled_edges(sampled) {} -  double operator()(const Hypergraph::Edge& e) const { -    return static_cast<double>(sampled_edges[e.id_]); -  } -  const vector<bool>& sampled_edges; -}; - -void HypergraphSampler::sample_hypotheses(const Hypergraph& hg, -                                          unsigned n, -                                          MT19937* rng, -                                          vector<Hypothesis>* hypos) { -  hypos->clear(); -  hypos->resize(n); - -  // compute inside probabilities -  vector<prob_t> node_probs; -  Inside<prob_t, EdgeProb>(hg, &node_probs, EdgeProb()); - -  vector<bool> sampled_edges(hg.edges_.size()); -  queue<unsigned> q; -  SampleSet<prob_t> ss; -  for (unsigned i = 0; i < n; ++i) { -    fill(sampled_edges.begin(), sampled_edges.end(), false); -    // sample derivation top down -    assert(q.empty()); -    Hypothesis& hyp = (*hypos)[i]; -    SparseVector<double>& deriv_features = hyp.fmap; -    q.push(hg.nodes_.size() - 1); -    prob_t& model_score = hyp.model_score; -    model_score = prob_t::One(); -    while(!q.empty()) { -      unsigned cur_node_id = q.front(); -      q.pop(); -      const Hypergraph::Node& node = hg.nodes_[cur_node_id]; -      const unsigned num_in_edges = node.in_edges_.size(); -      unsigned sampled_edge_idx = 0; -      if (num_in_edges == 1) { -        sampled_edge_idx = node.in_edges_[0]; -      } else { -        assert(num_in_edges > 1); -        ss.clear(); -        for (unsigned j = 0; j < num_in_edges; ++j) { -          const Hypergraph::Edge& edge = hg.edges_[node.in_edges_[j]]; -          prob_t p = edge.edge_prob_;   // edge weight -          for (unsigned k = 0; k < edge.tail_nodes_.size(); ++k) -            p *= node_probs[edge.tail_nodes_[k]];  // tail node inside weight -          ss.add(p); -        } -        sampled_edge_idx = node.in_edges_[rng->SelectSample(ss)]; -      } -      sampled_edges[sampled_edge_idx] = true; -      const Hypergraph::Edge& sampled_edge = hg.edges_[sampled_edge_idx]; -      deriv_features += sampled_edge.feature_values_; -      model_score *= sampled_edge.edge_prob_; -      //sampled_deriv->push_back(sampled_edge_idx); -      for (unsigned j = 0; j < sampled_edge.tail_nodes_.size(); ++j) { -        q.push(sampled_edge.tail_nodes_[j]); -      } -    } -    Viterbi(hg, &hyp.words, ESentenceTraversal(), SampledDerivationWeightFunction(sampled_edges)); -  } -} -  | 
