Come addestrare lo Stanford Parser con Genia Corpus?


93

Ho alcuni problemi a creare un nuovo modello per Stanford Parser.

Ho anche scaricato l'ultima versione da Stanford: http://nlp.stanford.edu/software/lex-parser.shtml

E qui, Genia Corpus in 2 formati, xml e ptb (Penn Treebank).

Standford Parser può eseguire l'addestramento con file ptd; poi ho scaricato Genia Corpus, perché voglio lavorare con testo biomedico:

http://categorizer.tmit.bme.hu/~illes/genia_ptb/ (link non più disponibile) (genia_ptb.tar.gz)

Quindi, ho una breve classe principale per ottenere la rappresentazione della dipendenza di una frase biomedica:

    String treebankPath = "/stanford-parser-2012-05-22/genia_ptb/GENIA_treebank_v1/ptb";

    Treebank tr = op.tlpParams.diskTreebank();
    tr.loadPath(treebankPath);  
    LexicalizedParser lpc=LexicalizedParser.trainFromTreebank(tr,op);

Ho provato modi diversi, ma ottengo sempre lo stesso risultato.

Ho un errore nell'ultima riga. Questa è la mia uscita:

Currently Fri Jun 01 15:02:57 CEST 2012
Options parameters:
useUnknownWordSignatures 2
smoothInUnknownsThreshold 100
smartMutation false
useUnicodeType false
unknownSuffixSize 1
unknownPrefixSize 1
flexiTag true
useSignatureForKnownSmoothing false
parserParams edu.stanford.nlp.parser.lexparser.EnglishTreebankParserParams
forceCNF false
doPCFG true
doDep false
freeDependencies false
directional true
genStop true
distance true
coarseDistance false
dcTags false
nPrune false
Train parameters: smooth=false PA=true GPA=false selSplit=true (400.0; deleting [VP^SQ, VP^VP, VP^SINV, VP^NP]) mUnary=1 mUnaryTags=false sPPT=false tagPA=true tagSelSplit=false (0.0) rightRec=true leftRec=false collinsPunc=false markov=true mOrd=2 hSelSplit=true (10) compactGrammar=3 postPA=false postGPA=false selPSplit=false (0.0) tagSelPSplit=false (0.0) postSplitWithBase=false fractionBeforeUnseenCounting=0.5 openClassTypesThreshold=50 preTransformer=null taggedFiles=null
Using EnglishTreebankParserParams splitIN=4 sPercent=true sNNP=0 sQuotes=false sSFP=false rbGPA=false j#=false jJJ=false jNounTags=false sPPJJ=false sTRJJ=false sJJCOMP=false sMoreLess=false unaryDT=true unaryRB=true unaryPRP=false reflPRP=false unaryIN=false sCC=1 sNT=false sRB=false sAux=2 vpSubCat=false mDTV=2 sVP=3 sVPNPAgr=false sSTag=0 mVP=false sNP%=0 sNPPRP=false dominatesV=1 dominatesI=false dominatesC=false mCC=0 sSGapped=4 numNP=false sPoss=1 baseNP=1 sNPNNP=0 sTMP=1 sNPADV=1 cTags=true rightPhrasal=false gpaRootVP=false splitSbar=0 mPPTOiIN=0
Binarizing trees...done. Time elapsed: 141 ms
Extracting PCFG...done. Time elapsed: 56 ms
Compiling grammar...done Time elapsed: 1 ms
Extracting Lexicon...Exception in thread "main" edu.stanford.nlp.util.ReflectionLoading$ReflectionLoadingException: edu.stanford.nlp.util.MetaClass$ClassCreationException: java.lang.ClassNotFoundException: edu.stanford.nlp.parser.lexparser.EnglishUnknownWordModelTrainer
    at edu.stanford.nlp.util.ReflectionLoading.loadByReflection(ReflectionLoading.java:39)
    at edu.stanford.nlp.parser.lexparser.BaseLexicon.initializeTraining(BaseLexicon.java:335)
    at edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromTreebank(LexicalizedParser.java:800)
    at edu.stanford.nlp.parser.lexparser.LexicalizedParser.trainFromTreebank(LexicalizedParser.java:226)
    at edu.stanford.nlp.parser.lexparser.LexicalizedParser.trainFromTreebank(LexicalizedParser.java:237)
    at ABravoDemo.main(ABravoDemo.java:35)
Caused by: edu.stanford.nlp.util.MetaClass$ClassCreationException: java.lang.ClassNotFoundException: edu.stanford.nlp.parser.lexparser.EnglishUnknownWordModelTrainer
    at edu.stanford.nlp.util.MetaClass.createFactory(MetaClass.java:353)
    at edu.stanford.nlp.util.MetaClass.createInstance(MetaClass.java:370)
    at edu.stanford.nlp.util.ReflectionLoading.loadByReflection(ReflectionLoading.java:37)
    ... 5 more
Caused by: java.lang.ClassNotFoundException: edu.stanford.nlp.parser.lexparser.EnglishUnknownWordModelTrainer
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at edu.stanford.nlp.util.MetaClass$ClassFactory.construct(MetaClass.java:119)
    at edu.stanford.nlp.util.MetaClass$ClassFactory.<init>(MetaClass.java:192)
    at edu.stanford.nlp.util.MetaClass$ClassFactory.<init>(MetaClass.java:53)
    at edu.stanford.nlp.util.MetaClass.createFactory(MetaClass.java:349)
    ... 7 more

Come posso creare un nuovo modello con questo corpus?




5
La vera causa è "java.lang.ClassNotFoundException: edu.stanford.nlp.parser.lexparser.EnglishUnknownWordModelTrainer". Vuol nlp.stanford.edu/software/... hanno quella classe? Non riesco a scaricare 900 MB in questo momento per controllare.
andrucz

1
Prova questo video potrebbe aiutarti, youtube.com/watch?v=w4rWpvBjBRI
Laxman G

Risposte:


1

Come ha affermato Andrucz nel suo commento, la vera causa del tuo problema sembra derivare da una classe mancante.

Prova a controllare se hai importato correttamente la tua libreria (e assicurati che contenga la classe EnglishUnknownWordModelTra‌​inerin formato edu.stanford.nlp.parser.lexparser.

(Se stai usando Maven, verifica di aver aggiunto correttamente la dipendenza - un rapido google lo ha evidenziato: Stanford Parser Maven Repo )


1

La libreria NLP è stata installata correttamente? Controlla i log per verificare che non ci siano errori. La maggior parte delle volte questo problema si verifica quando la libreria nltk di stanford non viene installata correttamente.

Un modo rapido per controllare è eseguire la GUI per provare il parser se funziona correttamente, quindi la libreria è installata correttamente, altrimenti se ciò genera errori, allora sai che la tua installazione è stata scarsa.

Il sito web di Stanford menziona anche questo sguardo:

Se non hai familiarità con l'analisi, puoi iniziare eseguendo la GUI per provare il parser. Gli script sono inclusi per Linux (lexparser-gui.sh) e Windows (lexparser-gui.bat). Dai un'occhiata alla documentazione del pacchetto Javadoc lexparser e alla documentazione della classe LexicalizedParser. (Punta il tuo browser web sul file index.html nella directory javadoc inclusa e vai a questi elementi.) Guarda le FAQ del parser per le risposte alle domande comuni. Se tutto ciò non aiuta, consulta le nostre linee guida per le email per istruzioni su come contattarci per ulteriore assistenza.


0

Controlla di aver importato correttamente la libreria e assicurati che contenga la classe {EnglishUnknownWordModelTra‌ iner} e assicurati anche che la versione scaricata funzioni correttamente con Genia Corps.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.