2011-08-05 16 views
9

Ok, mam następujący kod do trenowania Identifier NER z OpenNLPW jaki sposób mogę wyszkolić identyfikator nazwy rozpoznawanego podmiotu w 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); 

ja nie wiem, czy robię coś źle z jeśli czegoś brakuje, ale klasyfikowanie nie działa. Przypuszczam, że plik train.txt jest nieprawidłowy.

Wystąpił błąd, który powoduje, że wszystkie tokeny są sklasyfikowane tylko dla jednego typu.

Dane mojego pliku train.txt są podobne do poniższego przykładu, ale zawierają dużo więcej zmian i ilości wpisów. Inną rzeczą jest to, że jestem klasyfikuje słowo po słowie z tekstu na czas, a nie wszystkie tokeny.

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

Ktoś może pokazać, co robię źle?

+0

Czy możesz mi powiedzieć, jakiej wersji OpenNLP używasz? Ponieważ używam OpenNLP 1.5.1 i nie ma pliku modelu dla temparatue, odległości i wagi. –

+0

@ raj.singh Nie używam OpenNLP. Piszę teraz swój własny klasyfikator do moich celów. –

+0

hi @Renato Dinhani, mam ten sam problem, czy możesz mi pomóc, jak rozwiązać ten problem w swojej aplikacji. Mam ten błąd, gdy idę do nas mój wyjątek train.txt: java.security.NoSuchAlgorithmException –

Odpowiedz

22

Twoje dane treningowe nie są prawidłowe.

Należy umieścić wszystkie podmioty w kontekście wewnątrz zdaniu:

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. 

Będziesz miał lepsze wyniki jeśli dane szkolenie pochodzi od prawdziwych zdań światowych i mają ten sam styl zdań jesteś klasyfikowanie. Na przykład powinieneś ćwiczyć używając korpusu gazety, jeśli będziesz przetwarzał wiadomości.

Potrzebujesz również tysięcy zdań do zbudowania swojego modelu! Być może możesz zacząć od setki do bootstrapu i użyć słabego modelu, by ulepszyć swój korpus i ponownie trenować swój model.

Oczywiście należy również sklasyfikować wszystkie tokeny zdania, w przeciwnym razie nie będzie kontekstu dla określenia typu jednostki.

+0

Witam wcolen, mam ten sam problem, możesz dać mi jakiś link lub przykład do pociągu zdanie. –

+1

@ Riddhish.Chaudhari, zobacz przykład tutaj: http://svn.apache.org/viewvc/opennlp/trunk/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences.txt?view=markup . Powinieneś mieć jedno zdanie na wiersz i pustą linię dla nowego akapitu. – wcolen

Powiązane problemy