lattice decoding with sparse features

This commit is contained in:
Hieu Hoang 2013-09-10 15:36:21 +02:00
parent 52bb3bdf5a
commit f379e5cb8a
3 changed files with 35 additions and 8 deletions

View File

@ -18,6 +18,8 @@ InputPath::InputPath(const Phrase &phrase, const NonTerminalSet &sourceNonTerms,
,m_range(range)
,m_inputScore(inputScore)
{
//cerr << "phrase=" << phrase << " m_inputScore=" << *m_inputScore << endl;
FactorType placeholderFactor = StaticData::Instance().GetPlaceholderFactor().first;
if (placeholderFactor != NOT_FOUND) {
for (size_t pos = 0; pos < m_phrase.GetSize(); ++pos) {

View File

@ -1,6 +1,6 @@
// $Id$
#include <vector>
#include "util/exception.hh"
#include "ScoreComponentCollection.h"
#include "StaticData.h"
@ -30,6 +30,20 @@ void ScorePair::PlusEquals(const StringPiece &key, float value)
}
}
std::ostream& operator<<(std::ostream& os, const ScorePair& rhs)
{
for (size_t i = 0; i < rhs.denseScores.size(); ++i) {
os << rhs.denseScores[i] << ",";
}
std::map<StringPiece, float>::const_iterator iter;
for (iter = rhs.sparseScores.begin(); iter != rhs.sparseScores.end(); ++iter) {
os << iter->first << "=" << iter->second << ",";
}
return os;
}
ScoreComponentCollection::ScoreIndexMap ScoreComponentCollection::s_scoreIndexes;
size_t ScoreComponentCollection::s_denseVectorSize = 0;
@ -206,6 +220,21 @@ void ScoreComponentCollection::Assign(const FeatureFunction* sp, const string li
}
}
void ScoreComponentCollection::Assign(const FeatureFunction* sp, const std::vector<float>& scores) {
IndexPair indexes = GetIndexes(sp);
size_t numScores = indexes.second - indexes.first;
if (scores.size() != numScores) {
UTIL_THROW(util::Exception, "Feature function " << sp->GetScoreProducerDescription() << " specified "
<< numScores << " dense scores or weights. Actually has " << scores.size());
}
for (size_t i = 0; i < scores.size(); ++i) {
m_scores[i + indexes.first] = scores[i];
}
}
void ScoreComponentCollection::InvertDenseFeatures(const FeatureFunction* sp)
{

View File

@ -46,6 +46,8 @@ namespace Moses
*/
struct ScorePair
{
friend std::ostream& operator<<(std::ostream& os, const ScorePair& rhs);
std::vector<float> denseScores;
std::map<StringPiece, float> sparseScores;
@ -262,13 +264,7 @@ public:
m_scores[fname] += score;
}
void Assign(const FeatureFunction* sp, const std::vector<float>& scores) {
IndexPair indexes = GetIndexes(sp);
CHECK(scores.size() == indexes.second - indexes.first);
for (size_t i = 0; i < scores.size(); ++i) {
m_scores[i + indexes.first] = scores[i];
}
}
void Assign(const FeatureFunction* sp, const std::vector<float>& scores);
//! Special version Assign(ScoreProducer, vector<float>)
//! to add the score from a single ScoreProducer that produces