stanfordnlp/CoreNLP · error · java.lang.IllegalArgumentException

Expected parsers with DVModel embedded

Error message

Expected parsers with DVModel embedded

What it means

CombineDVModels expects each base model loaded via LexicalizedParser.loadModel to carry an embedded DVModel reranker; when parser.reranker is not a DVModelReranker it throws IllegalArgumentException. Plain (non-neural) parsers or parsers saved with a different reranker cannot contribute a DVModel to the combination.

Solutions

  1. Only pass serialized parsers that were trained with DVParser (DVModel embedded) to -baseModels
  2. Re-train the base models with dvparser options so a DVModelReranker is embedded
  3. Verify each model path loads as a DVParser before combining

Example fix

// before
-baseModels englishPCFG.ser.gz dvparser.ser.gz
// after
-baseModels dvparser1.ser.gz dvparser2.ser.gz
Defensive patterns

Strategy: type-guard

Validate before calling

LexicalizedParser p = LexicalizedParser.loadModel(path);
if (!(p.reranker instanceof DVModelReranker)) {
    throw new IllegalArgumentException(path + " is not a DVParser model");
}

Type guard

boolean hasDvModel(LexicalizedParser p) {
    return p != null && p.reranker instanceof DVModelReranker;
}

Try / catch

try {
    CombineDVModels.main(args);
} catch (IllegalArgumentException e) {
    if (e.getMessage().contains("DVModel embedded")) {
        System.err.println("All -baseModels must be parsers trained with DVParser");
    }
}

Prevention

When it happens

Trigger: Passing a serialized LexicalizedParser trained without a DV model (or a plain parser model like an English PCFG model file) to -baseModels, so the loaded parser's reranker field is null or a different Reranker implementation.

Common situations: Mixing vanilla parser models with DV-trained models in the -baseModels list; pointing at a model file from an older/different pipeline; confusing the underlying parser model with a DVParser model.

Understand the failure class

Background: Type mismatch errors: IllegalArgumentException, TypeError and type guards across 150 open-source libraries — this error's family across 150 libraries.

Related errors


AI-assisted analysis of stanfordnlp/CoreNLP@1b7edd19c4 (2026-09-10). Data as JSON: /api/errors/0b0d5d3f8aec21a4. Report an issue: GitHub.

Appendix: source

Thrown at src/edu/stanford/nlp/parser/dvparser/CombineDVModels.java:75

          throw new IllegalArgumentException("Found an argument -baseModels with no actual models named");
        }
      } else {
        unusedArgs.add(args[argIndex++]);
      }
    }

    String[] newArgs = unusedArgs.toArray(new String[unusedArgs.size()]);
    LexicalizedParser underlyingParser = null;
    Options options = null;
    LexicalizedParser combinedParser = null;
    if (baseModelPaths != null) {
      List<DVModel> dvparsers = new ArrayList<>();
      for (String baseModelPath : baseModelPaths) {
        log.info("Loading serialized DVParser from " + baseModelPath);
        LexicalizedParser dvparser = LexicalizedParser.loadModel(baseModelPath);
        Reranker reranker = dvparser.reranker;
        if (!(reranker instanceof DVModelReranker)) {
          throw new IllegalArgumentException("Expected parsers with DVModel embedded");
        }
        dvparsers.add(((DVModelReranker) reranker).getModel());
        if (underlyingParser == null) {
          underlyingParser = dvparser;
          options = underlyingParser.getOp();
          // TODO: other parser's options?
          options.setOptions(newArgs);
        }
        log.info("... done");
      }
      combinedParser = LexicalizedParser.copyLexicalizedParser(underlyingParser);
      CombinedDVModelReranker reranker = new CombinedDVModelReranker(options, dvparsers);
      combinedParser.reranker = reranker;
      combinedParser.saveParserToSerialized(modelPath);
    } else {
      throw new IllegalArgumentException("Need to specify -model to load an already prepared CombinedParser");
    }

View on GitHub (pinned to 1b7edd19c4)