如何将序列化的 CRFClassifier 与 StanfordCoreNLP prop 'ner' 一起使用

How to use serialized CRFClassifier with StanfordCoreNLP prop 'ner'

我正在使用 StanfordCoreNLP API 界面以编程方式执行一些基本的 NLP。我需要在我自己的语料库上训练模型,但我想使用 StanfordCoreNLP 界面来完成它,因为它在幕后处理很多枯燥的机制,我不需要在那里做太多专业化.

我已经训练了一个 CRFClassifier,我想将其用于 NER,序列化到一个文件中。根据文档,我认为以下方法可行,但它似乎没有找到我的模型,而是因为无法找到标准模型而感到厌烦(我不确定为什么我没有那些模型文件,但我不关心它,因为我不想使用它们):

    // String constants
    final String serializedClassifierFilename = "/absolute/path/to/model.ser.gz";

    Properties props = new Properties();
    props.setProperty("annotators", "tokenize, ssplit, ner");
    props.setProperty("ner.models", serializedClassifierFilename);

    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

    String fileContents = IOUtils.slurpFileNoExceptions("test.txt");
    Annotation document = new Annotation(fileContents);

结果:

Adding annotator tokenize
TokenizerAnnotator: No tokenizer type provided. Defaulting to PTBTokenizer.
Adding annotator ssplit
Adding annotator ner
Loading classifier from /path/build/edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz ... java.io.FileNotFoundException: edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1554)

等等等等

我知道我没有他们的内置模型(同样,不确定为什么..我只是克隆了他们的 git 存储库并使用 ant compile 进行了编译。无论如何,我没有反正我不想用他们的模型,我想用我训练的那个)。

如何让 StanfordCoreNLP 接口在 ner 步骤中使用我的模型?有可能吗?不可能吗?

属性 名称是 ner.model,而不是 ner.models,因此您的代码仍在尝试加载默认模型。

如果某处记录不正确,请告诉我。