private static void outputLatticeRows (PrintWriter out, MaxLattice lattice, int start, int end) { DecimalFormat f = new DecimalFormat ("0.##"); Transducer ducer = lattice.getTransducer (); int max = Math.min (numMaxViterbi, ducer.numStates()); List<Sequence<Transducer.State>> stateSequences = lattice.bestStateSequences(max); for (int k = 0; k < max; k++) { out.println (" <tr class=\"delta\">"); out.println (" <td class=\"label\">δ rank "+k+"</td>"); for (int ip = start; ip < end; ip++) { Transducer.State state = stateSequences.get(k).get(ip+1); if (state.getName().equals (lattice.bestOutputSequence().get(ip))) { out.print ("<td class=\"viterbi\">"); } else { out.print ("<td>"); } out.print (state.getName()+"<br />"+f.format (-lattice.getDelta (ip+1, state.getIndex ()))+"</td>"); } out.println ("</tr>"); } }
/** * Converts the given sequence into another sequence according to this transducer. * For exmaple, probabilistic transducer may do something like Viterbi here. * Subclasses of transducer may specify that they only accept special kinds of sequence. * @param input Input sequence * @return Sequence output by this transudcer */ public Sequence transduce (Sequence input) { return maxLatticeFactory.newMaxLattice(this, (Sequence)input).bestOutputSequence(); }
private static void outputTransitionCosts (PrintWriter out, ExtorInfo info, int start, int end) Transducer ducer = info.lattice.getTransducer ();
Sequence<Transducer.State> viterbiPath = lattice.bestStateSequence();
private Sequence<String> getCoding(Word word, int expectedSylls) { Instance instance = new Instance(word, null, null, null); instance = crf.getInputPipe().instanceFrom(instance); Sequence inSeq = (Sequence) instance.getData(); List<Sequence<Object>> outSeqs = crf.getMaxLatticeFactory().newMaxLattice(crf, inSeq).bestOutputSequences(10); for (Sequence outSeq : outSeqs) { // see if the outSeq is legal and if so then return it if (isLegal(word.getValue(), outSeq, expectedSylls)) { return outSeq; } } // none legal? just return highest probability return (Sequence) outSeqs.get(0); }
/** * Converts the given sequence into another sequence according to this transducer. * For exmaple, probabilistic transducer may do something like Viterbi here. * Subclasses of transducer may specify that they only accept special kinds of sequence. * @param input Input sequence * @return Sequence output by this transudcer */ public Sequence transduce (Sequence input) { return maxLatticeFactory.newMaxLattice(this, (Sequence)input).bestOutputSequence(); }
private static void outputTransitionCosts (PrintWriter out, ExtorInfo info, int start, int end) Transducer ducer = info.lattice.getTransducer ();
Sequence<Transducer.State> viterbiPath = lattice.bestStateSequence();
public List<TagResult> tag(Alignment alignment, int nBest) { Instance instance = new Instance(alignment, null, null, null); instance = tduc.getInputPipe().instanceFrom(instance); Sequence inSeq = (Sequence) instance.getData(); List<Sequence<Object>> outSeqs = tduc.getMaxLatticeFactory().newMaxLattice(tduc, inSeq).bestOutputSequences(nBest); ArrayList<TagResult> results = Lists.newArrayListWithCapacity(outSeqs.size()); double z = tduc.getSumLatticeFactory().newSumLattice(tduc, inSeq).getTotalWeight(); for (Sequence<Object> outSeq : outSeqs) { double score = tduc.getSumLatticeFactory().newSumLattice(tduc, inSeq, outSeq).getTotalWeight(); results.add(makeTagResult(outSeq, score - z)); } return results; }
private static void outputLatticeRows (PrintWriter out, MaxLattice lattice, int start, int end) { DecimalFormat f = new DecimalFormat ("0.##"); Transducer ducer = lattice.getTransducer (); int max = Math.min (numMaxViterbi, ducer.numStates()); List<Sequence<Transducer.State>> stateSequences = lattice.bestStateSequences(max); for (int k = 0; k < max; k++) { out.println (" <tr class=\"delta\">"); out.println (" <td class=\"label\">δ rank "+k+"</td>"); for (int ip = start; ip < end; ip++) { Transducer.State state = stateSequences.get(k).get(ip+1); if (state.getName().equals (lattice.bestOutputSequence().get(ip))) { out.print ("<td class=\"viterbi\">"); } else { out.print ("<td>"); } out.print (state.getName()+"<br />"+f.format (-lattice.getDelta (ip+1, state.getIndex ()))+"</td>"); } out.println ("</tr>"); } }
/** * Converts the given sequence into another sequence according to this transducer. * For exmaple, probabilistic transducer may do something like Viterbi here. * Subclasses of transducer may specify that they only accept special kinds of sequence. * @param input Input sequence * @return Sequence output by this transudcer */ public Sequence transduce (Sequence input) { return maxLatticeFactory.newMaxLattice(this, (Sequence)input).bestOutputSequence(); }
private static void outputTransitionCosts (PrintWriter out, ExtorInfo info, int start, int end) Transducer ducer = info.lattice.getTransducer ();
@Override public List<Alignment> inferAlignments(Word x, int nBest) { Instance instance = new Instance(x.getValue(), null, null, null); instance = crf.getInputPipe().instanceFrom(instance); Sequence inSeq = (Sequence) instance.getData(); List<Sequence<Object>> outSeqs = crf.getMaxLatticeFactory().newMaxLattice(crf, inSeq).bestOutputSequences(nBest); ArrayList<Alignment> results = Lists.newArrayListWithCapacity(outSeqs.size()); double z = crf.getSumLatticeFactory().newSumLattice(crf, inSeq).getTotalWeight(); for (Sequence<Object> outSeq : outSeqs) { double score = crf.getSumLatticeFactory().newSumLattice(crf, inSeq, outSeq).getTotalWeight(); Alignment align = makeAlignment(x, outSeq, score - z); if (!resultsContain(align.getGraphones(), results)) { results.add(align); } } return results; }
private static void outputLatticeRows (PrintWriter out, MaxLattice lattice, int start, int end) { DecimalFormat f = new DecimalFormat ("0.##"); Transducer ducer = lattice.getTransducer (); int max = Math.min (numMaxViterbi, ducer.numStates()); List<Sequence<Transducer.State>> stateSequences = lattice.bestStateSequences(max); for (int k = 0; k < max; k++) { out.println (" <tr class=\"delta\">"); out.println (" <td class=\"label\">δ rank "+k+"</td>"); for (int ip = start; ip < end; ip++) { Transducer.State state = stateSequences.get(k).get(ip+1); if (state.getName().equals (lattice.bestOutputSequence().get(ip))) { out.print ("<td class=\"viterbi\">"); } else { out.print ("<td>"); } out.print (state.getName()+"<br />"+f.format (-lattice.getDelta (ip+1, state.getIndex ()))+"</td>"); } out.println ("</tr>"); } }
public Set<Integer> tagSyllStarts(List<String> wordUnigrams) { Instance instance = new Instance(wordUnigrams, null, null, null); instance = crf.getInputPipe().instanceFrom(instance); Sequence inSeq = (Sequence) instance.getData(); Sequence<Object> outSeqs = crf.getMaxLatticeFactory().newMaxLattice(crf, inSeq).bestOutputSequence(); return SyllTagTrainer.startsFromGraphemeSyllEnding(outSeqs); } }
@Override public List<Alignment> inferAlignments(Word x, int nBest) { Instance instance = new Instance(x.getValue(), null, null, null); instance = crf.getInputPipe().instanceFrom(instance); Sequence inSeq = (Sequence) instance.getData(); List<Sequence<Object>> outSeqs = crf.getMaxLatticeFactory().newMaxLattice(crf, inSeq).bestOutputSequences(nBest); ArrayList<Alignment> results = Lists.newArrayListWithCapacity(outSeqs.size()); double z = crf.getSumLatticeFactory().newSumLattice(crf, inSeq).getTotalWeight(); for (Sequence<Object> outSeq : outSeqs) { double score = crf.getSumLatticeFactory().newSumLattice(crf, inSeq, outSeq).getTotalWeight(); List<Pair<String, String>> graphemes = makeGraphemes(x, outSeq); if (!resultsContain(graphemes, results)) { results.add(new Alignment(x, graphemes, score - z)); } } return results; }
public Set<Integer> tagSyllStarts(List<String> wordUnigrams) { Instance instance = new Instance(wordUnigrams, null, null, null); instance = crf.getInputPipe().instanceFrom(instance); Sequence inSeq = (Sequence) instance.getData(); Sequence<Object> outSeqs = crf.getMaxLatticeFactory().newMaxLattice(crf, inSeq).bestOutputSequence(); return SyllTagTrainer.startsFromGraphemeSyllEnding(outSeqs); } }
/** * Runs inference across all the instances and returns the average token * accuracy. */ public double averageTokenAccuracy (InstanceList ilist) { double accuracy = 0; for (int i = 0; i < ilist.size(); i++) { Instance instance = ilist.get(i); Sequence input = (Sequence) instance.getData(); Sequence output = (Sequence) instance.getTarget(); assert (input.size() == output.size()); Sequence predicted = maxLatticeFactory.newMaxLattice(this, input).bestOutputSequence(); double pathAccuracy = Sequences.elementwiseAccuracy(output, predicted); accuracy += pathAccuracy; logger.fine ("Transducer path accuracy = "+pathAccuracy); } return accuracy/ilist.size(); }
/** * Runs inference across all the instances and returns the average token * accuracy. */ public double averageTokenAccuracy (InstanceList ilist) { double accuracy = 0; for (int i = 0; i < ilist.size(); i++) { Instance instance = ilist.get(i); Sequence input = (Sequence) instance.getData(); Sequence output = (Sequence) instance.getTarget(); assert (input.size() == output.size()); Sequence predicted = maxLatticeFactory.newMaxLattice(this, input).bestOutputSequence(); double pathAccuracy = Sequences.elementwiseAccuracy(output, predicted); accuracy += pathAccuracy; logger.fine ("Transducer path accuracy = "+pathAccuracy); } return accuracy/ilist.size(); }
/** * Runs inference across all the instances and returns the average token * accuracy. */ public double averageTokenAccuracy (InstanceList ilist) { double accuracy = 0; for (int i = 0; i < ilist.size(); i++) { Instance instance = ilist.get(i); Sequence input = (Sequence) instance.getData(); Sequence output = (Sequence) instance.getTarget(); assert (input.size() == output.size()); Sequence predicted = maxLatticeFactory.newMaxLattice(this, input).bestOutputSequence(); double pathAccuracy = Sequences.elementwiseAccuracy(output, predicted); accuracy += pathAccuracy; logger.fine ("Transducer path accuracy = "+pathAccuracy); } return accuracy/ilist.size(); }