// #include "StaticData.h" #include "SyntacticLanguageModel.h" #include "HHMMLangModel-gf.h" #include "TextObsModel.h" #include "SyntacticLanguageModelFiles.h" #include "SyntacticLanguageModelState.h" namespace Moses { // asnteousntaoheisnthaoesntih SyntacticLanguageModel::SyntacticLanguageModel(const std::vector& filePath, const std::vector& weights, const FactorType factorType, size_t beamWidth) // Initialize member variables : m_NumScoreComponents(weights.size()) , m_files(new SyntacticLanguageModelFiles(filePath)) , m_factorType(factorType) , m_beamWidth(beamWidth) { // Inform Moses score manager of this feature and its weight(s) const_cast(StaticData::Instance().GetScoreIndexManager()).AddScoreProducer(this); const_cast(StaticData::Instance()).SetWeightsForScoreProducer(this, weights); VERBOSE(3,"Constructed SyntacticLanguageModel" << endl); } SyntacticLanguageModel::~SyntacticLanguageModel() { VERBOSE(3,"Destructing SyntacticLanguageModel" << std::endl); delete m_files; } size_t SyntacticLanguageModel::GetNumScoreComponents() const { return m_NumScoreComponents; } std::string SyntacticLanguageModel::GetScoreProducerDescription(unsigned) const { return "Syntactic Language Model"; } std::string SyntacticLanguageModel::GetScoreProducerWeightShortName(unsigned) const { return "slm"; } const FFState* SyntacticLanguageModel::EmptyHypothesisState(const InputType &input) const { return new SyntacticLanguageModelState(m_files,m_beamWidth); } /* double SyntacticLanguageModel::perplexity() { SyntacticLanguageModelState *prev = new SyntacticLanguageModelState(m_files,m_beamWidth); std::cerr << "Initial prob:" << "\t" << prev->getProb() < words(3); words[0] = "no"; words[1] = ","; words[2] = "zxvth"; for (std::vector::iterator i=words.begin(); i != words.end(); i++) { prev = new SyntacticLanguageModelState(prev, *i); std::cerr << *i << "\t" << prev->getProb() <getProb(); } */ FFState* SyntacticLanguageModel::Evaluate(const Hypothesis& cur_hypo, const FFState* prev_state, ScoreComponentCollection* accumulator) const { VERBOSE(3,"Evaluating SyntacticLanguageModel for a hypothesis" << endl); SyntacticLanguageModelState* tmpState = NULL; SyntacticLanguageModelState* nextState = NULL; const TargetPhrase& targetPhrase = cur_hypo.GetCurrTargetPhrase(); for (size_t i=0, n=targetPhrase.GetSize(); iGetString(); if (i==0) { nextState = new SyntacticLanguageModelState((const SyntacticLanguageModelState*)prev_state, string); } else { tmpState = nextState; nextState = new SyntacticLanguageModelState(tmpState, string); delete tmpState; } double score = nextState->getScore(); VERBOSE(3,"SynLM evaluated a score of " << score << endl); accumulator->Assign( this, score ); } return nextState; } }