From c4fc7e6610c5dd7ea94984aea63cfb1c88eac0c9 Mon Sep 17 00:00:00 2001 From: Ulrich Germann Date: Fri, 7 Aug 2015 19:17:37 +0100 Subject: [PATCH] Update some options via xmlrpc_c calls. --- moses/parameters/AllOptions.cpp | 19 ++++++ moses/parameters/AllOptions.h | 9 ++- moses/parameters/BeamSearchOptions.h | 3 +- moses/parameters/BookkeepingOptions.h | 5 +- moses/parameters/ContextParameters.h | 3 +- moses/parameters/CubePruningOptions.cpp | 35 +++++++++- moses/parameters/CubePruningOptions.h | 8 ++- moses/parameters/InputOptions.h | 4 +- moses/parameters/LMBR_Options.h | 3 +- moses/parameters/LookupOptions.h | 17 +++++ moses/parameters/MBR_Options.h | 3 +- moses/parameters/NBestOptions.h | 3 +- moses/parameters/OptionsBaseClass.cpp | 15 +++++ moses/parameters/OptionsBaseClass.h | 17 +++++ moses/parameters/ReorderingOptions.h | 3 +- moses/parameters/ReportingOptions.cpp | 90 +++++++++++++++++++++++++ moses/parameters/ReportingOptions.h | 42 ++++++++++++ moses/parameters/SearchOptions.cpp | 39 ++++++++++- moses/parameters/SearchOptions.h | 11 ++- moses/server/TranslationRequest.cpp | 2 + 20 files changed, 316 insertions(+), 15 deletions(-) create mode 100644 moses/parameters/LookupOptions.h create mode 100644 moses/parameters/OptionsBaseClass.cpp create mode 100644 moses/parameters/OptionsBaseClass.h create mode 100644 moses/parameters/ReportingOptions.cpp create mode 100644 moses/parameters/ReportingOptions.h diff --git a/moses/parameters/AllOptions.cpp b/moses/parameters/AllOptions.cpp index fd4417fca..11a9e3cb8 100644 --- a/moses/parameters/AllOptions.cpp +++ b/moses/parameters/AllOptions.cpp @@ -53,4 +53,23 @@ namespace Moses return true; } + +#ifdef HAVE_XMLRPC_C + bool + AllOptions:: + update(std::mapconst& param) + { + if (!search.update(param)) return false; + if (!cube.update(param)) return false; + if (!nbest.update(param)) return false; + if (!reordering.update(param)) return false; + if (!context.update(param)) return false; + if (!input.update(param)) return false; + if (!mbr.update(param)) return false; + if (!lmbr.update(param)) return false; + return sanity_check(); + } +#endif + + } diff --git a/moses/parameters/AllOptions.h b/moses/parameters/AllOptions.h index 9fa3bc514..5f9949a76 100644 --- a/moses/parameters/AllOptions.h +++ b/moses/parameters/AllOptions.h @@ -2,6 +2,7 @@ #pragma once #include #include "moses/Parameter.h" +#include "OptionsBaseClass.h" #include "SearchOptions.h" #include "CubePruningOptions.h" #include "NBestOptions.h" @@ -10,11 +11,10 @@ #include "InputOptions.h" #include "MBR_Options.h" #include "LMBR_Options.h" - namespace Moses { struct - AllOptions + AllOptions : public OptionsBaseClass { SearchOptions search; CubePruningOptions cube; @@ -33,6 +33,11 @@ namespace Moses bool sanity_check(); AllOptions() {} AllOptions(Parameter const& param); + +#ifdef HAVE_XMLRPC_C + bool update(std::mapconst& param); +#endif + }; } diff --git a/moses/parameters/BeamSearchOptions.h b/moses/parameters/BeamSearchOptions.h index 85a8d5a64..90fc00803 100644 --- a/moses/parameters/BeamSearchOptions.h +++ b/moses/parameters/BeamSearchOptions.h @@ -2,11 +2,12 @@ #pragma once #include #include "moses/Parameter.h" +#include "OptionsBaseClass.h" namespace Moses { struct - BeamSearchOptions + BeamSearchOptions : public OptionsBaseClass { bool init(Parameter const& param); BeamSearchOptions(Parameter const& param); diff --git a/moses/parameters/BookkeepingOptions.h b/moses/parameters/BookkeepingOptions.h index 331f0b83c..0fd046766 100644 --- a/moses/parameters/BookkeepingOptions.h +++ b/moses/parameters/BookkeepingOptions.h @@ -1,9 +1,12 @@ // -*- mode: c++; indent-tabs-mode: nil; tab-width: 2 -*- #include "moses/Parameter.h" +#include "OptionsBaseClass.h" + namespace Moses { - struct BookkeepingOptions { + struct BookkeepingOptions : public OptionsBaseClass + { bool need_alignment_info; bool init(Parameter const& param); }; diff --git a/moses/parameters/ContextParameters.h b/moses/parameters/ContextParameters.h index 280d3795e..6bd8fe738 100644 --- a/moses/parameters/ContextParameters.h +++ b/moses/parameters/ContextParameters.h @@ -4,11 +4,12 @@ #include "moses/Parameter.h" #include "moses/TypeDef.h" #include "moses/Util.h" +#include "OptionsBaseClass.h" namespace Moses { -class ContextParameters +class ContextParameters : public OptionsBaseClass { public: ContextParameters(); diff --git a/moses/parameters/CubePruningOptions.cpp b/moses/parameters/CubePruningOptions.cpp index 0c2bc9b4c..a8710c681 100644 --- a/moses/parameters/CubePruningOptions.cpp +++ b/moses/parameters/CubePruningOptions.cpp @@ -1,4 +1,4 @@ -// -*- mode: c++; cc-style: gnu -*- +// -*- mode: c++; indent-tabs-mode: nil; tab-width: 2 -*- #include "CubePruningOptions.h" namespace Moses @@ -16,4 +16,37 @@ namespace Moses return true; } +#ifdef HAVE_XMLRPC_C + bool + CubePruningOptions:: + update(std::mapconst& params) + { + typedef std::map params_t; + + params_t::const_iterator si = params.find("cube-pruning-pop-limit"); + if (si != params.end()) pop_limit = xmlrpc_c::value_int(si->second); + + si = params.find("cube-pruning-diversity"); + if (si != params.end()) diversity = xmlrpc_c::value_int(si->second); + + si = params.find("cube-pruning-lazy-scoring"); + if (si != params.end()) + { + std::string spec = xmlrpc_c::value_string(si->second); + if (spec == "true" or spec == "on" or spec == "1") + lazy_scoring = true; + else if (spec == "false" or spec == "off" or spec == "0") + lazy_scoring = false; + else + { + char const* msg + = "Error parsing specification for cube-pruning-lazy-scoring"; + xmlrpc_c::fault(msg, xmlrpc_c::fault::CODE_PARSE); + } + } + return true; + } +#endif + + } diff --git a/moses/parameters/CubePruningOptions.h b/moses/parameters/CubePruningOptions.h index 29959f4fe..5d27be6a9 100644 --- a/moses/parameters/CubePruningOptions.h +++ b/moses/parameters/CubePruningOptions.h @@ -2,11 +2,12 @@ #pragma once #include #include "moses/Parameter.h" +#include "OptionsBaseClass.h" namespace Moses { struct - CubePruningOptions + CubePruningOptions : public OptionsBaseClass { size_t pop_limit; size_t diversity; @@ -15,6 +16,11 @@ namespace Moses bool init(Parameter const& param); CubePruningOptions(Parameter const& param); CubePruningOptions() {}; + +#ifdef HAVE_XMLRPC_C + bool + update(std::mapconst& params); +#endif }; } diff --git a/moses/parameters/InputOptions.h b/moses/parameters/InputOptions.h index c5379bfae..f81ea06eb 100644 --- a/moses/parameters/InputOptions.h +++ b/moses/parameters/InputOptions.h @@ -3,10 +3,12 @@ #include #include "moses/Parameter.h" #include +#include "OptionsBaseClass.h" + namespace Moses { struct - InputOptions + InputOptions : public OptionsBaseClass { bool continue_partial_translation; bool default_non_term_only_for_empty_range; // whatever that means diff --git a/moses/parameters/LMBR_Options.h b/moses/parameters/LMBR_Options.h index 29dee3c2e..54fd0fcd0 100644 --- a/moses/parameters/LMBR_Options.h +++ b/moses/parameters/LMBR_Options.h @@ -3,12 +3,13 @@ #include #include #include "moses/Parameter.h" +#include "OptionsBaseClass.h" namespace Moses { // Options for mimum bayes risk decoding struct - LMBR_Options + LMBR_Options : public OptionsBaseClass { bool enabled; bool use_lattice_hyp_set; //! to use nbest as hypothesis set during lattice MBR diff --git a/moses/parameters/LookupOptions.h b/moses/parameters/LookupOptions.h new file mode 100644 index 000000000..3332f951d --- /dev/null +++ b/moses/parameters/LookupOptions.h @@ -0,0 +1,17 @@ +// -*- mode: c++; indent-tabs-mode: nil; tab-width: 2 -*- +#pragma once +#include +#include "moses/Parameter.h" +#include "OptionsBaseClass.h" +namespace Moses +{ + + struct + LookupOptions : public OptionsBaseClass + { + bool init(Parameter const& param); + ReorderingOptions() {} + }; + +} + diff --git a/moses/parameters/MBR_Options.h b/moses/parameters/MBR_Options.h index 56d5b34c1..0462ebc0f 100644 --- a/moses/parameters/MBR_Options.h +++ b/moses/parameters/MBR_Options.h @@ -2,12 +2,13 @@ #pragma once #include #include "moses/Parameter.h" +#include "OptionsBaseClass.h" namespace Moses { // Options for mimum bayes risk decoding struct - MBR_Options + MBR_Options : public OptionsBaseClass { bool enabled; size_t size; //! number of translation candidates considered diff --git a/moses/parameters/NBestOptions.h b/moses/parameters/NBestOptions.h index 894c35d1c..61e3c9806 100644 --- a/moses/parameters/NBestOptions.h +++ b/moses/parameters/NBestOptions.h @@ -1,10 +1,11 @@ // -*- mode: c++; indent-tabs-mode: nil; tab-width: 2 -*- #pragma once #include +#include "OptionsBaseClass.h" namespace Moses { -struct NBestOptions +struct NBestOptions : public OptionsBaseClass { size_t nbest_size; size_t factor; diff --git a/moses/parameters/OptionsBaseClass.cpp b/moses/parameters/OptionsBaseClass.cpp new file mode 100644 index 000000000..e0b23babf --- /dev/null +++ b/moses/parameters/OptionsBaseClass.cpp @@ -0,0 +1,15 @@ +// -*- mode: c++; indent-tabs-mode: nil; tab-width: 2 -*- +#include "OptionsBaseClass.h" + +namespace Moses +{ +#ifdef HAVE_XMLRPC_C + bool + OptionsBaseClass:: + update(std::mapconst& params) + { + return true; + } +#endif + +} diff --git a/moses/parameters/OptionsBaseClass.h b/moses/parameters/OptionsBaseClass.h new file mode 100644 index 000000000..cb62467cf --- /dev/null +++ b/moses/parameters/OptionsBaseClass.h @@ -0,0 +1,17 @@ +// -*- mode: c++; indent-tabs-mode: nil; tab-width: 2 -*- +#pragma once +#ifdef HAVE_XMLRPC_C +#include +#endif +#include +#include +namespace Moses +{ + struct OptionsBaseClass + { +#ifdef HAVE_XMLRPC_C + virtual bool + update(std::mapconst& params); +#endif + }; +} diff --git a/moses/parameters/ReorderingOptions.h b/moses/parameters/ReorderingOptions.h index e18c7deab..f10fc4973 100644 --- a/moses/parameters/ReorderingOptions.h +++ b/moses/parameters/ReorderingOptions.h @@ -2,11 +2,12 @@ #pragma once #include #include "moses/Parameter.h" +#include "OptionsBaseClass.h" namespace Moses { struct - ReorderingOptions + ReorderingOptions : public OptionsBaseClass { int max_distortion; bool monotone_at_punct; diff --git a/moses/parameters/ReportingOptions.cpp b/moses/parameters/ReportingOptions.cpp new file mode 100644 index 000000000..25ae2f779 --- /dev/null +++ b/moses/parameters/ReportingOptions.cpp @@ -0,0 +1,90 @@ +// -*- mode: c++; indent-tabs-mode: nil; tab-width: 2 -*- +#if 0 +#include "ReportingOptions.h" +#include "moses/Parameter.h" + +namespace Moses { + using namespace std; + bool + ReportingOptions:: + init(Parameter const& param) + { + PARAM_VEC const* params; + + param.SetParameter(segmentation, "report-segmentation", false ); + param.SetParameter(segmentation_enriched, "report-segmentation-enriched", false); + param.SetParameter(all_factors, "report-all-factors", false ); + + // print ... + param.SetParameter(id, "print-id", false ); + param.SetParameter(aln_info, "print-alignment-info", false); + param.SetParameter(passthrough, "print-passthrough", false ); + + param.SetParameter(detailed_transrep_filepath, "translation-details", ""); + param.SetParameter(detailed_tree_transrep_filepath, + "tree-translation-details", ""); + param.SetParameter(detailed_all_transrep_filepath, + "translation-all-details", ""); + + // output search graph + param.SetParameter(output, + "translation-all-details", ""); + + + + param.SetParameter(sort_word_alignment, "sort-word-alignment", NoSort); + + + // Is there a reason why we can't use SetParameter here? [UG] + = param.GetParam("alignment-output-file"); + if (params && params->size()) { + m_alignmentOutputFile = Scan(params->at(0)); + } + + params = param.GetParam("output-word-graph"); + output_word_graph = (params && params->size() == 2); + + // bizarre code ahead! Why do we need to do the checks here? + // as adapted from StaticData.cpp + params = param.GetParam("output-search-graph"); + if (params && params->size()) { + if (params->size() != 1) { + std::cerr << "ERROR: wrong format for switch -output-search-graph file"; + return false; + } + output_search_graph = true; + } + else if (m_parameter->GetParam("output-search-graph-extended") && + m_parameter->GetParam("output-search-graph-extended")->size()) { + if (m_parameter->GetParam("output-search-graph-extended")->size() != 1) { + std::cerr << "ERROR: wrong format for switch -output-search-graph-extended file"; + return false; + } + output_search_graph = true; + m_outputSearchGraphExtended = true; + } else { + m_outputSearchGraph = false; + } + + params = m_parameter->GetParam("output-search-graph-slf"); + output_search_graph_slf = params && params->size(); + params = m_parameter->GetParam("output-search-graph-hypergraph"); + output_search_graph_hypergraph = params && params->size(); + +#ifdef HAVE_PROTOBUF + params = m_parameter->GetParam("output-search-graph-pb"); + if (params && params->size()) { + if (params->size() != 1) { + cerr << "ERROR: wrong format for switch -output-search-graph-pb path"; + return false; + } + m_outputSearchGraphPB = true; + } else + m_outputSearchGraphPB = false; +#endif + + + return true; + } +} +#endif diff --git a/moses/parameters/ReportingOptions.h b/moses/parameters/ReportingOptions.h new file mode 100644 index 000000000..343bd58ec --- /dev/null +++ b/moses/parameters/ReportingOptions.h @@ -0,0 +1,42 @@ +// -*- mode: c++; indent-tabs-mode: nil; tab-width: 2 -*- +#pragma once +#include +#include "moses/Parameter.h" +namespace Moses +{ + + struct + ReportingOptions + { + + WordAlignmentSort sort_word_alignment; // 0: no, 1: target order + + + bool segmentation; // m_reportSegmentation; + bool segmentation_enriched; // m_reportSegmentationEnriched; + bool all_factors; // m_reportAllFactors; + + bool output_word_graph; + bool output_search_graph; + bool output_search_graph_extended; + bool output_search_graph_slf; + bool output_search_graph_hypergraph; + bool output_search_graph_protobuf; + + // print .. + bool aln_info; // m_PrintAlignmentInfo; + bool id; // m_PrintID; + bool passthrough; // m_PrintPassthroughInformation; + + // transrep = translation reporting + std::string detailed_transrep_filepath; + std::string detailed_tree_transrep_filepath; + std::string detailed_all_transrep_filepath; + + std::string aln_output_file; // m_alignmentOutputFile; + + bool init(Parameter const& param); + }; + +} + diff --git a/moses/parameters/SearchOptions.cpp b/moses/parameters/SearchOptions.cpp index 7f9c2e748..b75b0f15b 100644 --- a/moses/parameters/SearchOptions.cpp +++ b/moses/parameters/SearchOptions.cpp @@ -30,7 +30,6 @@ namespace Moses param.SetParameter(max_partial_trans_opt, "max-partial-trans-opt", DEFAULT_MAX_PART_TRANS_OPT_SIZE); - param.SetParameter(consensus, "consensus-decoding", false); // transformation to log of a few scores @@ -48,5 +47,43 @@ namespace Moses algo == SyntaxF2S || algo == SyntaxT2S_SCFG); } +#ifdef HAVE_XMLRPC_C + bool + SearchOptions:: + update(std::mapconst& params) + { + typedef std::map params_t; + + params_t::const_iterator si = params.find("search-algoritm"); + if (si != params.end()) + { + // use named parameters + std::string spec = xmlrpc_c::value_string(si->second); + if (spec == "normal" || spec == "0") algo = Normal; + else if (spec == "cube" || spec == "1") algo = CubePruning; + else throw xmlrpc_c::fault("Unsupported search algorithm", + xmlrpc_c::fault::CODE_PARSE); + } + + si = params.find("stack"); + if (si != params.end()) stack_size = xmlrpc_c::value_int(si->second); + + si = params.find("stack-diversity"); + if (si != params.end()) stack_diversity = xmlrpc_c::value_int(si->second); + + si = params.find("beam-threshold"); + if (si != params.end()) beam_width = xmlrpc_c::value_double(si->second); + + si = params.find("time-out"); + if (si != params.end()) timeout = xmlrpc_c::value_int(si->second); + + si = params.find("max-phrase-length"); + if (si != params.end()) max_phrase_length = xmlrpc_c::value_int(si->second); + + return true; + } +#endif + + } diff --git a/moses/parameters/SearchOptions.h b/moses/parameters/SearchOptions.h index 1df9d034b..2b2f39a65 100644 --- a/moses/parameters/SearchOptions.h +++ b/moses/parameters/SearchOptions.h @@ -2,13 +2,14 @@ #pragma once #include #include "moses/Parameter.h" +#include "OptionsBaseClass.h" namespace Moses { bool is_syntax(SearchAlgorithm algo); struct - SearchOptions + SearchOptions : public OptionsBaseClass { SearchAlgorithm algo; @@ -37,10 +38,16 @@ namespace Moses SearchOptions(Parameter const& param); SearchOptions() {} - bool UseEarlyDiscarding() const { + bool + UseEarlyDiscarding() const { return early_discarding_threshold != -std::numeric_limits::infinity(); } +#ifdef HAVE_XMLRPC_C + bool + update(std::mapconst& params); +#endif + }; } diff --git a/moses/server/TranslationRequest.cpp b/moses/server/TranslationRequest.cpp index 454ac8a65..b05330d2b 100644 --- a/moses/server/TranslationRequest.cpp +++ b/moses/server/TranslationRequest.cpp @@ -246,6 +246,8 @@ parse_request(std::map const& params) // params_t const params = m_paramList.getStruct(0); m_paramList.verifyEnd(1); // ??? UG + m_options.update(params); + // source text must be given, or we don't know what to translate typedef std::map params_t; params_t::const_iterator si = params.find("text");