public void doTestSpacePrediction(boolean testValueAndGradient, boolean useSaved, boolean useSparseWeights) { Pipe p = makeSpacePredictionPipe();
public void doTestSpacePrediction(boolean testValueAndGradient, boolean useSaved, boolean useSparseWeights) { Pipe p = makeSpacePredictionPipe();
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])); }
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])); }
public void testSumLatticeImplementations() { Pipe p = makeSpacePredictionPipe(); Pipe p2 = new TestCRF2String();
public void testSumLatticeImplementations() { Pipe p = makeSpacePredictionPipe(); Pipe p2 = new TestCRF2String();
public void doTestSpacePrediction(boolean testValueAndGradient) { Pipe p = makeSpacePredictionPipe(); Pipe p2 = new TestCRF2String();
public void doTestSpacePrediction(boolean testValueAndGradient) { Pipe p = makeSpacePredictionPipe(); Pipe p2 = new TestCRF2String();
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 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 testStateAddWeights() { Pipe p = makeSpacePredictionPipe(); // This used to be
public void testStateAddWeights() { Pipe p = makeSpacePredictionPipe(); // This used to be
public void testAddOrderNStates() { Pipe p = makeSpacePredictionPipe();
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 testAddOrderNStates() { Pipe p = makeSpacePredictionPipe();
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); } } }
public void testFrozenWeights() { Pipe p = makeSpacePredictionPipe();
public void testFrozenWeights() { Pipe p = makeSpacePredictionPipe();