Wie trainiere ich den Stanford Parser mit Genia Corpus?

93

Ich habe einige Probleme, ein neues Modell für Stanford Parser zu erstellen.

Ich habe auch die letzte Version von Stanford heruntergeladen: http://nlp.stanford.edu/software/lex-parser.shtml

Und hier Genia Corpus in 2 Formaten, xml und ptb (Penn Treebank).

Standford Parser kann mit ptd-Dateien trainieren. dann habe ich Genia Corpus heruntergeladen, weil ich mit biomedizinischem Text arbeiten möchte:

http://categorizer.tmit.bme.hu/~illes/genia_ptb/ (Link nicht mehr verfügbar) (genia_ptb.tar.gz)

Dann habe ich eine kurze Hauptklasse, um die Abhängigkeitsdarstellung eines biomedizinischen Satzes zu erhalten:

    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);

Ich habe verschiedene Methoden ausprobiert, aber immer das gleiche Ergebnis erzielt.

Ich habe einen Fehler in der letzten Zeile. Dies ist meine Ausgabe:

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

Wie könnte ich mit diesem Korpus ein neues Modell erstellen?

Nathan
quelle
5
Die eigentliche Ursache ist "java.lang.ClassNotFoundException: edu.stanford.nlp.parser.lexparser.EnglishUnknownWordModelTrainer". Hat nlp.stanford.edu/software/… diese Klasse? Ich kann derzeit keine 900 MB herunterladen, um dies zu überprüfen.
Andrucz
1
Versuchen Sie dieses Video, es kann Ihnen helfen, youtube.com/watch?v=w4rWpvBjBRI
Laxman G

Antworten:

1

Wie andrucz in seinem Kommentar feststellte, scheint die wahre Ursache Ihres Problems in einer fehlenden Klasse zu liegen.

Überprüfen Sie, ob Sie Ihre Bibliothek korrekt importiert haben (und stellen Sie sicher, dass sie die Klasse EnglishUnknownWordModelTra‌​inerin enthält edu.stanford.nlp.parser.lexparser.

(Wenn Sie Maven verwenden, vergewissern Sie sich, dass Sie die Abhängigkeit korrekt hinzugefügt haben - ein kurzer Blick auf Google: Stanford Parser Maven Repo )

Maximilian Schirm
quelle
1

Wurde die NLP-Bibliothek korrekt installiert? Überprüfen Sie in den Protokollen, ob keine Fehler vorliegen. In den meisten Fällen tritt dieses Problem auf, wenn die Stanford Nltk-Bibliothek dort nicht ordnungsgemäß installiert wird.

Eine schnelle Möglichkeit zur Überprüfung besteht darin, die GUI auszuführen, um den Parser auszuprobieren. Wenn dies erfolgreich ausgeführt wird, wird die Bibliothek korrekt installiert. Wenn dies zu Fehlern führt, wissen Sie, dass Ihre Installation schlecht war.

Auf der Stanford-Website wird dies auch erwähnt:

Wenn Sie mit dem Parsen noch nicht vertraut sind, können Sie zunächst die GUI ausführen, um den Parser auszuprobieren. Skripte sind für Linux (lexparser-gui.sh) und Windows (lexparser-gui.bat) enthalten. Sehen Sie sich die Dokumentation zum Javadoc-Lexparser-Paket und die Dokumentation zur LexicalizedParser-Klasse an. (Zeigen Sie mit Ihrem Webbrowser auf die Datei index.html im enthaltenen Javadoc-Verzeichnis und navigieren Sie zu diesen Elementen.) In den häufig gestellten Fragen zum Parser finden Sie Antworten auf häufig gestellte Fragen. Wenn nichts davon hilft, finden Sie in unseren E-Mail-Richtlinien Anweisungen, wie Sie uns erreichen können, um weitere Unterstützung zu erhalten.

Binny Peza
quelle
0

Überprüfen Sie, ob Sie die Bibliothek korrekt importiert haben, und stellen Sie sicher, dass sie die Klasse {EnglishUnknownWordModelTra‌ iner} enthält. Stellen Sie außerdem sicher, dass die heruntergeladene Version ordnungsgemäß mit Genia Corps funktioniert.

Divya Mishra
quelle