使用StanfordNLP进行标记器培训

使用StanfordNLP进行标记器培训,nlp,stanford-nlp,Nlp,Stanford Nlp,所以我的要求很简单。我需要StanfordCoreNLP默认模型以及基于自定义实体的自定义训练模型。在最后一次运行中,我需要能够从给定的句子中分离出特定的短语(将使用RegexNER) 以下是我的努力:- 努力I:- 所以我想使用StanfordCoreNLP CRF文件、tagger文件和ner模型文件,以及我的定制训练的ner模型。 我试图找出是否有任何官方的方法来做这件事,但没有得到任何结果。StanfordCoreNLP管道有一个属性“ner.model”,但如果使用,它将跳过默认属性

所以我的要求很简单。我需要StanfordCoreNLP默认模型以及基于自定义实体的自定义训练模型。在最后一次运行中,我需要能够从给定的句子中分离出特定的短语(将使用RegexNER)

以下是我的努力:-

努力I:- 所以我想使用StanfordCoreNLP CRF文件、tagger文件和ner模型文件,以及我的定制训练的ner模型。 我试图找出是否有任何官方的方法来做这件事,但没有得到任何结果。StanfordCoreNLP管道有一个属性“ner.model”,但如果使用,它将跳过默认属性

努力二:- 接下来(可能不是有史以来最聪明的事情。对不起!只是一个试图收支平衡的家伙!),我提取了模型,并复制了所有:-

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
努力三:- 我想我能处理好雷格斯纳的问题,我在某种程度上取得了成功。只是它通过RegexNER学习的实体不适用于即将出现的表达式。例如:它会在文本中找到实体“CUSTOM_entity”,但如果我使用类似的RegexNER,它永远无法找到正确的短语

 ( [ {ner:CUSTOM_ENTITY} ] /with/ [ {ner:CUSTOM_ENTITY} ] ) 

这里真的需要帮助!!!我不想再训练完整的模型了,斯坦福大学的家伙们得到了超过GB的模型信息,这对我很有用。我还想添加自定义实体。

首先确保类路径中包含正确的JAR

以下是您应该如何包括您的自定义模型:

java -Xmx8g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner -ner.model <csv-of-model-paths> -file example.txt
请注意,在我的示例中,所有标准模型都将运行,然后最终您的自定义模型将运行。确保自定义模型位于类路径中

您可能还需要将此添加到命令中:
-ner.combinationMode HIGH\u RECALL
。默认情况下,NER组合将仅使用来自第一个模型的特定类的标记。因此,如果有model1、model2、model3,则只会使用model1的位置。如果您将事物设置为
HIGH\u RECALL
,则还将使用model2和model3的位置标记

要记住的另一件事是,model2不能用model1覆盖决策。它只能覆盖“O”。因此,如果model1说某个特定标记是一个位置,model2就不能说它是一个组织、一个人或任何东西。所以你名单中的模型顺序很重要

如果要编写使用以前的规则找到的实体的规则,请查看我对这个问题的回答:


来自给定上下文

使用此值而不是逗号分隔的值,并尝试将所有JAR放在同一目录中:

parser.model=models/ner/default/anaphoricity_model.ser.gz
parser.model=models/ner/default/anaphoricity_model_conll.ser.gz
parser.model=models/ner/default/classification_model.ser.gz
parser.model=models/ner/default/classification_model_conll.ser.gz
parser.model=models/ner/default/clauseSearcherModel.ser.gz
parser.model=models/ner/default/clustering_model.ser.gz
parser.model=models/ner/default/clustering_model_conll.ser.gz
parser.model=models/ner/default/english-embeddings.ser.gz
parser.model=models/ner/default/english-model-conll.ser.gz
parser.model=models/ner/default/english-model-default.ser.gz
parser.model=models/ner/default/englishFactored.ser.gz
parser.model=models/ner/default/englishPCFG.caseless.ser.gz
parser.model=models/ner/default/englishPCFG.ser.gz
parser.model=models/ner/default/englishRNN.ser.gz
parser.model=models/ner/default/englishSR.beam.ser.gz
parser.model=models/ner/default/englishSR.ser.gz
parser.model=models/ner/default/gender.map.ser.gz
parser.model=models/ner/default/md-model-dep.ser.gz
parser.model=models/ner/default/ranking_model.ser.gz
parser.model=models/ner/default/ranking_model_conll.ser.gz
parser.model=models/ner/default/sentiment.binary.ser.gz
parser.model=models/ner/default/sentiment.ser.gz
parser.model=models/ner/default/truecasing.fast.caseless.qn.ser.gz
parser.model=models/ner/default/truecasing.fast.qn.ser.gz
parser.model=models/ner/default/word_counts.ser.gz
parser.model=models/ner/default/wsjFactored.ser.gz
parser.model=models/ner/default/wsjPCFG.ser.gz
parser.model=models/ner/default/wsjRNN.ser.gz
现在复制上面的行,同样地制作其他模型,并将其粘贴到server.properties文件中。 如果您没有server.properties文件,请创建它

并使用以下命令启动服务器:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000 -serverProperties server.properties

对不起,标题错了!我如何改变它?这是针对StanfordNLP的,而不是OpenNLP,这不是一个真正的答案,所以我只是把它作为一个注释,但是:实际上,只在类路径中包含corenlp-models.jar文件要容易得多,然后就不必为模型指定自定义路径。您遇到的问题似乎是POS模型文件已损坏。但我不清楚到底出了什么问题(也许它需要一个gzip文件?)。
java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000 -serverProperties server.properties