为什么 Stanford CoreNLP NER-annotator 默认加载 3 个模型?

Why does Stanford CoreNLP NER-annotator load 3 models by default?

当我将 "ner" 注释器添加到我的 StanfordCoreNLP 对象管道时,我可以看到它加载了 3 个模型,这需要很多时间:

Adding annotator ner
Loading classifier from edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz ... done [10.3 sec].
Loading classifier from edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz ... done [10.1 sec].
Loading classifier from edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz ... done [6.5 sec].
Initializing JollyDayHoliday for SUTime from classpath: edu/stanford/nlp/models/sutime/jollyday/Holidays_sutime.xml as sutime.binder.1.
Reading TokensRegex rules from edu/stanford/nlp/models/sutime/defs.sutime.txt
Reading TokensRegex rules from edu/stanford/nlp/models/sutime/english.sutime.txt
Reading TokensRegex rules from edu/stanford/nlp/models/sutime/english.holidays.sutime.txt

有没有办法只加载一个能同样工作的子集?特别是,我不确定为什么它在具有 7-class 模型时加载 3-class 和 4-class NER 模型,我想知道是否不加载这两个模型仍然会工作。

您可以通过这种方式设置加载哪些模型:

命令行:

-ner.model model_path1,model_path2

Java代码:

 props.put("ner.model", "model_path1,model_path2");

其中 model_path1 和 model_path2 应该是这样的:

"edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz"

模型是分层应用的。第一个模型是 运行 并应用了它的标签。然后是第二个,第三个,依此类推。如果您想要更少的模型,您可以在列表中放置 1 或 2 个模型,而不是默认的三个模型,但这会改变系统的执行方式。

如果您将 "ner.combinationMode" 设置为 "HIGH_RECALL",将允许所有模型应用其所有标签。如果您将 "ner.combinationMode" 设置为 "NORMAL",则未来的模型将无法应用之前模型设置的任何标签。

默认情况下的所有三个模型都在不同的数据上进行了训练。例如,3-class 使用比 7-class 模型多得多的数据进行训练。所以每个模型都在做不同的事情,它们的结果都被组合起来创建最终的标签序列。