From 5403c3cc854b061e9c5c8b3ef783b7b4d2e9387c Mon Sep 17 00:00:00 2001
From: Chris Dyer <cdyer@cs.cmu.edu>
Date: Tue, 3 May 2011 01:02:45 -0400
Subject: weight setting bug

---
 decoder/decoder.cc | 5 ++++-
 decoder/ff.h       | 3 +++
 2 files changed, 7 insertions(+), 1 deletion(-)

(limited to 'decoder')

diff --git a/decoder/decoder.cc b/decoder/decoder.cc
index 0d7e84ad..d8dd0c61 100644
--- a/decoder/decoder.cc
+++ b/decoder/decoder.cc
@@ -176,8 +176,11 @@ struct DecoderImpl {
   bool Decode(const string& input, DecoderObserver*);
   void SetWeights(const vector<double>& weights) {
     init_weights = weights;
-    for (int i = 0; i < rescoring_passes.size(); ++i)
+    for (int i = 0; i < rescoring_passes.size(); ++i) {
+      if (rescoring_passes[i].models)
+        rescoring_passes[i].models->SetWeights(weights);
       rescoring_passes[i].weight_vector = weights;
+    }
   }
   void SetId(int next_sent_id) { sent_id = next_sent_id - 1; }
 
diff --git a/decoder/ff.h b/decoder/ff.h
index 89b8b067..c3aa9b6d 100644
--- a/decoder/ff.h
+++ b/decoder/ff.h
@@ -264,6 +264,9 @@ class ModelSet {
   ModelSet(const std::vector<double>& weights,
            const std::vector<const FeatureFunction*>& models);
 
+  // TODO stop stupid copy
+  void SetWeights(const std::vector<double>& w) { weights_ = w; }
+
   // sets edge->feature_values_ and edge->edge_prob_
   // NOTE: edge must not necessarily be in hg.edges_ but its TAIL nodes
   // must be.  edge features are supposed to be overwritten, not added to (possibly because rule features aren't in ModelSet so need to be left alone
-- 
cgit v1.2.3