【发布时间】:2017-09-28 09:05:44
【问题描述】:
所以我的要求很简单。我需要基于自定义实体的 StanfordCoreNLP 默认模型以及我的自定义训练模型。在最后的运行中,我需要能够从给定的句子中分离出特定的短语(将使用 RegexNER)
以下是我的努力:-
努力我:- 所以我想使用 StanfordCoreNLP CRF 文件、标记器文件和 ner 模型文件,以及我的自定义训练 ner 模型。 我试图找到是否有任何官方方法可以做到这一点,但没有得到任何东西。 StanfordCoreNLP 管道有一个属性“ner.model”,但如果使用它会跳过默认的。
EFFORT II:- 接下来(可能不是最聪明的事情。对不起!只是一个努力维持生计的人!),我提取了模型
stanford-corenlp-models-3.7.0.jar ,并复制所有:-
*.ser.gz (Parser Models)
*.tagger (POS Tagger)
*.crf.ser.gz (NER CRF Files)
并尝试将逗号分隔值分别与属性“parser.model”、“pos.model”和“ner.model”放在一起,如下所示:-
parser.model=models/ner/default/anaphoricity_model.ser.gz,models/ner/default/anaphoricity_model_conll.ser.gz,models/ner/default/classification_model.ser.gz,models/ner/default/classification_model_conll.ser.gz,models/ner/default/clauseSearcherModel.ser.gz,models/ner/default/clustering_model.ser.gz,models/ner/default/clustering_model_conll.ser.gz,models/ner/default/english-embeddings.ser.gz,models/ner/default/english-model-conll.ser.gz,models/ner/default/english-model-default.ser.gz,models/ner/default/englishFactored.ser.gz,models/ner/default/englishPCFG.caseless.ser.gz,models/ner/default/englishPCFG.ser.gz,models/ner/default/englishRNN.ser.gz,models/ner/default/englishSR.beam.ser.gz,models/ner/default/englishSR.ser.gz,models/ner/default/gender.map.ser.gz,models/ner/default/md-model-dep.ser.gz,models/ner/default/ranking_model.ser.gz,models/ner/default/ranking_model_conll.ser.gz,models/ner/default/sentiment.binary.ser.gz,models/ner/default/sentiment.ser.gz,models/ner/default/truecasing.fast.caseless.qn.ser.gz,models/ner/default/truecasing.fast.qn.ser.gz,models/ner/default/word_counts.ser.gz,models/ner/default/wsjFactored.ser.gz,models/ner/default/wsjPCFG.ser.gz,models/ner/default/wsjRNN.ser.gz
ner.model=models/ner/default/english.all.3class.caseless.distsim.crf.ser.gz,models/ner/default/english.all.3class.distsim.crf.ser.gz,models/ner/default/english.all.3class.nodistsim.crf.ser.gz,models/ner/default/english.conll.4class.caseless.distsim.crf.ser.gz,models/ner/default/english.conll.4class.distsim.crf.ser.gz,models/ner/default/english.conll.4class.nodistsim.crf.ser.gz,models/ner/default/english.muc.7class.caseless.distsim.crf.ser.gz,models/ner/default/english.muc.7class.distsim.crf.ser.gz,models/ner/default/english.muc.7class.nodistsim.crf.ser.gz,models/ner/default/english.nowiki.3class.caseless.distsim.crf.ser.gz,models/ner/default/english.nowiki.3class.nodistsim.crf.ser.gz
pos.model=models/tagger/default/english-left3words-distsim.tagger
但是,我得到以下异常:-
Caused by: edu.stanford.nlp.io.RuntimeIOException: Error while loading a tagger model (probably missing model file)
Caused by: java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
EFFORT III:- 我认为我可以使用 RegexNER 处理,并且在某种程度上我是成功的。只是它通过 RegexNER 学习的实体不适用于即将出现的表达式。例如:它会在文本中找到实体“CUSTOM_ENTITY”,但如果我放一个像
这样的 RegexNER ( [ {ner:CUSTOM_ENTITY} ] /with/ [ {ner:CUSTOM_ENTITY} ] ) 它永远无法找到正确的短语。
这里真的需要帮助!!!我不想再次训练完整的模型,斯坦福大学的人得到了超过 GB 的模型信息,这对我很有用。只是我也想添加自定义实体。
【问题讨论】:
-
对不起,错误的标题!我该如何改变它?这是针对 StanfordNLP,而不是 OpenNLP
-
不是一个真正的答案,所以我只是把它作为一个评论,但是:在你的类路径中包含 corenlp-models.jar 文件实际上要容易得多,然后你不要'不必为模型指定自定义路径。您遇到的问题似乎是损坏的 POS 模型文件。我不清楚到底出了什么问题(也许它需要一个 gzip 文件?)。
标签: nlp stanford-nlp