2012-06-26 18 views
19

Mi risulta difficile creare il mio modello openNLP. Qualcuno può dirmi, come possedere il modello. Come si fanno gli allenamenti.Formazione del proprio modello in opl.

Quale dovrebbe essere l'input e dove verrà archiviato il file del modello di output.

+2

Per quale strumento stai creando un modello? – wcolen

risposta

8

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

Questo sito è molto utile, mostra sia nel codice, e utilizzando l'OpenNLP applicazione per formare modelli per tutti i diversi tipi, come estrazione di entità e parte del discorso ecc.

Potrei darti esempi di codice qui, ma la pagina è molto chiara da usare.

Teoria-saggio:

In sostanza si crea un file che elenca le cose che si desidera allenare

ad es.

Sport [spazio bianco] questa è una pagina di calcio, rugby e roba

Politica [spazio bianco] questa è una pagina di Tony Blair di essere primo ministro.

Il formato è descritto nella pagina sopra (ogni modello prevede un formato diverso). una volta creato questo file, lo si esegue tramite l'API o l'applicazione opennlp (tramite la riga di comando) e genera un file .bin. Una volta che hai questo file .bin, puoi caricarlo in un modello e iniziare a usarlo (come per l'api nel sito web sopra).

+0

Oppure avrebbe potuto dire RTFM per risparmiare un po 'di digitazione. – demongolem

+0

lascia che ti indichi la documentazione più recente all'indirizzo http://opennlp.apache.org/docs/1.8.1/manual/opennlp.html –

3

Per prima cosa è necessario addestrare i dati con l'Entità richiesta.

Le frasi devono essere separate con il carattere di nuova riga (\ n). I valori dovrebbero essere separati da e tag con un carattere di spazio.
Diciamo che si desidera creare modello di entità di medicina, quindi i dati dovrebbero essere qualcosa di simile:

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

si può fare riferimento un campione dataset per esempio. I dati di allenamento dovrebbero avere almeno 15000 frasi per ottenere risultati migliori.

Inoltre è possibile utilizzare Opennlp TokenNameFinderTrainer. Il file di output sarà nel formato .bin.

Ecco l'esempio: Writing a custom NameFinder model in OpenNLP

Per ulteriori informazioni, consultare il Opennlp documentation

1

Copiare i dati nei dati ed eseguire il codice qui sotto per ottenere il proprio mymodel.bin.

possono fare riferimento per i dati = 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

Benvenuto in Stack Overflow! Sebbene questo codice possa aiutare a risolvere il problema, non spiega _why_ e/o _how_ che risponde alla domanda. Fornire questo contesto aggiuntivo migliorerebbe significativamente il suo valore educativo a lungo termine. Si prega di [modificare] la risposta per aggiungere una spiegazione, compresi quali limitazioni e ipotesi si applicano. –

Problemi correlati