public void testSumLogProb() { double w1 = Math.log(.2); double w2 = Math.log(.8); double s1 = Math.log(.2 + .8); double s2 = Transducer.sumLogProb(w1, w2); assertEquals(s1, s2, 0.00001); w1 = Math.log(99999); w2 = Math.log(.0001); s1 = Math.log(99999.0001); s2 = Transducer.sumLogProb(w1, w2); assertEquals(s1, s2, 0.00001); }
public void testSumLogProb() { double w1 = Math.log(.2); double w2 = Math.log(.8); double s1 = Math.log(.2 + .8); double s2 = Transducer.sumLogProb(w1, w2); assertEquals(s1, s2, 0.00001); w1 = Math.log(99999); w2 = Math.log(.0001); s1 = Math.log(99999.0001); s2 = Transducer.sumLogProb(w1, w2); assertEquals(s1, s2, 0.00001); }
public void skiptestOldCrf() { CRF crf = (CRF) FileUtils.readObject(new File(oldCrfFile)); Instance inst = crf.getInputPipe().instanceFrom( new Instance(testString, null, null, null)); Sequence output = crf.transduce((Sequence) inst.getData()); String std = output.toString(); assertEquals(" B-PER I-PER O O", std); }
public void skiptestOldCrf() { CRF crf = (CRF) FileUtils.readObject(new File(oldCrfFile)); Instance inst = crf.getInputPipe().instanceFrom( new Instance(testString, null, null, null)); Sequence output = crf.transduce((Sequence) inst.getData()); String std = output.toString(); assertEquals(" B-PER I-PER O O", std); }
crf2.print(); assertEquals(out.toString(), out2.toString()); crf2); double val2 = crft2.getOptimizableCRF(one).getValue(); assertEquals(val1, val2, 1e-5);
crf2.print(); assertEquals(out.toString(), out2.toString()); crf2); double val2 = crft2.getOptimizableCRF(one).getValue(); assertEquals(val1, val2, 1e-5);
+ "> greater than full first-order <" + lik3 + ">", lik2 < lik3); assertEquals(-167.2234457483949, lik1, 0.0001); assertEquals(-165.81326484466342, lik2, 0.0001); assertEquals(-90.37680146432787, lik3, 0.0001);
+ "> greater than full first-order <" + lik3 + ">", lik2 < lik3); assertEquals(-167.2234457483949, lik1, 0.0001); assertEquals(-165.81326484466342, lik2, 0.0001); assertEquals(-90.37680146432787, lik3, 0.0001);
public void testTokenAccuracy() { Pipe p = makeSpacePredictionPipe(); InstanceList instances = new InstanceList(p); instances.addThruPipe(new ArrayIterator(data)); InstanceList[] lists = instances.split(new Random(777), new double[] { .5, .5 }); CRF crf = new CRF(p.getDataAlphabet(), p.getTargetAlphabet()); crf.addFullyConnectedStatesForLabels(); CRFTrainerByLabelLikelihood crft = new CRFTrainerByLabelLikelihood(crf); crft.setUseSparseWeights(true); crft.trainIncremental(lists[0]); TokenAccuracyEvaluator eval = new TokenAccuracyEvaluator(lists, new String[] { "Train", "Test" }); eval.evaluateInstanceList(crft, lists[1], "Test"); assertEquals(0.9409, eval.getAccuracy("Test"), 0.001); }
public void testStartState() { Pipe p = new SerialPipes(new Pipe[] { new LineGroupString2TokenSequence(), new TokenSequenceMatchDataAndTarget(Pattern .compile("^(\\S+) (.*)"), 2, 1), new TokenSequenceParseFeatureString(false), new TokenText(), new TokenSequence2FeatureVectorSequence(true, false), new Target2LabelSequence(), new PrintInputAndTarget(), }); InstanceList data = new InstanceList(p); data.addThruPipe(new LineGroupIterator(new StringReader(toy), Pattern .compile("\n"), true)); CRF crf = new CRF(p, null); crf.print(); crf.addStatesForLabelsConnectedAsIn(data); crf.addStartState(); CRFTrainerByLabelLikelihood crft = new CRFTrainerByLabelLikelihood(crf); Optimizable.ByGradientValue maxable = crft.getOptimizableCRF(data); assertEquals(-1.3862, maxable.getValue(), 1e-4); crf = new CRF(p, null); crf .addOrderNStates(data, new int[] { 1 }, null, "A", null, null, false); crf.print(); crft = new CRFTrainerByLabelLikelihood(crf); maxable = crft.getOptimizableCRF(data); assertEquals(-3.09104245335831, maxable.getValue(), 1e-4); }
public void testStartState() { Pipe p = new SerialPipes(new Pipe[] { new LineGroupString2TokenSequence(), new TokenSequenceMatchDataAndTarget(Pattern .compile("^(\\S+) (.*)"), 2, 1), new TokenSequenceParseFeatureString(false), new TokenText(), new TokenSequence2FeatureVectorSequence(true, false), new Target2LabelSequence(), new PrintInputAndTarget(), }); InstanceList data = new InstanceList(p); data.addThruPipe(new LineGroupIterator(new StringReader(toy), Pattern .compile("\n"), true)); CRF crf = new CRF(p, null); crf.print(); crf.addStatesForLabelsConnectedAsIn(data); crf.addStartState(); CRFTrainerByLabelLikelihood crft = new CRFTrainerByLabelLikelihood(crf); Optimizable.ByGradientValue maxable = crft.getOptimizableCRF(data); assertEquals(-1.3862, maxable.getValue(), 1e-4); crf = new CRF(p, null); crf .addOrderNStates(data, new int[] { 1 }, null, "A", null, null, false); crf.print(); crft = new CRFTrainerByLabelLikelihood(crf); maxable = crft.getOptimizableCRF(data); assertEquals(-3.09104245335831, maxable.getValue(), 1e-4); }
public void testTokenAccuracy() { Pipe p = makeSpacePredictionPipe(); InstanceList instances = new InstanceList(p); instances.addThruPipe(new ArrayIterator(data)); InstanceList[] lists = instances.split(new Random(777), new double[] { .5, .5 }); CRF crf = new CRF(p.getDataAlphabet(), p.getTargetAlphabet()); crf.addFullyConnectedStatesForLabels(); CRFTrainerByLabelLikelihood crft = new CRFTrainerByLabelLikelihood(crf); crft.setUseSparseWeights(true); crft.trainIncremental(lists[0]); TokenAccuracyEvaluator eval = new TokenAccuracyEvaluator(lists, new String[] { "Train", "Test" }); eval.evaluateInstanceList(crft, lists[1], "Test"); assertEquals(0.9409, eval.getAccuracy("Test"), 0.001); }
double[] b = crf2.getDefaultWeights(); for (int i = 0; i < w.length; i += 2) { assertEquals(0.0, b[i], 1e-10); for (int loc = 0; loc < w[i].numLocations(); loc++) { assertEquals(0.0, w[i].valueAtLocation(loc), 1e-10);
double[] b = crf2.getDefaultWeights(); for (int i = 0; i < w.length; i += 2) { assertEquals(0.0, b[i], 1e-10); for (int loc = 0; loc < w[i].numLocations(); loc++) { assertEquals(0.0, w[i].valueAtLocation(loc), 1e-10);
public void testDenseFeatureSelection() { Pipe p = makeSpacePredictionPipe(); InstanceList instances = new InstanceList(p); instances.addThruPipe(new ArrayIterator(data)); // Test that dense observations wights aren't added for // "default-feature" edges. CRF crf1 = new CRF(p, null); crf1.addOrderNStates(instances, new int[] { 0 }, null, "start", null, null, true); CRFTrainerByLabelLikelihood crft1 = new CRFTrainerByLabelLikelihood( crf1); crft1.setUseSparseWeights(false); crft1.train(instances, 1); // Set weights dimension int nParams1 = crft1.getOptimizableCRF(instances).getNumParameters(); CRF crf2 = new CRF(p, null); crf2.addOrderNStates(instances, new int[] { 0, 1 }, new boolean[] { false, true }, "start", null, null, true); CRFTrainerByLabelLikelihood crft2 = new CRFTrainerByLabelLikelihood( crf2); crft2.setUseSparseWeights(false); crft2.train(instances, 1); // Set weights dimension int nParams2 = crft2.getOptimizableCRF(instances).getNumParameters(); assertEquals(nParams2, nParams1 + 4); }
public void testDenseFeatureSelection() { Pipe p = makeSpacePredictionPipe(); InstanceList instances = new InstanceList(p); instances.addThruPipe(new ArrayIterator(data)); // Test that dense observations wights aren't added for // "default-feature" edges. CRF crf1 = new CRF(p, null); crf1.addOrderNStates(instances, new int[] { 0 }, null, "start", null, null, true); CRFTrainerByLabelLikelihood crft1 = new CRFTrainerByLabelLikelihood( crf1); crft1.setUseSparseWeights(false); crft1.train(instances, 1); // Set weights dimension int nParams1 = crft1.getOptimizableCRF(instances).getNumParameters(); CRF crf2 = new CRF(p, null); crf2.addOrderNStates(instances, new int[] { 0, 1 }, new boolean[] { false, true }, "start", null, null, true); CRFTrainerByLabelLikelihood crft2 = new CRFTrainerByLabelLikelihood( crf2); crft2.setUseSparseWeights(false); crft2.train(instances, 1); // Set weights dimension int nParams2 = crft2.getOptimizableCRF(instances).getNumParameters(); assertEquals(nParams2, nParams1 + 4); }
public void testXis() { Pipe p = makeSpacePredictionPipe(); InstanceList instances = new InstanceList(p); instances.addThruPipe(new ArrayIterator(data)); CRF crf1 = new CRF(p, null); crf1.addFullyConnectedStatesForLabels(); CRFTrainerByLabelLikelihood crft1 = new CRFTrainerByLabelLikelihood( crf1); crft1.train(instances, 10); // Let's get some parameters Instance inst = instances.get(0); Sequence input = (Sequence) inst.getData(); SumLatticeDefault lattice = new SumLatticeDefault(crf1, input, (Sequence) inst.getTarget(), null, true); for (int ip = 0; ip < lattice.length() - 1; ip++) { for (int i = 0; i < crf1.numStates(); i++) { Transducer.State state = crf1.getState(i); Transducer.TransitionIterator it = state.transitionIterator( input, ip); double gamma = lattice.getGammaProbability(ip, state); double xiSum = 0; while (it.hasNext()) { Transducer.State dest = it.nextState(); double xi = lattice.getXiProbability(ip, state, dest); xiSum += xi; } assertEquals(gamma, xiSum, 1e-5); } } }
public void testXis() { Pipe p = makeSpacePredictionPipe(); InstanceList instances = new InstanceList(p); instances.addThruPipe(new ArrayIterator(data)); CRF crf1 = new CRF(p, null); crf1.addFullyConnectedStatesForLabels(); CRFTrainerByLabelLikelihood crft1 = new CRFTrainerByLabelLikelihood( crf1); crft1.train(instances, 10); // Let's get some parameters Instance inst = instances.get(0); Sequence input = (Sequence) inst.getData(); SumLatticeDefault lattice = new SumLatticeDefault(crf1, input, (Sequence) inst.getTarget(), null, true); for (int ip = 0; ip < lattice.length() - 1; ip++) { for (int i = 0; i < crf1.numStates(); i++) { Transducer.State state = crf1.getState(i); Transducer.TransitionIterator it = state.transitionIterator( input, ip); double gamma = lattice.getGammaProbability(ip, state); double xiSum = 0; while (it.hasNext()) { Transducer.State dest = it.nextState(); double xi = lattice.getXiProbability(ip, state, dest); xiSum += xi; } assertEquals(gamma, xiSum, 1e-5); } } }
.getGammaProbability(time, crf.getState(0)) + lattice.getGammaProbability(time, crf.getState(1)); assertEquals("Gammas at time step " + time + " sum to " + gammasum, 1.0, gammasum, 0.0001); + lattice.getXiProbability(time, crf.getState(1), crf .getState(1)); assertEquals("Xis at time step " + time + " sum to " + xissum, 1.0, xissum, 0.0001);
.getGammaProbability(time, crf.getState(0)) + lattice.getGammaProbability(time, crf.getState(1)); assertEquals("Gammas at time step " + time + " sum to " + gammasum, 1.0, gammasum, 0.0001); + lattice.getXiProbability(time, crf.getState(1), crf .getState(1)); assertEquals("Xis at time step " + time + " sum to " + xissum, 1.0, xissum, 0.0001);