运行自定义训练的stanford ner模型作为服务器

时间:2014-11-13 22:12:17

标签: python stanford-nlp

我使用斯坦福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模型?

这可能是自定义模型培训的问题吗?

1 个答案:

答案 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>"

解析此输出以获取实体列表。