| #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 |
|
|