Welcome to mirror list, hosted at ThFree Co, Russian Federation.

Optimizer.cpp « server « moses - github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 8e5babfc7fe5505e03a162fca5817e8c406cfce8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "Optimizer.h"
#include <iostream>

namespace MosesServer
{
using namespace std;

Optimizer::
Optimizer()
{
  // signature and help strings are documentation -- the client
  // can query this information with a system.methodSignature and
  // system.methodHelp RPC.
  this->_signature = "S:S";
  this->_help = "Optimizes multi-model translation model";
}

void
Optimizer::
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;
  if ((si  = params.find("model_name")) == params.end()) {
    string msg = "Missing name of model to be optimized";
    msg += " (e.g. PhraseDictionaryMultiModelCounts0)";
    throw xmlrpc_c::fault(msg, xmlrpc_c::fault::CODE_PARSE);
  }
  const string model_name = xmlrpc_c::value_string(si->second);

  if ((si = params.find("phrase_pairs")) == 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 pp_array = xmlrpc_c::value_array(si->second);
  vector<xmlrpc_c::value> ppValVec(pp_array.vectorValueValue());
  for (size_t i = 0; i < ppValVec.size(); ++i) {
    xmlrpc_c::value_array pp_array
    = xmlrpc_c::value_array(ppValVec[i]);
    vector<xmlrpc_c::value> pp(pp_array.vectorValueValue());
    string L1 = xmlrpc_c::value_string(pp[0]);
    string L2 = xmlrpc_c::value_string(pp[1]);
    phrase_pairs.push_back(make_pair(L1,L2));
  }

  // PhraseDictionaryMultiModel* pdmm
  // = (PhraseDictionaryMultiModel*) FindPhraseDictionary(model_name);
  PhraseDictionaryMultiModel* pdmm = FindPhraseDictionary(model_name);
  vector<float> 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 ";
  errmsg += "(compilation option --with-dlib)";
  std::cerr << errmsg << std::endl;
  *retvalP = xmlrpc_c::value_string(errmsg);
#endif
}
}