{"record":{"id":"c48f876b0595d44a","repo":"stanfordnlp/CoreNLP","slug":"model-has-not-been-loaded-or-trained","errorCode":null,"errorMessage":"Model has not been loaded or trained","messagePattern":"Model has not been loaded or trained","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"src/edu/stanford/nlp/parser/nndep/DependencyParser.java","lineNumber":1195,"sourceCode":"      for (TypedDependency dep : deps)\n        output.println(dep);\n      output.println();\n\n      numSentences++;\n    }\n\n    long millis = timer.stop();\n    double seconds = millis / 1000.0;\n    log.info(String.format(\"Parsed %d sentences in %.2f seconds (%.2f sents/sec).%n\",\n        numSentences, seconds, numSentences / seconds));\n  }\n\n  /**\n   * Prepare for parsing after a model has been loaded.\n   */\n  private void initialize(boolean verbose) {\n    if (knownLabels == null)\n      throw new IllegalStateException(\"Model has not been loaded or trained\");\n\n    // NOTE: remove -NULL-, and then pass the label set to the ParsingSystem\n    List<String> lDict = new ArrayList<>(knownLabels);\n    lDict.remove(0);\n\n    system = new ArcStandard(config.tlp, lDict, verbose);\n\n    // Pre-compute matrix multiplications\n    if (config.numPreComputed > 0) {\n      classifier.preCompute();\n    }\n  }\n\n  /**\n   * Explicitly specifies the number of arguments expected with\n   * particular command line options.\n   */\n  private static final Map<String, Integer> numArgs = new HashMap<>();","sourceCodeStart":1177,"sourceCodeEnd":1213,"githubUrl":"https://github.com/stanfordnlp/CoreNLP/blob/1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a/src/edu/stanford/nlp/parser/nndep/DependencyParser.java#L1177-L1213","documentation":"initialize(verbose) builds the transition system (ArcStandard) from knownLabels after a model is loaded or training finished. If knownLabels is null, no model was loaded and training never ran, so IllegalStateException is thrown. This guards against parsing with an empty/uninitialized parser state.","triggerScenarios":"Calling parse()/predict paths that trigger initialize() on a DependencyParser constructed with `new DependencyParser(config)` where neither train(...) nor loadModel(...) was ever called.","commonSituations":"Creating a parser via constructor and calling parse without train/load; train or model-load failing silently earlier (exception swallowed) leaving knownLabels null; calling internal APIs out of order.","solutions":["Call DependencyParser.train(...) for training use cases before initialize/parse","Load a saved model with DependencyParser.load(modelFile) or loadModelFile before parsing","Check that a prior load/train didn't throw and was caught, leaving the parser uninitialized"],"exampleFix":"// before\nDependencyParser parser = new DependencyParser(config);\nparser.predict(sentence); // knownLabels == null -> throws\n// after\nDependencyParser parser = DependencyParser.load(\"model.txt.gz\");\nparser.predict(sentence);","handlingStrategy":"try-catch","validationCode":"DependencyParser parser = DependencyParser.load(modelPath); // initializes knownLabels and system\nparser.parse(sentence);","typeGuard":null,"tryCatchPattern":"try {\n  parser.parse(sentence);\n} catch (IllegalStateException e) {\n  parser = DependencyParser.load(modelPath);\n  parser.parse(sentence);\n}","preventionTips":["Never use `new DependencyParser(config)` directly for inference; use load/train factories","Confirm load/train completed (no swallowed exceptions) before parsing","Initialize parsers once at startup and reuse them"],"tags":["java","illegal-state","nndep","model-loading"],"backgroundTag":"invalid-state-transition","analyzedSha":"1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a","analyzedAt":"2026-09-10T02:24:07.274Z","contentChangedAt":"2026-09-10T02:24:07.274Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}