Bagaimana cara melatih Stanford Parser dengan Genia Corpus?

93

Saya memiliki beberapa masalah dalam membuat model baru untuk Stanford Parser.

Saya juga telah mengunduh versi terakhir dari Stanford: http://nlp.stanford.edu/software/lex-parser.shtml

Dan di sini, Genia Corpus dalam 2 format, xml dan ptb (Penn Treebank).

Parser Standford dapat berlatih dengan file ptd; kemudian saya mengunduh Genia Corpus, karena saya ingin bekerja dengan teks biomedis:

http://categorizer.tmit.bme.hu/~illes/genia_ptb/ (tautan tidak lagi tersedia) (genia_ptb.tar.gz)

Kemudian, saya memiliki kelas Utama singkat untuk mendapatkan representasi ketergantungan dari satu kalimat biomedis:

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

Saya telah mencoba berbagai cara, tetapi selalu mendapatkan hasil yang sama.

Saya mengalami kesalahan di baris terakhir. Ini keluaran saya:

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

Bagaimana saya bisa membuat model baru dengan korpus ini?

nathan
sumber
5
Penyebab sebenarnya adalah "java.lang.ClassNotFoundException: edu.stanford.nlp.parser.lexparser.EnglishUnknownWordModelTrainer". Apakah nlp.stanford.edu/software/… memiliki kelas itu? Saya tidak dapat mengunduh 900MB saat ini untuk memeriksa.
andrucz
1
Coba video ini mungkin membantu Anda, youtube.com/watch?v=w4rWpvBjBRI
Laxman G

Jawaban:

1

Seperti yang dinyatakan andrucz dalam komentarnya, penyebab sebenarnya dari masalah Anda tampaknya berasal dari kelas yang hilang.

Coba periksa apakah Anda mengimpor perpustakaan dengan benar (dan pastikan perpustakaan berisi kelas EnglishUnknownWordModelTra‌​inerdalam edu.stanford.nlp.parser.lexparser.

(Jika Anda menggunakan Maven, verifikasi bahwa Anda menambahkan dependensi dengan benar - google cepat membahasnya: Stanford Parser Maven Repo )

Maximilian Schirm
sumber
1

Apakah perpustakaan NLP diinstal dengan benar? Periksa log untuk memverifikasi tidak ada kesalahan. Sebagian besar masalah ini muncul ketika pustaka stanford nltk tidak diinstal dengan benar.

Cara cepat untuk memeriksanya adalah dengan menjalankan GUI untuk mencoba parser jika berhasil maka pustaka diinstal dengan benar, sebaliknya jika itu menimbulkan kesalahan maka Anda tahu instalasi Anda buruk.

Situs web Stanford juga menyebutkan pandangan ini:

Jika Anda baru mengenal parsing, Anda dapat memulai dengan menjalankan GUI untuk mencoba parser. Skrip disertakan untuk linux (lexparser-gui.sh) dan Windows (lexparser-gui.bat). Lihat dokumentasi paket lexparser Javadoc dan dokumentasi kelas LexicalizedParser. (Arahkan browser web Anda ke file index.html di direktori javadoc yang disertakan dan navigasikan ke item tersebut.) Lihat FAQ parser untuk jawaban atas pertanyaan umum. Jika tidak ada yang membantu, lihat pedoman email kami untuk petunjuk tentang cara menghubungi kami untuk bantuan lebih lanjut.

Binny Peza
sumber
0

Periksa apakah Anda telah mengimpor pustaka dengan benar dan pastikan pustaka tersebut berisi kelas {EnglishUnknownWordModelTra‌ iner} dan juga pastikan bahwa versi yang Anda unduh berfungsi dengan baik dengan Genia Corps.

Divya Mishra
sumber