diff options
Diffstat (limited to 'gi')
| -rw-r--r-- | gi/pf/base_distributions.cc | 22 | ||||
| -rw-r--r-- | gi/pf/base_distributions.h | 21 | ||||
| -rw-r--r-- | gi/pf/conditional_pseg.h | 3 | ||||
| -rw-r--r-- | gi/pf/pfdist.cc | 6 | ||||
| -rw-r--r-- | gi/pf/pfnaive.cc | 4 | 
5 files changed, 20 insertions, 36 deletions
| diff --git a/gi/pf/base_distributions.cc b/gi/pf/base_distributions.cc index d362fd76..d9761005 100644 --- a/gi/pf/base_distributions.cc +++ b/gi/pf/base_distributions.cc @@ -59,7 +59,7 @@ prob_t PhraseConditionalUninformativeUnigramBase::p0(const vector<WordID>& vsrc,    const int flen = vsrc.size() - start_src;    const int elen = vtrg.size() - start_trg;    prob_t p; -  p.logeq(log_poisson(elen, flen + 0.01));       // elen | flen          ~Pois(flen + 0.01) +  p.logeq(Md::log_poisson(elen, flen + 0.01));       // elen | flen          ~Pois(flen + 0.01)    //p.logeq(log_poisson(elen, 1));       // elen | flen          ~Pois(flen + 0.01)    for (int i = 0; i < elen; ++i)      p *= u(vtrg[i + start_trg]);                        // draw e_i             ~Uniform @@ -73,7 +73,7 @@ prob_t PhraseConditionalUninformativeBase::p0(const vector<WordID>& vsrc,    const int elen = vtrg.size() - start_trg;    prob_t p;    //p.logeq(log_poisson(elen, flen + 0.01));       // elen | flen          ~Pois(flen + 0.01) -  p.logeq(log_poisson(elen, 1));       // elen | flen          ~Pois(flen + 0.01) +  p.logeq(Md::log_poisson(elen, 1));       // elen | flen          ~Pois(flen + 0.01)    for (int i = 0; i < elen; ++i)      p *= kUNIFORM_TARGET;                        // draw e_i             ~Uniform    return p; @@ -113,7 +113,7 @@ prob_t PhraseConditionalBase::p0(const vector<WordID>& vsrc,    const int elen = vtrg.size() - start_trg;    prob_t uniform_src_alignment; uniform_src_alignment.logeq(-log(flen + 1));    prob_t p; -  p.logeq(log_poisson(elen, flen + 0.01));       // elen | flen          ~Pois(flen + 0.01) +  p.logeq(Md::log_poisson(elen, flen + 0.01));       // elen | flen          ~Pois(flen + 0.01)    for (int i = 0; i < elen; ++i) {               // for each position i in e-RHS      const WordID trg = vtrg[i + start_trg];      prob_t tp = prob_t::Zero(); @@ -139,9 +139,9 @@ prob_t PhraseJointBase::p0(const vector<WordID>& vsrc,    const int elen = vtrg.size() - start_trg;    prob_t uniform_src_alignment; uniform_src_alignment.logeq(-log(flen + 1));    prob_t p; -  p.logeq(log_poisson(flen, 1.0));               // flen                 ~Pois(1) +  p.logeq(Md::log_poisson(flen, 1.0));               // flen                 ~Pois(1)                                                   // elen | flen          ~Pois(flen + 0.01) -  prob_t ptrglen; ptrglen.logeq(log_poisson(elen, flen + 0.01)); +  prob_t ptrglen; ptrglen.logeq(Md::log_poisson(elen, flen + 0.01));    p *= ptrglen;    p *= kUNIFORM_SOURCE.pow(flen);                // each f in F ~Uniform    for (int i = 0; i < elen; ++i) {               // for each position i in E @@ -171,9 +171,9 @@ prob_t PhraseJointBase_BiDir::p0(const vector<WordID>& vsrc,    prob_t uniform_trg_alignment; uniform_trg_alignment.logeq(-log(elen + 1));    prob_t p1; -  p1.logeq(log_poisson(flen, 1.0));               // flen                 ~Pois(1) +  p1.logeq(Md::log_poisson(flen, 1.0));               // flen                 ~Pois(1)                                                   // elen | flen          ~Pois(flen + 0.01) -  prob_t ptrglen; ptrglen.logeq(log_poisson(elen, flen + 0.01)); +  prob_t ptrglen; ptrglen.logeq(Md::log_poisson(elen, flen + 0.01));    p1 *= ptrglen;    p1 *= kUNIFORM_SOURCE.pow(flen);                // each f in F ~Uniform    for (int i = 0; i < elen; ++i) {               // for each position i in E @@ -193,9 +193,9 @@ prob_t PhraseJointBase_BiDir::p0(const vector<WordID>& vsrc,    }    prob_t p2; -  p2.logeq(log_poisson(elen, 1.0));               // elen                 ~Pois(1) +  p2.logeq(Md::log_poisson(elen, 1.0));               // elen                 ~Pois(1)                                                   // flen | elen          ~Pois(flen + 0.01) -  prob_t psrclen; psrclen.logeq(log_poisson(flen, elen + 0.01)); +  prob_t psrclen; psrclen.logeq(Md::log_poisson(flen, elen + 0.01));    p2 *= psrclen;    p2 *= kUNIFORM_TARGET.pow(elen);                // each f in F ~Uniform    for (int i = 0; i < flen; ++i) {               // for each position i in E @@ -227,9 +227,9 @@ JumpBase::JumpBase() : p(200) {      for (int j = min_jump; j <= max_jump; ++j) {        prob_t& cp = cpd[j];        if (j < 0) -        cp.logeq(log_poisson(1.5-j, 1)); +        cp.logeq(Md::log_poisson(1.5-j, 1));        else if (j > 0) -        cp.logeq(log_poisson(j, 1)); +        cp.logeq(Md::log_poisson(j, 1));        cp.poweq(0.2);        z += cp;      } diff --git a/gi/pf/base_distributions.h b/gi/pf/base_distributions.h index a23ac32b..0d597c5c 100644 --- a/gi/pf/base_distributions.h +++ b/gi/pf/base_distributions.h @@ -13,24 +13,7 @@  #include "prob.h"  #include "tdict.h"  #include "sampler.h" - -inline double log_poisson(unsigned x, const double& lambda) { -  assert(lambda > 0.0); -  return log(lambda) * x - lgamma(x + 1) - lambda; -} - -inline double log_binom_coeff(unsigned n, unsigned k) { -  assert(n >= k); -  if (n == k) return 0.0; -  return lgamma(n + 1) - lgamma(k + 1) - lgamma(n - k + 1); -} - -// http://en.wikipedia.org/wiki/Negative_binomial_distribution -inline double log_negative_binom(unsigned x, unsigned r, double p) { -  assert(p > 0.0); -  assert(p < 1.0); -  return log_binom_coeff(x + r - 1, x) + r * log(1 - p) + x * log(p); -} +#include "m.h"  inline std::ostream& operator<<(std::ostream& os, const std::vector<WordID>& p) {    os << '['; @@ -68,7 +51,7 @@ struct Model1 {  struct PoissonUniformUninformativeBase {    explicit PoissonUniformUninformativeBase(const unsigned ves) : kUNIFORM(1.0 / ves) {}    prob_t operator()(const TRule& r) const { -    prob_t p; p.logeq(log_poisson(r.e_.size(), 1.0)); +    prob_t p; p.logeq(Md::log_poisson(r.e_.size(), 1.0));      prob_t q = kUNIFORM; q.poweq(r.e_.size());      p *= q;      return p; diff --git a/gi/pf/conditional_pseg.h b/gi/pf/conditional_pseg.h index 0aa5e8e0..2e9e38fc 100644 --- a/gi/pf/conditional_pseg.h +++ b/gi/pf/conditional_pseg.h @@ -6,6 +6,7 @@  #include <boost/functional/hash.hpp>  #include <iostream> +#include "m.h"  #include "prob.h"  #include "ccrp_nt.h"  #include "mfcr.h" @@ -210,7 +211,7 @@ struct ConditionalParallelSegementationModel {    prob_t AlignProbability(unsigned span) const {      prob_t p; -    p.logeq(aligns.logprob(span, log_poisson(span, 1.0))); +    p.logeq(aligns.logprob(span, Md::log_poisson(span, 1.0)));      return p;    } diff --git a/gi/pf/pfdist.cc b/gi/pf/pfdist.cc index ef08a165..3d578db2 100644 --- a/gi/pf/pfdist.cc +++ b/gi/pf/pfdist.cc @@ -315,7 +315,7 @@ struct BackwardEstimate {        for (int i = 0; i < src_cov.size(); ++i)          if (!src_cov[i]) r.push_back(src_[i]);        const prob_t uniform_alignment(1.0 / r.size()); -      e.logeq(log_poisson(trg_.size() - trg_cov, r.size() - 1)); // p(trg len remaining | src len remaining) +      e.logeq(Md::log_poisson(trg_.size() - trg_cov, r.size() - 1)); // p(trg len remaining | src len remaining)        for (unsigned j = trg_cov; j < trg_.size(); ++j) {          prob_t p;          for (unsigned i = 0; i < r.size(); ++i) @@ -352,7 +352,7 @@ struct BackwardEstimateSym {          if (!src_cov[i]) r.push_back(src_[i]);        r.push_back(0);  // NULL word        const prob_t uniform_alignment(1.0 / r.size()); -      e.logeq(log_poisson(trg_.size() - trg_cov, r.size() - 1)); // p(trg len remaining | src len remaining) +      e.logeq(Md::log_poisson(trg_.size() - trg_cov, r.size() - 1)); // p(trg len remaining | src len remaining)        for (unsigned j = trg_cov; j < trg_.size(); ++j) {          prob_t p;          for (unsigned i = 0; i < r.size(); ++i) @@ -367,7 +367,7 @@ struct BackwardEstimateSym {        r.pop_back();        const prob_t inv_uniform(1.0 / (trg_.size() - trg_cov + 1.0));        prob_t inv; -      inv.logeq(log_poisson(r.size(), trg_.size() - trg_cov)); +      inv.logeq(Md::log_poisson(r.size(), trg_.size() - trg_cov));        for (unsigned i = 0; i < r.size(); ++i) {          prob_t p;          for (unsigned j = trg_cov - 1; j < trg_.size(); ++j) diff --git a/gi/pf/pfnaive.cc b/gi/pf/pfnaive.cc index acba9d22..e1a53f5c 100644 --- a/gi/pf/pfnaive.cc +++ b/gi/pf/pfnaive.cc @@ -77,7 +77,7 @@ struct BackwardEstimateSym {          r.push_back(src_[i]);        r.push_back(0);  // NULL word        const prob_t uniform_alignment(1.0 / r.size()); -      e.logeq(log_poisson(trg_.size() - trg_cov, r.size() - 1)); // p(trg len remaining | src len remaining) +      e.logeq(Md::log_poisson(trg_.size() - trg_cov, r.size() - 1)); // p(trg len remaining | src len remaining)        for (unsigned j = trg_cov; j < trg_.size(); ++j) {          prob_t p;          for (unsigned i = 0; i < r.size(); ++i) @@ -92,7 +92,7 @@ struct BackwardEstimateSym {        r.pop_back();        const prob_t inv_uniform(1.0 / (trg_.size() - trg_cov + 1.0));        prob_t inv; -      inv.logeq(log_poisson(r.size(), trg_.size() - trg_cov)); +      inv.logeq(Md::log_poisson(r.size(), trg_.size() - trg_cov));        for (unsigned i = 0; i < r.size(); ++i) {          prob_t p;          for (unsigned j = trg_cov - 1; j < trg_.size(); ++j) | 
