【发布时间】:2017-01-27 17:55:20
【问题描述】:
Stanford NER 是否有一个类/方法来计算 Java 中的 Precision/Recall(不是命令行)?
我已经能够像这样在 Java 中使用我的训练数据训练我的模型:
Properties props = StringUtils.propFileToProperties("classifierTraining/austen.prop");
SeqClassifierFlags flags = new SeqClassifierFlags(props);
CRFClassifier<CoreLabel> crf = new CRFClassifier<CoreLabel>(flags);
crf.train();
crf.serializeClassifier("classifierTraining/model.ser.gz");
是否可以使用 Stanford NLP 包以编程方式对测试数据集执行交叉验证?我看到三年前的this question,当时它说“不”。
有没有办法在 Java 中以编程方式在测试数据集上运行经过训练的分类器,并获得精度/召回值(不使用命令行)?这样,我应该能够手动拆分数据集并在其上运行代码以进行交叉验证。
更新:我意识到在新的 3.7.0 包中,我可以使用以下方法来获得精度、召回率和 F1,但这是所有类型实体(个人、组织、位置)的平均值。有没有办法为特定实体获取它们?
Triple<Double,Double,Double> scores = crf.classifyAndWriteAnswers("classifierTraining/testFileTokenized.txt", true);
【问题讨论】:
-
您有没有找到实现这一目标的方法?
-
没有。最接近的是我上面包含的最后一行代码。
-
我也认为这将是一个特别有用的功能。代码在那里,使用 CLI 我可以看到实体特定的指标。也许您可以通过github.com/stanfordnlp/CoreNLP/issues 提出建议
-
如果 CLI 版本确实打印每个实体结果,那么必须能够在某处找到代码。奇怪的是,我查看了
CRFClassifier.java和AbstractSequenceClassifier.java,似乎只能找到输出一组(精度、召回、F1)分数而不是每个实体分数的多组的代码。
标签: java stanford-nlp