2014-11-13 49 views
0

我使用斯坦福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()) 

但是,因爲實在是太慢了每一個文字輸入,我運行模型爲一臺服務器,通過使用下面的代碼從蟒蛇查詢訪問的結果。但是我的訓練模型沒有輸出。

我啓動服務器這樣的:

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

真的不知道,恐怕。我不太瞭解Python部分,但是這看起來應該可行 - 如果模型直接使用,那麼模型看起來沒問題,您應該可以像使用常規模型一樣在HERServer中使用自定義模型。我首先要嘗試的是看看它是否純粹在Java-land中運行(使用-client標誌第二次調用NERServer)。如果你可以分享模型,我們也可以嘗試看看它有什麼問題.... –

回答

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

解析此輸出以獲取實體列表。

相關問題