diff options
author | Ulrich Germann <Ulrich.Germann@gmail.com> | 2015-10-31 15:50:52 +0300 |
---|---|---|
committer | Ulrich Germann <Ulrich.Germann@gmail.com> | 2015-10-31 15:50:52 +0300 |
commit | 324c378f7fc54f02a8ea264915d3eade867ff23d (patch) | |
tree | 2bb934fee448845b0524427d437c871e7118ac2c /moses/server | |
parent | dc8ad899454bd82408c6a371d5f50e497ede0caa (diff) |
Options refactoring. Moses crashed in server mode when asked to provide n-best translations with scores.
Diffstat (limited to 'moses/server')
-rw-r--r-- | moses/server/TranslationRequest.cpp | 67 | ||||
-rw-r--r-- | moses/server/TranslationRequest.h | 4 |
2 files changed, 42 insertions, 29 deletions
diff --git a/moses/server/TranslationRequest.cpp b/moses/server/TranslationRequest.cpp index 09d21c322..085d16622 100644 --- a/moses/server/TranslationRequest.cpp +++ b/moses/server/TranslationRequest.cpp @@ -25,8 +25,7 @@ using Moses::Sentence; boost::shared_ptr<TranslationRequest> TranslationRequest:: create(Translator* translator, xmlrpc_c::paramList const& paramList, - boost::condition_variable& cond, - boost::mutex& mut) + boost::condition_variable& cond, boost::mutex& mut) { boost::shared_ptr<TranslationRequest> ret; ret.reset(new TranslationRequest(paramList, cond, mut)); @@ -60,10 +59,9 @@ Run() Moses::StaticData const& SD = Moses::StaticData::Instance(); //Make sure alternative paths are retained, if necessary - if (m_withGraphInfo || m_nbestSize>0) - // why on earth is this a global variable? Is this even thread-safe???? UG - (const_cast<Moses::StaticData&>(SD)).SetOutputSearchGraph(true); - + // if (m_withGraphInfo || m_nbestSize>0) + // why on earth is this a global variable? Is this even thread-safe???? UG + // (const_cast<Moses::StaticData&>(SD)).SetOutputSearchGraph(true); // std::stringstream out, graphInfo, transCollOpts; if (SD.IsSyntax()) @@ -170,7 +168,14 @@ outputNBest(const Manager& manager, map<string, xmlrpc_c::value>& retData) { TrellisPathList nBestList; vector<xmlrpc_c::value> nBestXml; - manager.CalcNBest(m_nbestSize, nBestList, m_nbestDistinct); + manager.CalcNBest(m_options.nbest.nbest_size, nBestList, + m_options.nbest.only_distinct); + + StaticData const& SD = StaticData::Instance(); + manager.OutputNBest(cout, nBestList, + SD.GetOutputFactorOrder(), + m_source->GetTranslationId(), + options().output.ReportSegmentation); BOOST_FOREACH(Moses::TrellisPath const* path, nBestList) { vector<const Hypothesis *> const& E = path->GetEdges(); @@ -180,7 +185,8 @@ outputNBest(const Manager& manager, map<string, xmlrpc_c::value>& retData) if (m_withScoreBreakdown) { // should the score breakdown be reported in a more structured manner? ostringstream buf; - path->GetScoreBreakdown()->OutputAllFeatureScores(buf); + bool with_labels = m_options.nbest.include_feature_labels; + path->GetScoreBreakdown()->OutputAllFeatureScores(buf, with_labels); nBestXmlItem["fvals"] = xmlrpc_c::value_string(buf.str()); } @@ -228,23 +234,23 @@ insertTranslationOptions(Moses::Manager& manager, retData["topt"] = xmlrpc_c::value_array(toptsXml); } -bool -check(std::map<std::string, xmlrpc_c::value> const& params, std::string const key) -{ - std::map<std::string, xmlrpc_c::value>::const_iterator m; - return (params.find(key) != params.end()); -} - TranslationRequest:: TranslationRequest(xmlrpc_c::paramList const& paramList, boost::condition_variable& cond, boost::mutex& mut) : m_cond(cond), m_mutex(mut), m_done(false), m_paramList(paramList) - , m_nbestSize(0) + // , m_nbestSize(0) , m_session_id(0) { m_options = StaticData::Instance().options(); } +bool +check(std::map<std::string, xmlrpc_c::value> const& param, + std::string const key) +{ + std::map<std::string, xmlrpc_c::value>::const_iterator m; + return (param.find(key) != param.end()); +} void TranslationRequest:: @@ -274,10 +280,9 @@ parse_request(std::map<std::string, xmlrpc_c::value> const& params) m_withWordAlignInfo = check(params, "word-align"); m_withGraphInfo = check(params, "sg"); m_withTopts = check(params, "topt"); - m_reportAllFactors = check(params, "report-all-factors"); - m_nbestDistinct = check(params, "nbest-distinct"); + // m_reportAllFactors = check(params, "report-all-factors"); + // m_nbestDistinct = check(params, "nbest-distinct"); m_withScoreBreakdown = check(params, "add-score-breakdown"); - m_source.reset(new Sentence(0,m_source_string)); si = params.find("lambda"); if (si != params.end()) { @@ -298,9 +303,9 @@ parse_request(std::map<std::string, xmlrpc_c::value> const& params) } } - si = params.find("nbest"); - if (si != params.end()) - m_nbestSize = xmlrpc_c::value_int(si->second); + // si = params.find("nbest"); + // if (si != params.end()) + // m_nbestSize = xmlrpc_c::value_int(si->second); si = params.find("context"); if (si != params.end()) @@ -309,6 +314,8 @@ parse_request(std::map<std::string, xmlrpc_c::value> const& params) VERBOSE(1,"CONTEXT " << context); m_context.reset(new std::vector<std::string>(1,context)); } + + // // biased sampling for suffix-array-based sampling phrase table? // if ((si = params.find("bias")) != params.end()) // { @@ -317,6 +324,7 @@ parse_request(std::map<std::string, xmlrpc_c::value> const& params) // for (size_t i = 1; i < tmp.size(); i += 2) // m_bias[xmlrpc_c::value_int(tmp[i-1])] = xmlrpc_c::value_double(tmp[i]); // } + m_source.reset(new Sentence(0,m_source_string,m_options)); } // end of Translationtask::parse_request() @@ -326,8 +334,8 @@ run_chart_decoder() { Moses::TreeInput tinput; istringstream buf(m_source_string + "\n"); - tinput.Read(buf, StaticData::Instance().GetInputFactorOrder()); - + tinput.Read(buf, StaticData::Instance().GetInputFactorOrder(), m_options); + Moses::ChartManager manager(this->self()); manager.Decode(); @@ -393,8 +401,13 @@ void TranslationRequest:: run_phrase_decoder() { + if (m_withGraphInfo || m_options.nbest.nbest_size>0) + m_options.output.SearchGraph = "true"; + Manager manager(this->self()); // if (m_bias.size()) manager.SetBias(&m_bias); + + manager.Decode(); pack_hypothesis(manager.GetBestHypothesis(), "text", m_retData); @@ -403,10 +416,10 @@ run_phrase_decoder() if (m_withGraphInfo) insertGraphInfo(manager,m_retData); if (m_withTopts) insertTranslationOptions(manager,m_retData); - if (m_nbestSize) outputNBest(manager, m_retData); + if (m_options.nbest.nbest_size) outputNBest(manager, m_retData); - (const_cast<StaticData&>(Moses::StaticData::Instance())) - .SetOutputSearchGraph(false); + // (const_cast<StaticData&>(Moses::StaticData::Instance())) + // .SetOutputSearchGraph(false); // WTF? one more reason not to have this as global variable! --- UG } diff --git a/moses/server/TranslationRequest.h b/moses/server/TranslationRequest.h index 866eca20e..9736a7a8f 100644 --- a/moses/server/TranslationRequest.h +++ b/moses/server/TranslationRequest.h @@ -43,9 +43,9 @@ TranslationRequest : public virtual Moses::TranslationTask bool m_withGraphInfo; bool m_withTopts; bool m_reportAllFactors; - bool m_nbestDistinct; + // bool m_nbestDistinct; bool m_withScoreBreakdown; - size_t m_nbestSize; + // size_t m_nbestSize; uint64_t m_session_id; // 0 means none, 1 means new |