Пример #1
0
    void
    execute(xmlrpc_c::paramList const& paramList,
            xmlrpc_c::value *   const  retvalP) {
#ifdef WITH_DLIB
        const params_t params = paramList.getStruct(0);
        params_t::const_iterator si = params.find("model_name");
        if (si == params.end()) {
            throw xmlrpc_c::fault(
                "Missing name of model to be optimized (e.g. PhraseDictionaryMultiModelCounts0)",
                xmlrpc_c::fault::CODE_PARSE);
        }
        const string model_name = xmlrpc_c::value_string(si->second);
        PhraseDictionaryMultiModel* pdmm = (PhraseDictionaryMultiModel*) FindPhraseDictionary(model_name);

        si = params.find("phrase_pairs");
        if (si == params.end()) {
            throw xmlrpc_c::fault(
                "Missing list of phrase pairs",
                xmlrpc_c::fault::CODE_PARSE);
        }

        vector<pair<string, string> > phrase_pairs;

        xmlrpc_c::value_array phrase_pairs_array = xmlrpc_c::value_array(si->second);
        vector<xmlrpc_c::value> phrasePairValueVector(phrase_pairs_array.vectorValueValue());
        for (size_t i=0; i < phrasePairValueVector.size(); i++) {
            xmlrpc_c::value_array phrasePairArray = xmlrpc_c::value_array(phrasePairValueVector[i]);
            vector<xmlrpc_c::value> phrasePair(phrasePairArray.vectorValueValue());
            string L1 = xmlrpc_c::value_string(phrasePair[0]);
            string L2 = xmlrpc_c::value_string(phrasePair[1]);
            phrase_pairs.push_back(make_pair(L1,L2));
        }

        vector<float> weight_vector;
        weight_vector = pdmm->MinimizePerplexity(phrase_pairs);

        vector<xmlrpc_c::value> weight_vector_ret;
        for (size_t i=0; i < weight_vector.size(); i++) {
            weight_vector_ret.push_back(xmlrpc_c::value_double(weight_vector[i]));
        }
        *retvalP = xmlrpc_c::value_array(weight_vector_ret);
#else
        string errmsg = "Error: Perplexity minimization requires dlib (compilation option --with-dlib)";
        cerr << errmsg << endl;
        *retvalP = xmlrpc_c::value_string(errmsg);
#endif
    }
Пример #2
0
 void breakOutParams(const params_t& params) {
     params_t::const_iterator si = params.find("source");
     if(si == params.end())
         throw xmlrpc_c::fault("Missing source sentence", xmlrpc_c::fault::CODE_PARSE);
     source_ = xmlrpc_c::value_string(si->second);
     cerr << "source = " << source_ << endl;
     si = params.find("target");
     if(si == params.end())
         throw xmlrpc_c::fault("Missing target sentence", xmlrpc_c::fault::CODE_PARSE);
     target_ = xmlrpc_c::value_string(si->second);
     cerr << "target = " << target_ << endl;
     si = params.find("alignment");
     if(si == params.end())
         throw xmlrpc_c::fault("Missing alignment", xmlrpc_c::fault::CODE_PARSE);
     alignment_ = xmlrpc_c::value_string(si->second);
     cerr << "alignment = " << alignment_ << endl;
     si = params.find("bounded");
     bounded_ = (si != params.end());
     si = params.find("updateORLM");
     add2ORLM_ = (si != params.end());
 }
Пример #3
0
    void
    execute(xmlrpc_c::paramList const& paramList,
            xmlrpc_c::value *   const  retvalP) {

        const params_t params = paramList.getStruct(0);
        paramList.verifyEnd(1);
        params_t::const_iterator si = params.find("text");
        if (si == params.end()) {
            throw xmlrpc_c::fault(
                "Missing source text",
                xmlrpc_c::fault::CODE_PARSE);
        }
        const string source(
            (xmlrpc_c::value_string(si->second)));

        cerr << "Input: " << source << endl;
        si = params.find("align");
        bool addAlignInfo = (si != params.end());
        si = params.find("sg");
        bool addGraphInfo = (si != params.end());
        si = params.find("topt");
        bool addTopts = (si != params.end());
        si = params.find("report-all-factors");
        bool reportAllFactors = (si != params.end());
        si = params.find("nbest");
        int nbest_size = (si == params.end()) ? 0 : int(xmlrpc_c::value_int(si->second));
        si = params.find("nbest-distinct");
        bool nbest_distinct = (si != params.end());

        vector<float> multiModelWeights;
        si = params.find("lambda");
        if (si != params.end()) {
            xmlrpc_c::value_array multiModelArray = xmlrpc_c::value_array(si->second);
            vector<xmlrpc_c::value> multiModelValueVector(multiModelArray.vectorValueValue());
            for (size_t i=0; i < multiModelValueVector.size(); i++) {
                multiModelWeights.push_back(xmlrpc_c::value_double(multiModelValueVector[i]));
            }
        }

        const StaticData &staticData = StaticData::Instance();

        if (addGraphInfo) {
            (const_cast<StaticData&>(staticData)).SetOutputSearchGraph(true);
        }

        if (multiModelWeights.size() > 0) {
            PhraseDictionaryMultiModel* pdmm = (PhraseDictionaryMultiModel*) staticData.GetPhraseDictionaries()[0]; //TODO: only works if multimodel is first phrase table
            pdmm->SetTemporaryMultiModelWeightsVector(multiModelWeights);
        }

        stringstream out, graphInfo, transCollOpts;
        map<string, xmlrpc_c::value> retData;

        if (staticData.IsChart()) {
            TreeInput tinput;
            const vector<FactorType> &inputFactorOrder =
                staticData.GetInputFactorOrder();
            stringstream in(source + "\n");
            tinput.Read(in,inputFactorOrder);
            ChartManager manager(tinput);
            manager.ProcessSentence();
            const ChartHypothesis *hypo = manager.GetBestHypothesis();
            outputChartHypo(out,hypo);
        } else {
            Sentence sentence;
            const vector<FactorType> &inputFactorOrder =
                staticData.GetInputFactorOrder();
            stringstream in(source + "\n");
            sentence.Read(in,inputFactorOrder);
            size_t lineNumber = 0; // TODO: Include sentence request number here?
            Manager manager(lineNumber, sentence, staticData.GetSearchAlgorithm());
            manager.ProcessSentence();
            const Hypothesis* hypo = manager.GetBestHypothesis();

            vector<xmlrpc_c::value> alignInfo;
            outputHypo(out,hypo,addAlignInfo,alignInfo,reportAllFactors);
            if (addAlignInfo) {
                retData.insert(pair<string, xmlrpc_c::value>("align", xmlrpc_c::value_array(alignInfo)));
            }

            if(addGraphInfo) {
                insertGraphInfo(manager,retData);
                (const_cast<StaticData&>(staticData)).SetOutputSearchGraph(false);
            }
            if (addTopts) {
                insertTranslationOptions(manager,retData);
            }
            if (nbest_size>0) {
                outputNBest(manager, retData, nbest_size, nbest_distinct, reportAllFactors);
            }
        }
        pair<string, xmlrpc_c::value>
        text("text", xmlrpc_c::value_string(out.str()));
        retData.insert(text);
        cerr << "Output: " << out.str() << endl;
        *retvalP = xmlrpc_c::value_struct(retData);
    }