2012-06-26 11 views
19

Trudno jest stworzyć własny model openNLP. Czy ktoś może mi powiedzieć, jak zrobić własny model. Jak należy wykonywać treningi.Trening własny model w opennlp

Co powinno być wejściem i gdzie zostanie zapisany plik modelu wyjściowego.

+2

Dla których narzędzie ty tworzenia modelu? – wcolen

Odpowiedz

8

https://opennlp.apache.org/docs/1.5.3/manual/opennlp.html

Ta strona jest bardzo przydatna, pokazuje zarówno w kodzie, a za pomocą OpenNLP aplikacja do modelowania pociągów dla różnych typów, takich jak ekstrakcja jednostek i część mowy itp.

Mogę dać ci som przykłady kodu tutaj, ale strona jest bardzo przejrzysta w użyciu.

Teoria mądry:

Zasadniczo należy utworzyć plik zawierający listę rzeczy, które chcesz trenować

np.

Sport [spacja] Jest to strona o piłkę nożną, rugby i rzeczy

Politics [spacja] Jest to strona o Tony Blair jako premier.

Format jest opisany na powyższej stronie (każdy model oczekuje innego formatu). po utworzeniu tego pliku uruchamiasz go za pomocą interfejsu API lub aplikacji opennlp (za pośrednictwem wiersza poleceń) i generuje plik .bin. Po utworzeniu tego pliku .bin można go załadować do modelu i zacząć go używać (jak na api w powyższej witrynie).

+0

Albo mógł powiedzieć RTFM, aby zaoszczędzić sobie trochę pisania. – demongolem

+0

Pozwól mi wskazać najnowszą dokumentację na http://opennlp.apache.org/docs/1.8.1/manual/opennlp.html –

3

Najpierw należy przeszkolić dane z wymaganą jednostką.

Zdania powinny być oddzielone znakiem nowej linii (\ n). Wartości powinny być oddzielone od i znaczników znakiem spacji.
Powiedzmy, że chcemy stworzyć modelu medycyny jednostki, więc dane powinny być mniej więcej tak:

<START:medicine> Augmentin-Duo <END> is a penicillin antibiotic that contains two medicines - <START:medicine> amoxicillin trihydrate <END> and 
<START:medicine> potassium clavulanate <END>. They work together to kill certain types of bacteria and are used to treat certain types of bacterial infections. 

Można odwołać próbkę dataset np. Dane treningowe powinny mieć co najmniej 15 000 zdań, aby uzyskać lepsze wyniki.

Dalej można użyć TokenNameFinderTrainer Opennlp. Plik wyjściowy będzie w formacie .bin.

Oto przykład: Writing a custom NameFinder model in OpenNLP

Aby uzyskać więcej informacji, przekazanie Opennlp documentation

1

skopiować dane w danych i uruchomić poniżej kod, aby uzyskać własne mymodel.bin.

może odnosić się do danych = https://github.com/mccraigmccraig/opennlp/blob/master/src/test/resources/opennlp/tools/namefind/AnnotatedSentencesWithTypes.txt

public class Training { 
     static String onlpModelPath = "mymodel.bin"; 
     // training data set 
     static String trainingDataFilePath = "data.txt"; 

     public static void main(String[] args) throws IOException { 
         Charset charset = Charset.forName("UTF-8"); 
         ObjectStream<String> lineStream = new PlainTextByLineStream(
                 new FileInputStream(trainingDataFilePath), charset); 
         ObjectStream<NameSample> sampleStream = new NameSampleDataStream(
                 lineStream); 
         TokenNameFinderModel model = null; 
         HashMap<String, Object> mp = new HashMap<String, Object>(); 
         try { 
           //   model = NameFinderME.train("en","drugs", sampleStream, Collections.<String,Object>emptyMap(),100,4) ; 
             model= NameFinderME.train("en", "drugs", sampleStream, Collections. emptyMap()); 
         } finally { 
             sampleStream.close(); 
         } 
         BufferedOutputStream modelOut = null; 
         try { 
             modelOut = new BufferedOutputStream(new FileOutputStream(onlpModelPath)); 
             model.serialize(modelOut); 
         } finally { 
             if (modelOut != null) 
                 modelOut.close(); 
         } 
     } 
} 
+0

Witamy w Stack Overflow! Chociaż ten kod może pomóc w rozwiązaniu problemu, nie wyjaśnia, dlaczego _why_ i/lub _how_ to odpowiada na pytanie. Zapewnienie tego dodatkowego kontekstu znacznie poprawiłoby jego długoterminową wartość edukacyjną. Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienie, w tym, jakie ograniczenia i założenia mają zastosowanie. –

Powiązane problemy