From 520e03c12ffb6da89a66ecf9b9e46eeb3a3c8087 Mon Sep 17 00:00:00 2001 From: Chris Dyer Date: Tue, 3 May 2011 01:02:45 -0400 Subject: weight setting bug --- decoder/decoder.cc | 5 ++++- decoder/ff.h | 3 +++ utils/sparse_vector.h | 10 +++++----- 3 files changed, 12 insertions(+), 6 deletions(-) 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& 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& weights, const std::vector& models); + // TODO stop stupid copy + void SetWeights(const std::vector& 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 diff --git a/utils/sparse_vector.h b/utils/sparse_vector.h index 274220ef..e3721b50 100644 --- a/utils/sparse_vector.h +++ b/utils/sparse_vector.h @@ -54,16 +54,16 @@ SparseVector operator*(const SparseVector& a, const T& b) { return result *= b; } -template -SparseVector operator/(const SparseVector& a, const double& b) { +template +SparseVector operator/(const SparseVector& a, const S& b) { SparseVector result = a; - return result *= b; + return result /= b; } template -SparseVector operator/(const SparseVector& a, const T& b) { +SparseVector operator/(const SparseVector& a, const double& b) { SparseVector result = a; - return result *= b; + return result /= b; } #include "fdict.h" -- cgit v1.2.3