///** // * // */ //package edu.berkeley.nlp.PCFGLA; // //import java.util.List; //import java.util.Random; // //import edu.berkeley.nlp.auxv.AuxVarInsideOutside; //import edu.berkeley.nlp.auxv.SuffStat; //import edu.berkeley.nlp.auxv.AuxVarInsideOutside.BottleNeckTimerMonitor; //import edu.berkeley.nlp.auxv.AuxVarInsideOutside.Choke; //import edu.berkeley.nlp.auxv.AuxVarInsideOutside.IterManager; //import edu.berkeley.nlp.auxv.bractrl.BracketNumberController; //import edu.berkeley.nlp.auxv.bractrl.BracketNumberControllers; //import edu.berkeley.nlp.auxv.bractrl.BracketsFromGoldTree; //import edu.berkeley.nlp.auxv.bractrl.InformedBracketProposer; //import edu.berkeley.nlp.syntax.StateSet; //import edu.berkeley.nlp.syntax.Tree; //import edu.berkeley.nlp.math.SloppyMath; //import fig.basic.Option; // ///** // * @author petrov // * // */ //public class SamplingParser extends DoublyConstrainedTwoChartsParser { // // AuxVarInsideOutside auxVarInsideOutside; // BracketNumberController bnc; // // // // TODO: should be make non-static // @Option public static double ratioItersToBras = 9.0; // @Option public static double ratioBurnInToIters = 0.2; // @Option public static double minActiveRatio = 0.5; // // // Random rand = GrammarTrainer.RANDOM; // // public SamplingParser(Grammar gr, Lexicon lex) { // super(gr, lex); // bnc = BracketNumberControllers.instance.newBracketNumberController(); // } // // public int initialNBrackets(Random rand, List<String> sentence) // { // return bnc.initialNumberOfBrackets(rand, sentence); // } // // /** // * Throws MeasureZeroException if on measure zero // * in this case, suff stat are left untouched // * @param sentence // * @param finalSuffStats // * @param goldTree // * @return // */ // public double computeExpectedCounts(List<String> sentence, SuffStat finalSuffStats, Tree<StateSet> goldTree){ // // BracketsFromGoldTree prop = new BracketsFromGoldTree(goldTree); // IterManager iterManager = new IterManager(initialNBrackets(rand, sentence), // ratioItersToBras, ratioBurnInToIters); // auxVarInsideOutside = new AuxVarInsideOutside(this, prop, // bnc, iterManager, rand); // Choke choke = new Choke(minActiveRatio); // // BottleNeckTimerMonitor bnt = new AuxVarInsideOutside.BottleNeckTimerMonitor(); // auxVarInsideOutside.setMonitor(bnt); // // SuffStat tempSuffStat = finalSuffStats.newInstance(); // long start = System.currentTimeMillis(); // auxVarInsideOutside.compute(sentence, tempSuffStat, goldTree, choke); // long stop = System.currentTimeMillis(); // System.out.println("Time for approx:" + (stop - start)); // System.out.println("Bottleneck exact time: " + bnt.totalTimeCallingExact); // System.out.println("Longest iteration time: " + bnt.maxTimeCallingExact); // System.out.println("Shortest iteration time: " + bnt.minTimeCallingExact); // double posteriorDerivationLogPr = auxVarInsideOutside.posteriorDerivationLogPr(); // if (SloppyMath.isVeryDangerous(posteriorDerivationLogPr)) //posteriorDerivationLogPr == Double.NEGATIVE_INFINITY) // throw new MeasureZeroException(); // finalSuffStats.add(tempSuffStat); // System.out.println("Current cheat ratio: " + choke.cheatRatio()); // return posteriorDerivationLogPr; // } // // public static class MeasureZeroException extends RuntimeException { // private static final long serialVersionUID = 1L; // } //}