我使用斯坦福NER培训了我自己的NER模型。我可以使用以下代码从我的python代码接口,它可以正确地在输入文本中注释命名实体。
st = NERTagger('stanford_classifiers/ner-model-custom.ser.gz',
'stanford_classifiers/stanford-ner.jar', 'utf-8')
entities = st.tag(input_text.split())
但是,因为它对于每个文本输入来说太慢了,我将模型作为服务器运行并通过使用以下代码从python查询来访问结果。但是我从训练有素的模型中得不到输出。
我像这样启动服务器:
java -mx1000m -cp stanford-ner.jar edu.stanford.nlp.ie.NERServer -loadClassifier ner-m
odel-custom.ser.gz -port 8080 -outputFormat inlineXML
我在服务器上收到此消息:
Loading classifier from XX\XX\stanford_classifiers\ner-model-custom.ser.gz ... done [6.1 sec].
在客户端(python代码):
tagger = ner.SocketNER(host='localhost', port=8080)
entities = tagger.get_entities(input_text)
当像english.all.3class.distsim.crf.ser.gz这样的现有模型作为服务器启动时,相同的代码可以正常工作。但不适用于服务器模式下的自定义模型。
是否有特定的方法在服务器版本中启动我们的自定义训练的ner模型?
这可能是自定义模型培训的问题吗?
答案 0 :(得分:1)
感谢@ChristopherManning的回复。你是对的。该模型工作正常。自定义模型还正确地注释了inlineXML格式的输入文本。
它只是没有返回tagger.get_entities(input_text)
函数中的实体。我不得不在python接口中使用另一个函数:tagger.tag_text(input_text)
然后使用xml minidom解析器来提取带注释的公司。
Input text : "She is working at facebook"
Received by tagger using tag_text function : "She is working at <B-company>facebook</B-company>"
解析此输出以获取实体列表。