/** Calculates the confidence in the tagging of a {@link Instance}. */ public double estimateConfidenceFor (Instance instance, Object[] startTags, Object[] inTags) { Sequence[] predictions = new Sequence[committee.length]; for (int i = 0; i < committee.length; i++) predictions[i] = new MaxLatticeDefault (committee[i], (Sequence)instance.getData()).bestOutputSequence(); // Higher return value means higher confidence this sequence is correct. double avg = avgVoteEntropy(predictions); return -1.0 * avg; }
public SequencePairAlignment<Object,Object> bestOutputAlignment () { return bestOutputAlignments(1).get(0); }
/** * Apply a transducer to an input sequence to produce the k highest-scoring * output sequences. * * @param model the <code>Transducer</code> * @param input the input sequence * @param k the number of answers to return * @return array of the k highest-scoring output sequences */ public static Sequence[] apply(Transducer model, Sequence input, int k) { Sequence[] answers; if (k == 1) { answers = new Sequence[1]; answers[0] = model.transduce (input); } else { MaxLatticeDefault lattice = new MaxLatticeDefault (model, input, null, cacheSizeOption.value()); answers = lattice.bestOutputSequences(k).toArray(new Sequence[0]); } return answers; }
public void testViterbi () { double weight = new MaxLatticeDefault (transducer, seq).bestWeight(); System.out.println ("weight = "+weight); assertTrue (weight == seqWeight); }
/** Calculates the confidence in the tagging of a {@link Instance}. */ public double estimateConfidenceFor (Instance instance, Object[] startTags, Object[] inTags) { SumLatticeDefault lattice = new SumLatticeDefault (model, (Sequence)instance.getData()); double[] costs = new double[N]; List<SequencePairAlignment<Object,Object>> as = new MaxLatticeDefault (model, (Sequence)instance.getData()).bestOutputAlignments(N); for (int i = 0; i < N; i++) costs[i] = as.get(i).getWeight(); double latticeCost = lattice.getTotalWeight(); double prFirstIsCorrect = Math.exp( latticeCost - costs[0] ); double prOtherIsCorrect = 0.0; for (int i=1; i < N; i++) prOtherIsCorrect += Math.exp( latticeCost - costs[i] ); return prFirstIsCorrect / prOtherIsCorrect; } }
/** Calculates the confidence in the tagging of a {@link Instance}. */ public double estimateConfidenceFor (Instance instance, Object[] startTags, Object[] inTags) { SumLatticeDefault lattice = new SumLatticeDefault (model, (Sequence)instance.getData()); SequencePairAlignment viterbi = new MaxLatticeDefault (model, (Sequence)instance.getData()).bestOutputAlignment(); return Math.exp (viterbi.getWeight() - lattice.getTotalWeight()); } }
public double getDelta (int ip, int stateIndex) { if (lattice != null) { return getViterbiNode (ip, stateIndex).delta; } throw new RuntimeException ("Attempt to called getDelta() when lattice not stored."); }
public SequencePairAlignment<Object,State> bestStateAlignment () { return bestStateAlignments(1).get(0); }
public List<SequencePairAlignment<Object,Object>> bestOutputAlignments (int n) { if (outputAlignmentCache != null && outputAlignmentCache.size() >= n) return outputAlignmentCache; bestViterbiNodeSequences(n); // ensure that viterbiNodeAlignmentCache has at least size n ArrayList<SequencePairAlignment<Object,Object>> ret = new ArrayList<SequencePairAlignment<Object,Object>>(n); for (int i = 0; i < n && i < viterbiNodeAlignmentCache.size(); i++) { Object[] ss = new Object[latticeLength-1]; Sequence<ViterbiNode> vs = viterbiNodeAlignmentCache.get(i).output(); for (int j = 0; j < latticeLength-1; j++) ss[j] = vs.get(j+1).output; // Here is where we grab the output from the ViterbiNode destination ret.add(new SequencePairAlignment<Object,Object>(input, new ArraySequence<Object>(ss), viterbiNodeAlignmentCache.get(i).getWeight())); } outputAlignmentCache = ret; return ret; }
public MaxLattice newMaxLattice (Transducer trans, Sequence inputSequence, Sequence outputSequence) { return new MaxLatticeDefault (trans, inputSequence, outputSequence); }
public double elementwiseAccuracy (Sequence referenceOutput) { int accuracy = 0; Sequence output = bestOutputSequence(); assert (referenceOutput.size() == output.size()); for (int i = 0; i < output.size(); i++) { //logger.fine("tokenAccuracy: ref: "+referenceOutput.get(i)+" viterbi: "+output.get(i)); if (referenceOutput.get(i).toString().equals (output.get(i).toString())) { accuracy++; } } logger.info ("Number correct: " + accuracy + " out of " + output.size()); return ((double)accuracy)/output.size(); }
/** Calculates the confidence in the tagging of an {@link Instance}. */ public double estimateConfidenceFor (Instance instance, Object[] startTags, Object[] inTags) { SumLatticeDefault lattice = new SumLatticeDefault (model, (Sequence)instance.getData()); //ViterbiPathNBest bestViterbis = new ViterbiPathNBest (model, (Sequence)instance.getData(), 2); //double[] costs = bestViterbis.costNBest(); MaxLatticeDefault vlat = new MaxLatticeDefault (model, (Sequence)instance.getData(), null, 2); List<SequencePairAlignment<Object,Object>> alignments = vlat.bestOutputAlignments(2); double cost1 = alignments.get(0).getWeight(); double cost2 = alignments.get(1).getWeight(); double latticeCost = lattice.getTotalWeight(); return (Math.exp (-cost1 + latticeCost) / Math.exp(-cost2 + latticeCost)); } }
/** Calculates the confidence in the tagging of a {@link Instance}. */ public double estimateConfidenceFor (Instance instance, Object[] startTags, Object[] inTags) { SumLatticeDefault lattice = new SumLatticeDefault (model, (Sequence)instance.getData()); SequencePairAlignment viterbi = new MaxLatticeDefault (model, (Sequence)instance.getData()).bestOutputAlignment(); return Math.exp (viterbi.getWeight() - lattice.getTotalWeight()); } }
public double getDelta (int ip, int stateIndex) { if (lattice != null) { return getViterbiNode (ip, stateIndex).delta; } throw new RuntimeException ("Attempt to called getDelta() when lattice not stored."); }
public SequencePairAlignment<Object,State> bestStateAlignment () { return bestStateAlignments(1).get(0); }
public List<SequencePairAlignment<Object,Object>> bestOutputAlignments (int n) { if (outputAlignmentCache != null && outputAlignmentCache.size() >= n) return outputAlignmentCache; bestViterbiNodeSequences(n); // ensure that viterbiNodeAlignmentCache has at least size n ArrayList<SequencePairAlignment<Object,Object>> ret = new ArrayList<SequencePairAlignment<Object,Object>>(n); for (int i = 0; i < n; i++) { Object[] ss = new Object[latticeLength-1]; Sequence<ViterbiNode> vs = viterbiNodeAlignmentCache.get(i).output(); for (int j = 0; j < latticeLength-1; j++) ss[j] = vs.get(j+1).output; // Here is where we grab the output from the ViterbiNode destination ret.add(new SequencePairAlignment<Object,Object>(input, new ArraySequence<Object>(ss), viterbiNodeAlignmentCache.get(i).getWeight())); } outputAlignmentCache = ret; return ret; }
public MaxLattice newMaxLattice (Transducer trans, Sequence inputSequence, Sequence outputSequence) { return new MaxLatticeDefault (trans, inputSequence, outputSequence); }
public double elementwiseAccuracy (Sequence referenceOutput) { int accuracy = 0; Sequence output = bestOutputSequence(); assert (referenceOutput.size() == output.size()); for (int i = 0; i < output.size(); i++) { //logger.fine("tokenAccuracy: ref: "+referenceOutput.get(i)+" viterbi: "+output.get(i)); if (referenceOutput.get(i).toString().equals (output.get(i).toString())) { accuracy++; } } logger.info ("Number correct: " + accuracy + " out of " + output.size()); return ((double)accuracy)/output.size(); }
public void testViterbi () { double weight = new MaxLatticeDefault (transducer, seq).bestWeight(); System.out.println ("weight = "+weight); assertTrue (weight == seqWeight); }
/** Calculates the confidence in the tagging of a {@link Instance}. */ public double estimateConfidenceFor (Instance instance, Object[] startTags, Object[] inTags) { Sequence[] predictions = new Sequence[committee.length]; for (int i = 0; i < committee.length; i++) predictions[i] = new MaxLatticeDefault (committee[i], (Sequence)instance.getData()).bestOutputSequence(); // Higher return value means higher confidence this sequence is correct. double avg = avgVoteEntropy(predictions); return -1.0 * avg; }