我正在使用StanfordCoreNLP API接口以编程方式执行一些基本的NLP.我需要在我自己的语料库上训练一个模型,但是我想使用StanfordCoreNLP接口来完成它,因为它在幕后处理了很多干技术,我不需要太多的专业化.
我已经训练了一个我想用于NER的CRFC分类器,序列化为一个文件.根据文档,我认为以下内容可行,但它似乎没有找到我的模型,而是barfs无法找到标准模型(我不知道为什么我没有这些模型文件,但我不关心它,因为我不想使用它们):
// 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 repo并使用ant编译编译.无论如何,我不想使用他们的模型,我想使用我训练的那个).
如何让StanfordCoreNLP接口在ner步骤中使用我的模型?有可能吗?不可能?
最佳答案 属性名称是ner.model,而不是ner.models,因此您的代码仍在尝试加载默认模型.
如果在某处记录错误,请告诉我.