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