public Predict getNLabels(int labels_num){ Predict<T> pred=new Predict<T>(labels_num); Map<T, Integer> labelCount = new HashMap<T, Integer>(); for(int i=0;i<n;i++){ if(labels[i]==null) continue; int tempCount; if(labelCount.containsKey(labels[i])) tempCount=labelCount.get(labels[i]); else tempCount=0; tempCount++; labelCount.put(labels[i], tempCount); } for(int i=0;i<n;i++){ if(labelCount.containsKey(labels[i])){ pred.add(labels[i], labelCount.get(labels[i])); labelCount.remove(labels[i]); } } return pred; } }
private Predict<int[][]> getForwardPath(Node[][][] lattice) { Predict<int[][]> res = new Predict<int[][]>(); float maxScore = Float.NEGATIVE_INFINITY; int u = -1; int d = -1; for (int j = 0; j < ysize[1]; j++) { for (int i = 0; i < ysize[0]; i++) { if (lattice[1][length - 1][j].prev[i] != -1 || length == 1) { float score = lattice[1][length - 1][j].score[i]; if (score > maxScore) { maxScore = score; u = i; d = j; } } } } int[][] path = new int[2][length]; path[0][length - 1] = u; path[1][length - 1] = d; for (int i = length - 2; i >= 0; i--) { d = lattice[1][i + 1][d].prev[u]; path[1][i] = d; u = lattice[0][i + 1][u].prev[d]; path[0][i] = u; } res.add(path,maxScore); return res; }
/** * 回溯获得最优路径 * @param lattice 网格 * @return 最优路径及其得分 */ protected Predict<int[]> getPath(Node[][] lattice) { Predict<int[]> res = new Predict<int[]>(); if (lattice.length == 0) return res; float max = Float.NEGATIVE_INFINITY; int cur = 0; for (int c = 0; c < ysize(); c++) { if (lattice[lattice.length-1][c] == null) continue; if (lattice[lattice.length - 1][c].score > max) { max = lattice[lattice.length - 1][c].score; cur = c; } } int[] path = new int[lattice.length]; path[lattice.length - 1] = cur; for (int l = lattice.length - 1; l > 0; l--) { cur = lattice[l][cur].prev; path[l - 1] = cur; } res.add(path,max); return res; }
public Predict getBest(Instance inst, int n) { Integer target = null; if (isUseTarget && inst.getTarget() != null) target = (Integer) inst.getTarget(); Predict<Integer> pred = new Predict<Integer>(n); Predict<Integer> oracle = null; if (target != null) { oracle = new Predict<Integer>(n); } for (int i = 0; i < ysize; i++) { ISparseVector fv = generator.getVector(inst, i); float score = fv.dotProduct(weights); if (target != null && target == i) oracle.add(i,score); else pred.add(i,score); } return pred; }
public Predict<int[]> getBest(Instance inst) { Sentence sent = (Sentence) inst; Predict<DependencyTree> res = _getBestParse(sent); float score = res.getScore(0); DependencyTree dt = res.getLabel(0); Predict<int[]> ret = new Predict<int[]>(); int[] preds = new int[sent.length()]; Arrays.fill(preds, -1); DependencyTree.toArrays(dt, preds); ret.add(preds,score); return ret; }
public Predict<int[]> getBest(Instance inst) { Sentence sent = (Sentence) inst; Predict<DependencyTree> res = _getBestParse(sent); float score = res.getScore(0); DependencyTree dt = res.getLabel(0); Predict<int[]> ret = new Predict<int[]>(); int[] preds = new int[sent.length()]; Arrays.fill(preds, -1); DependencyTree.toArrays(dt, preds); ret.add(preds,score); return ret; }
res.add(state.trees.get(0),score); return res;
private Predict<DependencyTree> _getBestParse(Sentence sent){ float score = 0.0f; // 分析中的状态 JointParsingState state = new JointParsingState(sent); while (!state.isFinalState()) { Predict<String> estimates; estimates = estimateActions(state); String action = estimates.getLabel(0); if (!action.equals("S")){ doNext(action ,state); score +=estimates.getScore(0); } else{ action = estimates.getLabel(1); float s = estimates.getScore(1); doNext(action,s,state); score +=estimates.getScore(1); } } Predict<DependencyTree> res = new Predict<DependencyTree>(); res.add(state.trees.get(0),score); return res; }
res.add(type, score[type]);
private Predict<int[]> getPath(Node[][] lattice, int nbest) { float best; Node lastNode = new Node(nbest); int last = lattice.length - 1; for (int s = 0; s < getTemplets().numStates; s++) { for (int ibest = 0; ibest < nbest; ibest++) { best = lattice[last][s].best[ibest]; lastNode.addBest(best, s * nbest + ibest); } } Predict<int[]> res = new Predict<int[]>(nbest); for (int k = 0; k < nbest; k++) { int[] path = new int[lattice.length]; int p = last; int s = lastNode.prev[k]; float score = lastNode.best[k]; for (int d = s / nbest, i = 0; i < getTemplets().maxOrder && p >= 0; i++, p--) { path[p] = d % ysize; d = d / ysize; } while (p >= 0) { path[p] = s / nbest / getTemplets().base[getTemplets().maxOrder]; s = lattice[p + getTemplets().maxOrder][s / nbest].prev[s % nbest]; --p; } res.add(path,score); } return res; }
break; String action = la.lookupString(guess); result.add(action,ret.getScore(i));