{"record":{"id":"79046da614495019","repo":"stanfordnlp/CoreNLP","slug":"number-of-gold-and-predicted-trees-not-equal","errorCode":null,"errorMessage":"Number of gold and predicted trees not equal!","messagePattern":"Number of gold and predicted trees not equal!","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/edu/stanford/nlp/sentiment/ExternalEvaluate.java","lineNumber":31,"sourceCode":" *\n * @author Michael Haas {@literal <haas@cl.uni-heidelberg.de>}\n */\npublic class ExternalEvaluate extends AbstractEvaluate  {\n\n  /** A logger for this class */\n  private static final Redwood.RedwoodChannels log = Redwood.channels(ExternalEvaluate.class);\n\n  private List<Tree> predicted;\n\n  public ExternalEvaluate(RNNOptions op, List<Tree> predictedTrees) {\n    super(op);\n    this.predicted = predictedTrees;\n  }\n\n  @Override\n  public void populatePredictedLabels(List<Tree> trees) {\n    if (trees.size() != this.predicted.size()) {\n      throw new IllegalArgumentException(\"Number of gold and predicted trees not equal!\");\n    }\n    for (int i = 0; i < trees.size(); i++) {\n      Iterator<Tree> goldTree = trees.get(i).iterator();\n      Iterator<Tree> predictedTree = this.predicted.get(i).iterator();\n      while (goldTree.hasNext() || predictedTree.hasNext()) {\n        Tree goldNode = goldTree.next();\n        Tree predictedNode = predictedTree.next();\n        if (goldNode == null || predictedNode == null) {\n          throw new IllegalArgumentException(\"Trees not of equal length\");\n        }\n        if (goldNode.isLeaf()) {\n          continue;\n        }\n        CoreLabel label = (CoreLabel) goldNode.label();\n        label.set(RNNCoreAnnotations.PredictedClass.class,\n                RNNCoreAnnotations.getPredictedClass(predictedNode));\n      }\n    }","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/stanfordnlp/CoreNLP/blob/1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a/src/edu/stanford/nlp/sentiment/ExternalEvaluate.java#L13-L49","documentation":"ExternalEvaluate.populatePredictedLabels compares a list of gold trees against pre-supplied predicted trees and requires one predicted tree per gold tree. If the list sizes differ it throws IllegalArgumentException before per-tree label propagation begins.","triggerScenarios":"Constructing ExternalEvaluate (or calling populatePredictedLabels) with a predictedTrees list whose size differs from the number of gold trees passed in.","commonSituations":"Prediction file has fewer/more lines than the gold treebank (blank lines skipped inconsistently); filterUnknown applied to one list but not the other; concatenated prediction outputs misaligned.","solutions":["Ensure both lists have the same number of trees (check sizes before calling)","Regenerate predictions against the exact same tree list used as gold, applying identical filtering","Check the prediction file for skipped/extra lines (blank lines, trailing newline handling)"],"exampleFix":"// before\nList<Tree> gold = SentimentUtils.readTreesWithGoldLabels(treePath);\nList<Tree> pred = readPredictions(\"pred.txt\"); // e.g. 10 fewer lines\n// after\nassert gold.size() == pred.size();\nList<Tree> pred = readPredictionsAligned(\"pred.txt\", gold.size());","handlingStrategy":"validation","validationCode":"if (goldTrees.size() != predictedTrees.size()) {\n  throw new IllegalArgumentException(\"gold=\" + goldTrees.size() + \" predicted=\" + predictedTrees.size());\n}","typeGuard":"static boolean aligned(List<Tree> gold, List<Tree> pred) { return gold != null && pred != null && gold.size() == pred.size(); }","tryCatchPattern":"try {\n  externalEval.populatePredictedLabels(goldTrees);\n} catch (IllegalArgumentException e) {\n  log.error(\"Gold/predicted count mismatch: \" + e.getMessage());\n}","preventionTips":["Apply identical filtering (e.g. filterUnknown) to both gold and predicted lists","Log both list sizes before evaluation","Regenerate predictions from the exact same tree list used as gold"],"tags":["sentiment","evaluation","argument-validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a","analyzedAt":"2026-09-10T02:24:07.274Z","contentChangedAt":"2026-09-10T02:24:07.274Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}