00001
00002
00003 #ifndef moses_DynamicCacheBasedLanguageModel_h
00004 #define moses_DynamicCacheBasedLanguageModel_h
00005
00006 #include "moses/Util.h"
00007 #include "FeatureFunction.h"
00008
00009 #ifdef WITH_THREADS
00010 #include <boost/thread/shared_mutex.hpp>
00011 #include <boost/thread/locks.hpp>
00012 #endif
00013
00014 typedef std::pair<int, float> decaying_cache_value_t;
00015 typedef std::map<std::string, decaying_cache_value_t > decaying_cache_t;
00016
00017 #define CBLM_QUERY_TYPE_UNDEFINED (-1)
00018 #define CBLM_QUERY_TYPE_ALLSUBSTRINGS 0
00019 #define CBLM_QUERY_TYPE_WHOLESTRING 1
00020
00021 #define CBLM_SCORE_TYPE_UNDEFINED (-1)
00022 #define CBLM_SCORE_TYPE_HYPERBOLA 0
00023 #define CBLM_SCORE_TYPE_POWER 1
00024 #define CBLM_SCORE_TYPE_EXPONENTIAL 2
00025 #define CBLM_SCORE_TYPE_COSINE 3
00026 #define CBLM_SCORE_TYPE_HYPERBOLA_REWARD 10
00027 #define CBLM_SCORE_TYPE_POWER_REWARD 11
00028 #define CBLM_SCORE_TYPE_EXPONENTIAL_REWARD 12
00029 #define PI 3.14159265
00030
00031 namespace Moses
00032 {
00033
00034 class Range;
00035
00038 class DynamicCacheBasedLanguageModel : public StatelessFeatureFunction
00039 {
00040
00041
00042 decaying_cache_t m_cache;
00043 size_t m_query_type;
00044 size_t m_score_type;
00045 std::string m_initfiles;
00046 std::string m_name;
00047 float m_lower_score;
00048 bool m_constant;
00049 std::vector<float> precomputedScores;
00050 unsigned int m_maxAge;
00051
00052 #ifdef WITH_THREADS
00053
00054 mutable boost::shared_mutex m_cacheLock;
00055 #endif
00056
00057 float decaying_score(unsigned int age);
00058 void SetPreComputedScores();
00059 float GetPreComputedScores(const unsigned int age);
00060
00061 float Evaluate_Whole_String( const TargetPhrase&) const;
00062 float Evaluate_All_Substrings( const TargetPhrase&) const;
00063
00064 void Decay();
00065 void Update(std::vector<std::string> words, int age);
00066
00067 void ClearEntries(std::vector<std::string> entries);
00068
00069 void Execute(std::vector<std::string> commands);
00070 void Execute_Single_Command(std::string command);
00071
00072 void Load_Multiple_Files(std::vector<std::string> files);
00073 void Load_Single_File(const std::string file);
00074
00075 void Insert(std::vector<std::string> ngrams);
00076
00077
00078 void Print() const;
00079
00080 protected:
00081 static DynamicCacheBasedLanguageModel* s_instance;
00082 static std::map< const std::string, DynamicCacheBasedLanguageModel* > s_instance_map;
00083
00084 public:
00085 DynamicCacheBasedLanguageModel(const std::string &line);
00086 ~DynamicCacheBasedLanguageModel();
00087
00088 inline const std::string GetName() {
00089 return m_name;
00090 };
00091 inline void SetName(const std::string name) {
00092 m_name = name;
00093 }
00094
00095 static const DynamicCacheBasedLanguageModel* Instance(const std::string& name) {
00096 if (s_instance_map.find(name) == s_instance_map.end()) {
00097 return NULL;
00098 }
00099 return s_instance_map[name];
00100 }
00101
00102 static DynamicCacheBasedLanguageModel* InstanceNonConst(const std::string& name) {
00103 if (s_instance_map.find(name) == s_instance_map.end()) {
00104 return NULL;
00105 }
00106 return s_instance_map[name];
00107 }
00108
00109
00110
00111 static const DynamicCacheBasedLanguageModel& Instance() {
00112 return *s_instance;
00113 }
00114 static DynamicCacheBasedLanguageModel& InstanceNonConst() {
00115 return *s_instance;
00116 }
00117
00118 bool IsUseable(const FactorMask &mask) const {
00119 return true;
00120 }
00121
00122 void Load(AllOptions::ptr const& opts);
00123 void Load(const std::string filestr);
00124 void Execute(std::string command);
00125 void SetParameter(const std::string& key, const std::string& value);
00126 void ExecuteDlt(std::map<std::string, std::string> dlt_meta);
00127
00128 void ClearEntries(std::string &entries);
00129 void Insert(std::string &entries);
00130 void Clear();
00131
00132 virtual void EvaluateInIsolation(const Phrase &source
00133 , const TargetPhrase &targetPhrase
00134 , ScoreComponentCollection &scoreBreakdown
00135 , ScoreComponentCollection &estimatedScores) const;
00136
00137 void EvaluateWithSourceContext(const InputType &input
00138 , const InputPath &inputPath
00139 , const TargetPhrase &targetPhrase
00140 , const StackVec *stackVec
00141 , ScoreComponentCollection &scoreBreakdown
00142 , ScoreComponentCollection *estimatedScores = NULL) const {
00143 }
00144
00145 void EvaluateTranslationOptionListWithSourceContext(const InputType &input
00146 , const TranslationOptionList &translationOptionList) const {
00147 }
00148
00149 void EvaluateWhenApplied(const Hypothesis& hypo,
00150 ScoreComponentCollection* accumulator) const {
00151 }
00152
00153 void EvaluateWhenApplied(const ChartHypothesis &hypo,
00154 ScoreComponentCollection* accumulator) const {
00155 }
00156
00157 void SetQueryType(size_t type);
00158 void SetScoreType(size_t type);
00159 void SetMaxAge(unsigned int age);
00160 };
00161
00162 }
00163
00164 #endif