CRF.Factors.Incrementor factorIncrementor = factors.new Incrementor ();
@SuppressWarnings("unchecked") protected void gatherConstraints( PRAuxiliaryModel auxModel, double[][][][] cachedDots) { initialProbList = new ArrayList<double[]>(); finalProbList = new ArrayList<double[]>(); transitionProbList = new ArrayList<double[][][]>(); constraints = new CRF.Factors(crf.getParameters()); expectations = new CRF.Factors(crf.getParameters()); constraints.zero(); for (int ii = 0; ii < trainingSet.size(); ii++) { Instance inst = trainingSet.get(ii); Sequence input = (Sequence) inst.getData(); SumLatticePR geLatt = new SumLatticePR(crf, ii, input, null, auxModel, cachedDots[ii], false, null, null, true); double gammas[][] = geLatt.getGammas(); double initialProbs[] = toProbabilities(gammas[0]); initialProbList.add(initialProbs); double finalProbs[] = toProbabilities(gammas[gammas.length - 1]); finalProbList.add(finalProbs); double transitionProbs[][][] = geLatt.getXis(); toProbabilities(transitionProbs); transitionProbList.add(transitionProbs); new SumLatticeKL(crf, input, initialProbs, finalProbs, transitionProbs, null, constraints.new Incrementor()); } }
@SuppressWarnings("unchecked") protected void gatherConstraints( PRAuxiliaryModel auxModel, double[][][][] cachedDots) { initialProbList = new ArrayList<double[]>(); finalProbList = new ArrayList<double[]>(); transitionProbList = new ArrayList<double[][][]>(); constraints = new CRF.Factors(crf.getParameters()); expectations = new CRF.Factors(crf.getParameters()); constraints.zero(); for (int ii = 0; ii < trainingSet.size(); ii++) { Instance inst = trainingSet.get(ii); Sequence input = (Sequence) inst.getData(); SumLatticePR geLatt = new SumLatticePR(crf, ii, input, null, auxModel, cachedDots[ii], false, null, null, true); double gammas[][] = geLatt.getGammas(); double initialProbs[] = toProbabilities(gammas[0]); initialProbList.add(initialProbs); double finalProbs[] = toProbabilities(gammas[gammas.length - 1]); finalProbList.add(finalProbs); double transitionProbs[][][] = geLatt.getXis(); toProbabilities(transitionProbs); transitionProbList.add(transitionProbs); new SumLatticeKL(crf, input, initialProbs, finalProbs, transitionProbs, null, constraints.new Incrementor()); } }
Transducer.Incrementor incrementor = instanceWeight == 1.0 ? batchExpectations.new Incrementor() : batchExpectations.new WeightedIncrementor (instanceWeight); unlabeledWeight = new SumLatticeDefault (this.crf, input, null, incrementor).getTotalWeight();
public Double call() throws Exception { double value = 0; for (int ii = start; ii < end; ii++) { Instance inst = trainingSet.get(ii); Sequence input = (Sequence) inst.getData(); double initProbs[] = initialProbList.get(ii); double finalProbs[] = finalProbList.get(ii); double transProbs[][][] = transitionProbList.get(ii); double[][][] cachedDots = new double[input.size()][crf.numStates()][crf.numStates()]; for (int j = 0; j < input.size(); j++) { for (int k = 0; k < crf.numStates(); k++) { for (int l = 0; l < crf.numStates(); l++) { cachedDots[j][k][l] = Transducer.IMPOSSIBLE_WEIGHT; } } } double labeledWeight = new SumLatticeKL(crf, input, initProbs, finalProbs, transProbs, cachedDots, null).getTotalWeight(); value += labeledWeight; //double unlabeledWeight = new SumLatticeDefault(crf, input, // expectationsCopy.new Incrementor()).getTotalWeight(); double unlabeledWeight = new SumLatticeDefaultCachedDot(crf, input, null, cachedDots, expectationsCopy.new Incrementor(), false, null).getTotalWeight(); value -= unlabeledWeight; } return value; } }
public Double call() throws Exception { double value = 0; for (int ii = start; ii < end; ii++) { Instance inst = trainingSet.get(ii); Sequence input = (Sequence) inst.getData(); double initProbs[] = initialProbList.get(ii); double finalProbs[] = finalProbList.get(ii); double transProbs[][][] = transitionProbList.get(ii); double[][][] cachedDots = new double[input.size()][crf.numStates()][crf.numStates()]; for (int j = 0; j < input.size(); j++) { for (int k = 0; k < crf.numStates(); k++) { for (int l = 0; l < crf.numStates(); l++) { cachedDots[j][k][l] = Transducer.IMPOSSIBLE_WEIGHT; } } } double labeledWeight = new SumLatticeKL(crf, input, initProbs, finalProbs, transProbs, cachedDots, null).getTotalWeight(); value += labeledWeight; //double unlabeledWeight = new SumLatticeDefault(crf, input, // expectationsCopy.new Incrementor()).getTotalWeight(); double unlabeledWeight = new SumLatticeDefaultCachedDot(crf, input, null, cachedDots, expectationsCopy.new Incrementor(), false, null).getTotalWeight(); value -= unlabeledWeight; } return value; } }
@SuppressWarnings("unchecked") protected void gatherConstraints( PRAuxiliaryModel auxModel, double[][][][] cachedDots) { initialProbList = new ArrayList<double[]>(); finalProbList = new ArrayList<double[]>(); transitionProbList = new ArrayList<double[][][]>(); constraints = new CRF.Factors(crf.getParameters()); expectations = new CRF.Factors(crf.getParameters()); constraints.zero(); for (int ii = 0; ii < trainingSet.size(); ii++) { Instance inst = trainingSet.get(ii); Sequence input = (Sequence) inst.getData(); SumLatticePR geLatt = new SumLatticePR(crf, ii, input, null, auxModel, cachedDots[ii], false, null, null, true); double gammas[][] = geLatt.getGammas(); double initialProbs[] = toProbabilities(gammas[0]); initialProbList.add(initialProbs); double finalProbs[] = toProbabilities(gammas[gammas.length - 1]); finalProbList.add(finalProbs); double transitionProbs[][][] = geLatt.getXis(); toProbabilities(transitionProbs); transitionProbList.add(transitionProbs); new SumLatticeKL(crf, input, initialProbs, finalProbs, transitionProbs, null, constraints.new Incrementor()); } }
/** * Adjust the parameters by learning rate according to the gradient of this * single Instance, and return the true label sequence likelihood. */ public double trainIncrementalLikelihood(Instance trainingInstance, double rate) { double singleLoglik; constraints.zero(); expectations.zero(); FeatureVectorSequence fvs = (FeatureVectorSequence) trainingInstance .getData(); Sequence labelSequence = (Sequence) trainingInstance.getTarget(); singleLoglik = new SumLatticeDefault(crf, fvs, labelSequence, constraints.new Incrementor()).getTotalWeight(); singleLoglik -= new SumLatticeDefault(crf, fvs, null, expectations.new Incrementor()).getTotalWeight(); // Calculate parameter gradient given these instances: (constraints - // expectations) constraints.plusEquals(expectations, -1); // Change the parameters a little by this difference, obeying // weightsFrozen crf.parameters.plusEquals(constraints, rate, true); return singleLoglik; } }
/** * Adjust the parameters by learning rate according to the gradient of this * single Instance, and return the true label sequence likelihood. */ public double trainIncrementalLikelihood(Instance trainingInstance, double rate) { double singleLoglik; constraints.zero(); expectations.zero(); FeatureVectorSequence fvs = (FeatureVectorSequence) trainingInstance .getData(); Sequence labelSequence = (Sequence) trainingInstance.getTarget(); singleLoglik = new SumLatticeDefault(crf, fvs, labelSequence, constraints.new Incrementor()).getTotalWeight(); singleLoglik -= new SumLatticeDefault(crf, fvs, null, expectations.new Incrementor()).getTotalWeight(); // Calculate parameter gradient given these instances: (constraints - // expectations) constraints.plusEquals(expectations, -1); // Change the parameters a little by this difference, obeying // weightsFrozen crf.parameters.plusEquals(constraints, rate, true); return singleLoglik; } }
public Double call() throws Exception { double value = 0; for (int ii = start; ii < end; ii++) { Instance inst = trainingSet.get(ii); Sequence input = (Sequence) inst.getData(); double initProbs[] = initialProbList.get(ii); double finalProbs[] = finalProbList.get(ii); double transProbs[][][] = transitionProbList.get(ii); double[][][] cachedDots = new double[input.size()][crf.numStates()][crf.numStates()]; for (int j = 0; j < input.size(); j++) { for (int k = 0; k < crf.numStates(); k++) { for (int l = 0; l < crf.numStates(); l++) { cachedDots[j][k][l] = Transducer.IMPOSSIBLE_WEIGHT; } } } double labeledWeight = new SumLatticeKL(crf, input, initProbs, finalProbs, transProbs, cachedDots, null).getTotalWeight(); value += labeledWeight; //double unlabeledWeight = new SumLatticeDefault(crf, input, // expectationsCopy.new Incrementor()).getTotalWeight(); double unlabeledWeight = new SumLatticeDefaultCachedDot(crf, input, null, cachedDots, expectationsCopy.new Incrementor(), false, null).getTotalWeight(); value -= unlabeledWeight; } return value; } }
/** * Adjust the parameters by learning rate according to the gradient of this * single Instance, and return the true label sequence likelihood. */ public double trainIncrementalLikelihood(Instance trainingInstance, double rate) { double singleLoglik; constraints.zero(); expectations.zero(); FeatureVectorSequence fvs = (FeatureVectorSequence) trainingInstance .getData(); Sequence labelSequence = (Sequence) trainingInstance.getTarget(); singleLoglik = new SumLatticeDefault(crf, fvs, labelSequence, constraints.new Incrementor()).getTotalWeight(); singleLoglik -= new SumLatticeDefault(crf, fvs, null, expectations.new Incrementor()).getTotalWeight(); // Calculate parameter gradient given these instances: (constraints - // expectations) constraints.plusEquals(expectations, -1); // Change the parameters a little by this difference, obeying // weightsFrozen crf.parameters.plusEquals(constraints, rate, true); return singleLoglik; } }
/** * Set the constraints by running forward-backward with the <i>output label * sequence provided</i>, thus restricting it to only those paths that agree with * the label sequence. */ protected void gatherConstraints(InstanceList ilist) { logger.info("Gathering constraints..."); assert (constraints.structureMatches(crf.parameters)); constraints.zero(); for (Instance instance : ilist) { FeatureVectorSequence input = (FeatureVectorSequence) instance.getData(); FeatureSequence output = (FeatureSequence) instance.getTarget(); double instanceWeight = ilist.getInstanceWeight(instance); Transducer.Incrementor incrementor = instanceWeight == 1.0 ? constraints.new Incrementor() : constraints.new WeightedIncrementor(instanceWeight); new SumLatticeDefault (this.crf, input, output, incrementor); } constraints.assertNotNaNOrInfinite(); }
/** * Set the constraints by running forward-backward with the <i>output label * sequence provided</i>, thus restricting it to only those paths that agree with * the label sequence. */ protected void gatherConstraints(InstanceList ilist) { logger.info("Gathering constraints..."); assert (constraints.structureMatches(crf.parameters)); constraints.zero(); for (Instance instance : ilist) { FeatureVectorSequence input = (FeatureVectorSequence) instance.getData(); FeatureSequence output = (FeatureSequence) instance.getTarget(); double instanceWeight = ilist.getInstanceWeight(instance); Transducer.Incrementor incrementor = instanceWeight == 1.0 ? constraints.new Incrementor() : constraints.new WeightedIncrementor(instanceWeight); new SumLatticeDefault (this.crf, input, output, incrementor); } constraints.assertNotNaNOrInfinite(); }
protected void gatherConstraints (InstanceList ilist) { // Set the constraints by running forward-backward with the *output // label sequence provided*, thus restricting it to only those // paths that agree with the label sequence. // Zero the constraints[] // Reset constraints[] to zero before we fill them again assert (constraints.structureMatches(crf.parameters)); constraints.zero(); for (Instance instance : ilist) { FeatureVectorSequence input = (FeatureVectorSequence) instance.getData(); FeatureSequence output = (FeatureSequence) instance.getTarget(); double instanceWeight = ilist.getInstanceWeight(instance); //System.out.println ("Constraint-gathering on instance "+i+" of "+ilist.size()); Transducer.Incrementor incrementor = instanceWeight == 1.0 ? constraints.new Incrementor() : constraints.new WeightedIncrementor(instanceWeight); new SumLatticeDefault (this.crf, input, output, incrementor); } // System.out.println ("testing Value and Gradient"); // TestOptimizable.testValueAndGradientCurrentParameters (this); }
protected void gatherConstraints (InstanceList ilist) { // Set the constraints by running forward-backward with the *output // label sequence provided*, thus restricting it to only those // paths that agree with the label sequence. // Zero the constraints[] // Reset constraints[] to zero before we fill them again assert (constraints.structureMatches(crf.parameters)); constraints.zero(); for (Instance instance : ilist) { FeatureVectorSequence input = (FeatureVectorSequence) instance.getData(); FeatureSequence output = (FeatureSequence) instance.getTarget(); double instanceWeight = ilist.getInstanceWeight(instance); //System.out.println ("Constraint-gathering on instance "+i+" of "+ilist.size()); Transducer.Incrementor incrementor = instanceWeight == 1.0 ? constraints.new Incrementor() : constraints.new WeightedIncrementor(instanceWeight); new SumLatticeDefault (this.crf, input, output, incrementor); } // System.out.println ("testing Value and Gradient"); // TestOptimizable.testValueAndGradientCurrentParameters (this); }
protected void gatherConstraints (InstanceList ilist) { // Set the constraints by running forward-backward with the *output // label sequence provided*, thus restricting it to only those // paths that agree with the label sequence. // Zero the constraints[] // Reset constraints[] to zero before we fill them again assert (constraints.structureMatches(crf.parameters)); constraints.zero(); for (Instance instance : ilist) { FeatureVectorSequence input = (FeatureVectorSequence) instance.getData(); FeatureSequence output = (FeatureSequence) instance.getTarget(); double instanceWeight = ilist.getInstanceWeight(instance); //System.out.println ("Constraint-gathering on instance "+i+" of "+ilist.size()); Transducer.Incrementor incrementor = instanceWeight == 1.0 ? constraints.new Incrementor() : constraints.new WeightedIncrementor(instanceWeight); new SumLatticeDefault (this.crf, input, output, incrementor); } // System.out.println ("testing Value and Gradient"); // TestOptimizable.testValueAndGradientCurrentParameters (this); }
/** * Set the constraints by running forward-backward with the <i>output label * sequence provided</i>, thus restricting it to only those paths that agree with * the label sequence. */ protected void gatherConstraints(InstanceList ilist) { logger.info("Gathering constraints..."); assert (constraints.structureMatches(crf.parameters)); constraints.zero(); for (Instance instance : ilist) { FeatureVectorSequence input = (FeatureVectorSequence) instance.getData(); FeatureSequence output = (FeatureSequence) instance.getTarget(); double instanceWeight = ilist.getInstanceWeight(instance); Transducer.Incrementor incrementor = instanceWeight == 1.0 ? constraints.new Incrementor() : constraints.new WeightedIncrementor(instanceWeight); new SumLatticeDefault (this.crf, input, output, incrementor); } constraints.assertNotNaNOrInfinite(); }
/** * Initializes the structures. */ public CRFOptimizableByEntropyRegularization(CRF crf, InstanceList ilist, double scalingFactor) { data = ilist; this.crf = crf; this.scalingFactor = scalingFactor; // initialize the expectations using the model expectations = new CRF.Factors(crf); incrementor = expectations.new Incrementor(); cachedValue = 0.0; cachedGradient = new double[crf.getParameters().getNumFactors()]; }
/** * Initializes the structures. */ public CRFOptimizableByEntropyRegularization(CRF crf, InstanceList ilist, double scalingFactor) { data = ilist; this.crf = crf; this.scalingFactor = scalingFactor; // initialize the expectations using the model expectations = new CRF.Factors(crf); incrementor = expectations.new Incrementor(); cachedValue = 0.0; cachedGradient = new double[crf.getParameters().getNumFactors()]; }
/** * Initializes the structures. */ public CRFOptimizableByEntropyRegularization(CRF crf, InstanceList ilist, double scalingFactor) { data = ilist; this.crf = crf; this.scalingFactor = scalingFactor; // initialize the expectations using the model expectations = new CRF.Factors(crf); incrementor = expectations.new Incrementor(); cachedValue = 0.0; cachedGradient = new double[crf.getParameters().getNumFactors()]; }