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 testCost() { doTestCost(false); }
public void doTestSpacePrediction(boolean testValueAndGradient, boolean useSaved, boolean useSparseWeights) { Pipe p = makeSpacePredictionPipe(); + postTestAcc); assertEquals(postTrainAcc, preTrainAcc, 0.0001); assertEquals(postTestAcc, preTestAcc, 0.0001);
public void testAddOrderNStates() { Pipe p = makeSpacePredictionPipe(); double lik1 = getLikelihood(crf1, lists[0]); double lik2 = getLikelihood(crf2, lists[0]); double lik3 = getLikelihood(crf3, lists[0]); assertTrue("Final zero-order likelihood <" + lik1 + "> greater than first-order <" + lik2 + ">", lik1 < lik2); assertTrue("Final defaults-only likelihood <" + lik2 + "> 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 testFrozenWeights() { Pipe p = makeSpacePredictionPipe(); 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 val1 = optable1.getValue(); double val2 = optable2.getValue(); assertTrue( "Error: Freezing weights does not harm log-likelihood! Full " + val1 + ", Frozen " + val2, val1 > val2);
public void testSerialization() { doTestSpacePrediction(false, true, true); }
public void testStateAddWeights() { Pipe p = makeSpacePredictionPipe(); // This used to be assertTrue(notstartFound); assertTrue(!notstartFound);
assertTrue(lattice.getGammaProbability(0, crf.getState(0)) == 1.0); assertTrue(lattice.getGammaProbability(0, crf.getState(1)) == 0.0); assertTrue(lattice.getGammaProbability(1, crf.getState(0)) == 0.0); assertTrue(lattice.getGammaProbability(1, crf.getState(1)) == 1.0); assertTrue(lattice .getXiProbability(1, crf.getState(1), crf.getState(1)) == 1.0); assertTrue(lattice .getXiProbability(1, crf.getState(1), crf.getState(0)) == 0.0); assertTrue("Lattice weight = " + lattice.getTotalWeight(), lattice .getTotalWeight() == 4.0); .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);
public void testTrainStochasticGradient() { Pipe p = makeSpacePredictionPipe(); Pipe p2 = new TestCRF2String(); InstanceList instances = new InstanceList(p); instances.addThruPipe(new ArrayIterator(data)); InstanceList[] lists = instances.split(new double[] { .5, .5 }); CRF crf = new CRF(p, p2); crf.addFullyConnectedStatesForLabels(); crf.setWeightsDimensionAsIn(lists[0], false); CRFTrainerByStochasticGradient crft = new CRFTrainerByStochasticGradient( crf, 0.0001); System.out.println("Training Accuracy before training = " + crf.averageTokenAccuracy(lists[0])); System.out.println("Testing Accuracy before training = " + crf.averageTokenAccuracy(lists[1])); System.out.println("Training..."); // either fixed learning rate or selected on a sample crft.setLearningRateByLikelihood(lists[0]); // crft.setLearningRate(0.01); crft.train(lists[0], 100); crf.print(); System.out.println("Training Accuracy after training = " + crf.averageTokenAccuracy(lists[0])); System.out.println("Testing Accuracy after training = " + crf.averageTokenAccuracy(lists[1])); }
+ " gradientNorm =" + gradientNorm); assertTrue("Value should be 35770 but is" + optimizableValue, Math .abs(optimizableValue + 35770) < 0.001); assertTrue(Math.abs(gradientNorm - 520) < 0.001);
public void doTestSpacePrediction(boolean testValueAndGradient, boolean useSaved, boolean useSparseWeights) { Pipe p = makeSpacePredictionPipe(); + postTestAcc); assertEquals(postTrainAcc, preTrainAcc, 0.0001); assertEquals(postTestAcc, preTestAcc, 0.0001);
public void testAddOrderNStates() { Pipe p = makeSpacePredictionPipe(); double lik1 = getLikelihood(crf1, lists[0]); double lik2 = getLikelihood(crf2, lists[0]); double lik3 = getLikelihood(crf3, lists[0]); assertTrue("Final zero-order likelihood <" + lik1 + "> greater than first-order <" + lik2 + ">", lik1 < lik2); assertTrue("Final defaults-only likelihood <" + lik2 + "> 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 testFrozenWeights() { Pipe p = makeSpacePredictionPipe(); 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 val1 = optable1.getValue(); double val2 = optable2.getValue(); assertTrue( "Error: Freezing weights does not harm log-likelihood! Full " + val1 + ", Frozen " + val2, val1 > val2);
public void testDenseTrain() { doTestSpacePrediction(false, false, false); }
public void testStateAddWeights() { Pipe p = makeSpacePredictionPipe(); // This used to be assertTrue(notstartFound); assertTrue(!notstartFound);
assertTrue(lattice.getGammaProbability(0, crf.getState(0)) == 1.0); assertTrue(lattice.getGammaProbability(0, crf.getState(1)) == 0.0); assertTrue(lattice.getGammaProbability(1, crf.getState(0)) == 0.0); assertTrue(lattice.getGammaProbability(1, crf.getState(1)) == 1.0); assertTrue(lattice .getXiProbability(1, crf.getState(1), crf.getState(1)) == 1.0); assertTrue(lattice .getXiProbability(1, crf.getState(1), crf.getState(0)) == 0.0); assertTrue("Lattice weight = " + lattice.getTotalWeight(), lattice .getTotalWeight() == 4.0); .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);
public void testTrainStochasticGradient() { Pipe p = makeSpacePredictionPipe(); Pipe p2 = new TestCRF2String(); InstanceList instances = new InstanceList(p); instances.addThruPipe(new ArrayIterator(data)); InstanceList[] lists = instances.split(new double[] { .5, .5 }); CRF crf = new CRF(p, p2); crf.addFullyConnectedStatesForLabels(); crf.setWeightsDimensionAsIn(lists[0], false); CRFTrainerByStochasticGradient crft = new CRFTrainerByStochasticGradient( crf, 0.0001); System.out.println("Training Accuracy before training = " + crf.averageTokenAccuracy(lists[0])); System.out.println("Testing Accuracy before training = " + crf.averageTokenAccuracy(lists[1])); System.out.println("Training..."); // either fixed learning rate or selected on a sample crft.setLearningRateByLikelihood(lists[0]); // crft.setLearningRate(0.01); crft.train(lists[0], 100); crf.print(); System.out.println("Training Accuracy after training = " + crf.averageTokenAccuracy(lists[0])); System.out.println("Testing Accuracy after training = " + crf.averageTokenAccuracy(lists[1])); }
+ " gradientNorm =" + gradientNorm); assertTrue("Value should be 35770 but is" + optimizableValue, Math .abs(optimizableValue + 35770) < 0.001); assertTrue(Math.abs(gradientNorm - 520) < 0.001);
public void testSumLatticeImplementations() { Pipe p = makeSpacePredictionPipe(); Pipe p2 = new TestCRF2String(); if (iter == 0) { assertEquals(defaultLattice.getTotalWeight(), scalingLattice.getTotalWeight(), 0.0001); for (int i = 0; i < g1.length; i++) { for (int j = 0; j < g1[i].length; j++) { assertEquals(g1[i][j], g2[i][j], 0.0001); for (int j = 0; j < x1[i].length; j++) { for (int k = 0; k < x1[i][j].length; k++) { assertEquals(x1[i][j][k], x2[i][j][k], 0.0001);