I observed a bug that ScoreComponentCollection core entries would retain
their score even after ZeroAll().  This may have affected the Moses
implementation of MIRA.

* std::valarray::resize(0) means "resize to 0" [1]
* subsequent accesses using operator[] result in undefined behavior [2]

FeatureVector::clear() is used by ScoreComponentCollection::ZeroAll(),
which in turn was used in these places:

./contrib/mira/Main.cpp:665:      cumulativeWeights.ZeroAll();
./contrib/mira/Main.cpp:666:      cumulativeWeightsBinary.ZeroAll();
./moses/Incremental.cpp:580:  features.ZeroAll();

It seems to me that the Moses implementation of MIRA may have been affected?

[1] http://www.cplusplus.com/reference/valarray/valarray/resize/
[2] http://www.cplusplus.com/reference/valarray/valarray/operator%5B%5D/
---
 moses/FeatureVector.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/moses/FeatureVector.cpp b/moses/FeatureVector.cpp
index 45a198c..f92bced 100644
--- a/moses/FeatureVector.cpp
+++ b/moses/FeatureVector.cpp
@@ -175,7 +175,7 @@ void FVector::resize(size_t newsize)
  void FVector::clear()
 {
-  m_coreFeatures.resize(0);
+  m_coreFeatures.resize(m_coreFeatures.size(), 0);
   m_features.clear();
 }
 -- 2.7.0

_______________________________________________
Moses-support mailing list
[email protected]
http://mailman.mit.edu/mailman/listinfo/moses-support

Reply via email to