【问题标题】:Run custom trained stanford ner model as server运行自定义训练的 stanford ner 模型作为服务器
【发布时间】:2014-11-15 04:34:27
【问题描述】:

我使用斯坦福 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.dissim.crf.ser.gz 这样的现有模型作为服务器启动时,相同的代码也能工作。但不适用于服务器模式下的自定义模型。

是否有一种特定的方法可以在服务器版本中启动我们自定义训练的 ner 模型?

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

【问题讨论】:

  • 真的不知道,恐怕。我不太了解 Python 部分,但这看起来应该可以工作 - 如果模型直接使用,那么模型似乎没问题,您应该能够像常规模型一样在 HERServer 中使用自定义模型。我首先要尝试的是查看它是否纯粹在 Java 领域中工作(使用 -client 标志再次调用 NERServer)。如果您可以分享模型,我们也可以尝试看看它有什么问题......

标签: python stanford-nlp


【解决方案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>"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多