|
#ifndef moses_GlobalLexicalModel_h |
|
#define moses_GlobalLexicalModel_h |
|
|
|
#include <stdexcept> |
|
#include <string> |
|
#include <vector> |
|
#include <memory> |
|
#include "StatelessFeatureFunction.h" |
|
#include "moses/Factor.h" |
|
#include "moses/Phrase.h" |
|
#include "moses/TypeDef.h" |
|
#include "moses/Util.h" |
|
#include "moses/Range.h" |
|
#include "moses/FactorTypeSet.h" |
|
#include "moses/Sentence.h" |
|
|
|
#ifdef WITH_THREADS |
|
#include <boost/thread/tss.hpp> |
|
#endif |
|
|
|
namespace Moses |
|
{ |
|
|
|
class Factor; |
|
class Phrase; |
|
class Hypothesis; |
|
class InputType; |
|
|
|
|
|
|
|
|
|
|
|
|
|
class GlobalLexicalModel : public StatelessFeatureFunction |
|
{ |
|
typedef boost::unordered_map< const Word*, |
|
boost::unordered_map< const Word*, float, UnorderedComparer<Word> , UnorderedComparer<Word> >, |
|
UnorderedComparer<Word>, UnorderedComparer<Word> > DoubleHash; |
|
typedef boost::unordered_map< const Word*, float, UnorderedComparer<Word>, UnorderedComparer<Word> > SingleHash; |
|
typedef std::map< const TargetPhrase*, float > LexiconCache; |
|
|
|
struct ThreadLocalStorage { |
|
LexiconCache cache; |
|
const Sentence *input; |
|
}; |
|
|
|
private: |
|
DoubleHash m_hash; |
|
#ifdef WITH_THREADS |
|
boost::thread_specific_ptr<ThreadLocalStorage> m_local; |
|
#else |
|
std::auto_ptr<ThreadLocalStorage> m_local; |
|
#endif |
|
Word *m_bias; |
|
|
|
FactorMask m_inputFactors, m_outputFactors; |
|
std::vector<FactorType> m_inputFactorsVec, m_outputFactorsVec; |
|
std::string m_filePath; |
|
|
|
void Load(AllOptions::ptr const& opts); |
|
|
|
float ScorePhrase( const TargetPhrase& targetPhrase ) const; |
|
float GetFromCacheOrScorePhrase( const TargetPhrase& targetPhrase ) const; |
|
|
|
public: |
|
GlobalLexicalModel(const std::string &line); |
|
virtual ~GlobalLexicalModel(); |
|
|
|
void SetParameter(const std::string& key, const std::string& value); |
|
|
|
void InitializeForInput(ttasksptr const& ttask); |
|
|
|
bool IsUseable(const FactorMask &mask) const; |
|
|
|
void EvaluateInIsolation(const Phrase &source |
|
, const TargetPhrase &targetPhrase |
|
, ScoreComponentCollection &scoreBreakdown |
|
, ScoreComponentCollection &estimatedScores) const { |
|
} |
|
|
|
void EvaluateWhenApplied(const Hypothesis& hypo, |
|
ScoreComponentCollection* accumulator) const { |
|
} |
|
void EvaluateWhenApplied(const ChartHypothesis &hypo, |
|
ScoreComponentCollection* accumulator) const { |
|
} |
|
|
|
void EvaluateWithSourceContext(const InputType &input |
|
, const InputPath &inputPath |
|
, const TargetPhrase &targetPhrase |
|
, const StackVec *stackVec |
|
, ScoreComponentCollection &scoreBreakdown |
|
, ScoreComponentCollection *estimatedScores = NULL) const; |
|
|
|
void EvaluateTranslationOptionListWithSourceContext(const InputType &input |
|
, const TranslationOptionList &translationOptionList) const { |
|
} |
|
|
|
}; |
|
|
|
} |
|
#endif |
|
|