mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-09-11 19:27:11 +03:00
lattice decoding with sparse features
This commit is contained in:
parent
52bb3bdf5a
commit
f379e5cb8a
@ -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) {
|
||||
|
@ -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)
|
||||
{
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user