2011-08-05 87 views
9

好吧,我有下面的代碼從OpenNLP如何在OpenNLP中訓練指定的實體識別器標識符?

FileReader fileReader = new FileReader("train.txt"); 
ObjectStream fileStream = new PlainTextByLineStream(fileReader); 
ObjectStream sampleStream = new NameSampleDataStream(fileStream); 
TokenNameFinderModel model = NameFinderME.train("pt-br", "train", sampleStream, Collections.<String, Object>emptyMap()); 
nfm = new NameFinderME(model); 

我不知道如果我做錯事,如果事情是缺少訓練NER標識符,但分類不工作。我假設train.txt是錯誤的。

發生的錯誤是所有標記都被分類爲只有一種類型。

我的train.txt數據類似於下面的例子,但具有更多的變化和數量的條目。另一件事是我每次都從文本中逐字分類,而不是所有的標記。

<START:distance> 8000m <END> 
<START:temperature> 100ºC <END> 
<START:weight> 50kg <END> 
<START:name> Renato <END> 

有人可以證明我做錯了什麼?

+0

你能告訴我,你使用的是什麼版本的OpenNLP?因爲我使用OpenNLP 1.5.1,並且沒有用於溫度,距離和重量的模型文件。 – 2011-11-09 11:49:13

+0

@ raj.singh我沒有使用OpenNLP。我爲我的目的編寫我自己的分類器。 –

+0

嗨@Renato Dinhani,我有同樣的問題,你能幫助我,你如何在你的應用程序中解決這個問題。我得到這個錯誤,當我要去我們的train.txt異常:java.security.NoSuchAlgorithmException –

回答

22

您的訓練數據不正確。

你應該把所有實體上下文的句子中:

At an altitude of <START:distance> 8000m <END> the temperature of boiling water is less than <START:temperature> 100ºC <END> . 
The climber <START:name> Renato <END> is carrying <START:weight> 50kg <END> of equipment. 

,如果你的訓練數據來自真實世界的句子派生你會有更好的效果,並有你分類句子的風格相同。例如,如果您要處理新聞,您應該使用報紙語料庫進行培訓。

此外,您還需要數千個句子來構建您的模型!也許你可以從一百開始引導,並使用可憐的模型來改進你的語料庫並重新訓練你的模型。

當然,您應該對句子的所有標記進行分類,否則將沒有上下文來決定實體的類型。

+0

嗨wcolen,我有同樣的問題,你能給我一些鏈接或句子列車的例子。 –

+1

@ Riddhish.Chaudhari,請參閱此處的示例:http://svn.apache.org/viewvc/opennlp/trunk/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences.txt?view=markup 。每行應該有一個句子,新段落應該有空行。 – wcolen

相關問題