web-dev-qa-db-ja.com

Genia Corpusでスタンフォードパーサーをトレーニングする方法は?

スタンフォードパーサーの新しいモデルを作成するのにいくつか問題があります。

スタンフォードから最後のバージョンもダウンロードしました: http://nlp.stanford.edu/software/Lex-parser.shtml

そしてここでは、xmlとptb(Penn Treebank)の2つの形式のGeniaCorpusがあります。

Standford Parserは、ptdファイルを使用してトレーニングできます。次に、生物医学テキストを処理したいので、GeniaCorpusをダウンロードしました。

http://categorizer.tmit.bme.hu/~illes/genia_ptb/(リンクは利用できなくなりました) (genia_ptb.tar.gz)

次に、1つの生物医学文の依存関係表現を取得するための短いMainクラスがあります。

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

私はさまざまな方法を試しましたが、常に同じ結果が得られます。

最後の行にエラーがあります。これは私の出力です:

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

このコーパスを使用して新しいモデルを作成するにはどうすればよいですか?

93
nathan

Andruczがコメントで述べたように、問題の本当の原因はクラスの欠落にあるようです。

ライブラリを正しくインポートしたかどうかを確認してください(ライブラリにEnglishUnknownWordModelTra‌​inerのクラスedu.stanford.nlp.parser.lexparserが含まれていることを確認してください。

(Mavenを使用している場合は、依存関係を正しく追加したことを確認してください-簡単なグーグルでこれを説明します: Stanford Parser Maven Repo

1

NLPライブラリは正しくインストールされましたか?ログをチェックして、エラーがないことを確認します。ほとんどの場合、この問題は、スタンフォードnltkライブラリが正しくインストールされていない場合に発生します。

簡単に確認する方法は、GUIを実行してパーサーを試してみて、正常に実行された場合はライブラリが正しくインストールされ、それ以外の場合はエラーがスローされた場合はインストールが不十分であることがわかります。

スタンフォードのウェブサイトもこれが見てみると述べています:

構文解析に慣れていない場合は、GUIを実行してパーサーを試すことから始めることができます。 Linux(lexparser-gui.sh)およびWindows(lexparser-gui.bat)用のスクリプトが含まれています。 JavadoclexparserパッケージのドキュメントとLexicalizedParserクラスのドキュメントをご覧ください。 (Webブラウザで付属のjavadocディレクトリにあるindex.htmlファイルを指定し、それらの項目に移動します。)一般的な質問への回答についてはパーサーFAQ)を参照してください。それでも問題が解決しない場合は、さらにサポートが必要な場合の連絡方法については、メールガイドラインをご覧ください。

1
Binny Peza

ライブラリを正しくインポートしたかどうかを確認し、ライブラリにクラス{EnglishUnknownWordModelTra‌ iner}が含まれていることを確認します。また、ダウンロードしたバージョンがGeniaCorpsで正しく機能することを確認します。

0
Divya Mishra