00001 #ifndef moses_GlobalLexicalModel_h 00002 #define moses_GlobalLexicalModel_h 00003 00004 #include <stdexcept> 00005 #include <string> 00006 #include <vector> 00007 #include <memory> 00008 #include "StatelessFeatureFunction.h" 00009 #include "moses/Factor.h" 00010 #include "moses/Phrase.h" 00011 #include "moses/TypeDef.h" 00012 #include "moses/Util.h" 00013 #include "moses/Range.h" 00014 #include "moses/FactorTypeSet.h" 00015 #include "moses/Sentence.h" 00016 00017 #ifdef WITH_THREADS 00018 #include <boost/thread/tss.hpp> 00019 #endif 00020 00021 namespace Moses 00022 { 00023 00024 class Factor; 00025 class Phrase; 00026 class Hypothesis; 00027 class InputType; 00028 00034 class GlobalLexicalModel : public StatelessFeatureFunction 00035 { 00036 typedef boost::unordered_map< const Word*, 00037 boost::unordered_map< const Word*, float, UnorderedComparer<Word> , UnorderedComparer<Word> >, 00038 UnorderedComparer<Word>, UnorderedComparer<Word> > DoubleHash; 00039 typedef boost::unordered_map< const Word*, float, UnorderedComparer<Word>, UnorderedComparer<Word> > SingleHash; 00040 typedef std::map< const TargetPhrase*, float > LexiconCache; 00041 00042 struct ThreadLocalStorage { 00043 LexiconCache cache; 00044 const Sentence *input; 00045 }; 00046 00047 private: 00048 DoubleHash m_hash; 00049 #ifdef WITH_THREADS 00050 boost::thread_specific_ptr<ThreadLocalStorage> m_local; 00051 #else 00052 std::auto_ptr<ThreadLocalStorage> m_local; 00053 #endif 00054 Word *m_bias; 00055 00056 FactorMask m_inputFactors, m_outputFactors; 00057 std::vector<FactorType> m_inputFactorsVec, m_outputFactorsVec; 00058 std::string m_filePath; 00059 00060 void Load(AllOptions::ptr const& opts); 00061 00062 float ScorePhrase( const TargetPhrase& targetPhrase ) const; 00063 float GetFromCacheOrScorePhrase( const TargetPhrase& targetPhrase ) const; 00064 00065 public: 00066 GlobalLexicalModel(const std::string &line); 00067 virtual ~GlobalLexicalModel(); 00068 00069 void SetParameter(const std::string& key, const std::string& value); 00070 00071 void InitializeForInput(ttasksptr const& ttask); 00072 00073 bool IsUseable(const FactorMask &mask) const; 00074 00075 void EvaluateInIsolation(const Phrase &source 00076 , const TargetPhrase &targetPhrase 00077 , ScoreComponentCollection &scoreBreakdown 00078 , ScoreComponentCollection &estimatedScores) const { 00079 } 00080 00081 void EvaluateWhenApplied(const Hypothesis& hypo, 00082 ScoreComponentCollection* accumulator) const { 00083 } 00084 void EvaluateWhenApplied(const ChartHypothesis &hypo, 00085 ScoreComponentCollection* accumulator) const { 00086 } 00087 00088 void EvaluateWithSourceContext(const InputType &input 00089 , const InputPath &inputPath 00090 , const TargetPhrase &targetPhrase 00091 , const StackVec *stackVec 00092 , ScoreComponentCollection &scoreBreakdown 00093 , ScoreComponentCollection *estimatedScores = NULL) const; 00094 00095 void EvaluateTranslationOptionListWithSourceContext(const InputType &input 00096 , const TranslationOptionList &translationOptionList) const { 00097 } 00098 00099 }; 00100 00101 } 00102 #endif