2011-08-05 5 views
9

좋아, 나는 OpenNLPOpenNLP에서 Named Entity Recognizer 식별자를 훈련시키는 방법은 무엇입니까?

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을 사용하고 있기 때문에 temparatue, 거리 및 무게에 대한 모델 파일이 없습니다. –

+0

@ raj.singh OpenNLP를 사용하지 않습니다. 내 목적을 위해 나만의 분류자를 코딩하고있다. –

+0

안녕하세요 @Renato Dinhani, 저도 같은 문제가 있습니다. 어떻게 도와 주실 수 있습니까? wcolen 안녕, 난 당신이 나에게 문장 열차에 대한 몇 가지 링크 또는 예제를 제공 할 수 있습니다, 같은 문제가 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

: 나는 우리에게 내 train.txt 예외를 진행하고이 오류가 발생했습니다. http://svn.apache.org/viewvc/opennlp/trunk/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences.txt?view=markup : Riddhish.Chaudhari @ –

+1

, 여기에 예제를 참조하십시오 . 한 줄에 한 문장이 있어야하고 새 단락에 빈 줄이 있어야합니다. – wcolen

관련 문제