From 7b61f71be28539f815a171ba84baeaa90f863e88 Mon Sep 17 00:00:00 2001 From: "trevor.cohn" Date: Fri, 23 Jul 2010 19:26:17 +0000 Subject: Parallelised VB-EM git-svn-id: https://ws10smt.googlecode.com/svn/trunk@384 ec762483-ff6d-05da-a07a-a48fb63a330f --- .../prjava/src/phrase/VB.java | 129 +++++++++++++++------ 1 file changed, 92 insertions(+), 37 deletions(-) (limited to 'gi/posterior-regularisation/prjava/src/phrase/VB.java') diff --git a/gi/posterior-regularisation/prjava/src/phrase/VB.java b/gi/posterior-regularisation/prjava/src/phrase/VB.java index a858c883..cd3f4966 100644 --- a/gi/posterior-regularisation/prjava/src/phrase/VB.java +++ b/gi/posterior-regularisation/prjava/src/phrase/VB.java @@ -7,8 +7,13 @@ import io.FileUtil; import java.io.File; import java.io.IOException; import java.io.PrintStream; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; import org.apache.commons.math.special.Gamma; @@ -38,21 +43,17 @@ public class VB { /**@brief * variational param for z */ - private double phi[][]; + //private double phi[][]; /**@brief * variational param for theta */ private double gamma[]; private static double VAL_DIFF_RATIO=0.005; - /**@brief - * objective for a single document - */ - private double obj; - private int n_positions; private int n_words; private int K; + private ExecutorService pool; private Corpus c; public static void main(String[] args) { @@ -122,17 +123,14 @@ public class VB { } - private void inference(int phraseID){ + private double inference(int phraseID, double[][] phi, double[] gamma) + { List doc=c.getEdgesForPhrase(phraseID); - phi=new double[doc.size()][K]; for(int i=0;idoc=c.getEdgesForPhrase(d); - for(int n=0;n doc=c.getEdgesForPhrase(d); + double[][] phi = new double[doc.size()][K]; + double[] gamma = new double[K]; + + emObj += inference(d, phi, gamma); + + for(int n=0;n + { + double[][] phi; + double[] gamma; + double obj; + int d; + PartialEStep(int d) { this.d = d; } + + public PartialEStep call() + { + phi = new double[c.getEdgesForPhrase(d).size()][K]; + gamma = new double[K]; + obj = inference(d, phi, gamma); + return this; + } + } + + List> jobs = new ArrayList>(); + for (int d=0;d job: jobs) + { + try { + PartialEStep e = job.get(); + + emObj += e.obj; + List doc = c.getEdgesForPhrase(e.d); + for(int n=0;n doc=c.getEdgesForPhrase(d); + List doc=c.getEdgesForPhrase(d); + double[][] phi = new double[doc.size()][K]; + for(int i=0;i