所以我的要求口头上很简单。我需要StanfordCoreNLP默认模型以及基于自定义实体的自定义训练模型。在最后一次运行中,我需要能够从给定的句子中隔离特定的短语(将使用RegexNER)
以下是我的努力: -
努力我: - 所以我想使用StanfordCoreNLP CRF文件,标记文件和ner模型文件,以及我自定义训练的ner模型。 我试图找出是否有任何官方方式这样做,但没有得到任何东西。 StanfordCoreNLP管道有一个属性“ner.model”,但如果使用它将跳过默认值。
效力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
效力III: - 我以为我能够处理RegexNER,我在某种程度上取得了成功。只是它通过RegexNER学习的实体,它不适用于即将到来的表达式。例如:它会在文本中找到实体“CUSTOM_ENTITY”,但是如果我放置像
( [ {ner:CUSTOM_ENTITY} ] /with/ [ {ner:CUSTOM_ENTITY} ] )
这样的正则表达式,它就永远不会成功找到正确的短语。
真的需要帮助!!!我不想再次训练完整的模型,斯坦福大家拿到了GB的模型信息对我有用。只是我想添加自定义实体。
答案 0 :(得分:1)
首先确保你的CLASSPATH中有正确的罐子。
以下是您应该如何加入经过自定义培训的NER模型:
java -Xmx8g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner -ner.model <csv-of-model-paths> -file example.txt
-ner.model
应设置为您要使用的所有模型的逗号分隔列表。
以下是您可以放置的示例:
edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz,edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz,edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz,/path/to/custom_model.ser.gz
请注意,在我的示例中,将运行所有标准模型,最后将运行自定义模型。确保您的自定义模型位于CLASSPATH中。
您可能还需要将此添加到您的命令:-ner.combinationMode HIGH_RECALL
。默认情况下,NER组合仅使用第一个模型中特定类的标签。因此,如果您有model1,model2,model3,则只使用model1的LOCATION。如果您将事物设置为HIGH_RECALL
,那么也将使用model2和model3的LOCATION标记。
要记住的另一件事是,model2无法覆盖model1的决策。它只能覆盖“O”。因此,如果model1表示某个特定令牌是LOCATION,那么model2不能说它是一个ORGANIZATION或PERSON或任何东西。因此,列表中模型的顺序很重要。
如果你想编写使用先前规则找到的实体的规则,你应该看看我对这个问题的回答:
答案 1 :(得分:1)
来自您给定的背景
使用它而不是逗号分隔值并尝试将所有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