2017-05-16 6 views
0

私はStanford-NERでカスタムNERモデルを訓練しました。プロパティファイルを作成し、javaコマンドで-serverProperties引数を使用してサーバを起動しました(私の別の質問に続き、hereと表示されます)。カスタムNERモデルがロードされますが、サーバがカスタムを読み込もうとするとモデル、それがこのエラーで失敗します。次のようにエラーとjava.io.EOFException: Unexpected end of ZLIB input streamNER Classifierを読み込む際のエラー - ZLIB入力ストリームの予期しない終了

stderr.log出力は次のようになります。

[main] INFO CoreNLP - --- StanfordCoreNLPServer#main() called --- 
[main] INFO CoreNLP - setting default constituency parser 
[main] INFO CoreNLP - warning: cannot find edu/stanford/nlp/models/srparser/englishSR.ser.gz 
[main] INFO CoreNLP - using: edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz instead 
[main] INFO CoreNLP - to use shift reduce parser download English models jar from: 
[main] INFO CoreNLP - http://stanfordnlp.github.io/CoreNLP/download.html 
[main] INFO CoreNLP -  Threads: 4 
[main] INFO CoreNLP - Liveness server started at /0.0.0.0:9000 
[main] INFO CoreNLP - Starting server... 
[main] INFO CoreNLP - StanfordCoreNLPServer listening at /0.0.0.0:80 
[pool-1-thread-3] INFO CoreNLP - [/127.0.0.1:35546] API call w/annotators tokenize,ssplit,pos,lemma,depparse,natlog,ner,openie 
[pool-1-thread-3] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator tokenize 
[pool-1-thread-3] INFO edu.stanford.nlp.pipeline.TokenizerAnnotator - No tokenizer type provided. Defaulting to PTBTokenizer. 
[pool-1-thread-3] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator ssplit 
[pool-1-thread-3] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator pos 
[pool-1-thread-3] INFO edu.stanford.nlp.tagger.maxent.MaxentTagger - Loading POS tagger from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger ... done [0.7 sec]. 
[pool-1-thread-3] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator lemma 
[pool-1-thread-3] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator depparse 
[pool-1-thread-3] INFO edu.stanford.nlp.parser.nndep.DependencyParser - Loading depparse model file: edu/stanford/nlp/models/parser/nndep/english_UD.gz ... [pool-1-thread-3] INFO edu.stanford.nlp.parser.nndep.Classifier - PreComputed 99996, Elapsed Time: 12.297 (s) 
[pool-1-thread-3] INFO edu.stanford.nlp.parser.nndep.DependencyParser - Initializing dependency parser ... done [13.6 sec]. 
[pool-1-thread-3] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator natlog 
[pool-1-thread-3] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator ner 
java.io.EOFException: Unexpected end of ZLIB input stream 
    at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:240 
    at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)  
    at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:117)  
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:345) 
    at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2620) 
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2636)  
    at java.io.ObjectInputStream$BlockDataInputStream.readDoubles(ObjectInputStream.java:3333) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1920) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1529) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1933) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1529) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422) 
    at edu.stanford.nlp.ie.crf.CRFClassifier.loadClassifier(CRFClassifier.java:2650) 
    at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1462) 
    at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1494) 
    at edu.stanford.nlp.ie.crf.CRFClassifier.getClassifier(CRFClassifier.java:2963)  
    at edu.stanford.nlp.ie.ClassifierCombiner.loadClassifierFromPath(ClassifierCombiner.java:282) 
    at edu.stanford.nlp.ie.ClassifierCombiner.loadClassifiers(ClassifierCombiner.java:266) 
    at edu.stanford.nlp.ie.ClassifierCombiner.<init>(ClassifierCombiner.java:141) 
    at edu.stanford.nlp.ie.NERClassifierCombiner.<init>(NERClassifierCombiner.java:128)  
    at edu.stanford.nlp.pipeline.AnnotatorImplementations.ner(AnnotatorImplementations.java:121)  
    at edu.stanford.nlp.pipeline.AnnotatorFactories$6.create(AnnotatorFactories.java:273) 
    at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:152) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.construct(StanfordCoreNLP.java:451)  
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:154) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:145) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLPServer.mkStanfordCoreNLP(StanfordCoreNLPServer.java:273)  
    at edu.stanford.nlp.pipeline.StanfordCoreNLPServer.access$500(StanfordCoreNLPServer.java:50)  
    at edu.stanford.nlp.pipeline.StanfordCoreNLPServer$CoreNLPHandler.handle(StanfordCoreNLPServer.java:583)  
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79)  
    at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83) 
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:82)  
    at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675) 
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79)  
    at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:647) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:748) 

私はこのエラーをGoogleで検索していると私は読んだのほとんどが2007-からのJavaの問題に関してです2010年のEOFExceptionは "a自発的に "スローされる。この情報はhereです。

"新しいDeflater(Deflater.BEST_COMPRESSION、true)を介してgzipを使用すると、いくつかのファイルでは、EOFExceptionがスローされますが、ファイルが正しくても、EOFExceptionが一貫してスローされますいくつかのファイルについてはスローされ、それ以外の場合にはスローされます。

gzipの出力ストリームを閉じる必要があることをこのエラー状態に関して他の人の質問に回答していますか?それが何を意味しているのかわからず、Stanford-NERが私のためにgzipファイルを作成するソフトウェアなので、私がそのアドバイスをどのように実行するのか分からない。

質問:このエラーを解決するためにどのような処置を取ることができますか?私はこれが過去に他人に起こったことを期待しています。また、@ StanfordNLPHelpから、過去に同様の問題が発生しているかどうか、何か処理が行われているかどうかなどのフィードバックを探しています。この問題を解消するためにCoreNLPソフトウェアに行われています。 CoreNLPのソリューションがある場合、どのファイルを変更する必要がありますか、これらのファイルはCoreNLPフレームワーク内にありますか、どのような変更が必要ですか?

情報を追加(PER @StanfordNLPHelpのコメント):

私のモデルでは、方向を使用して訓練されたがhereを見つけました。モデルを訓練するために、私は約90の文書からのテキストを含む指示に概説されるようにTSVを使用した。私はこれが訓練するための相当量のデータではないことを知っていますが、私たちはテストの段階にあり、より多くのデータを取得する際にモデルを改善します。

このTSVファイルとStandford-NERソフトウェアを使用して、以下のコマンドを実行しました。

java -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -prop austen.prop

私はその後、私のモデルが構築されていたたとさえロードし、成功裏にスタンフォード-NERのソフトウェアが付属していますNERのGUIを使用してテキストの大規模コーパスにタグを付けることができました。

なぜ私はモデルを動作させることができませんでしたが、CoreNLPの標準である「3クラスモデル」へのファイルパスでserver.propertiesファイルを更新しようとしました。やはり同じエラーで失敗しました。

私のカスタムモデルと3クラスモデルの両方がStanford-NERソフトウェアで動作するが、読み込みに失敗するという事実は、私のカスタムモデルが問題ではなく、CoreNLPソフトウェアのロード方法に問題があると信じているこれらのモデルは-serverProperties引数で指定します。それとも私がまったく気付いていないものかもしれません。

NERモデルのトレーニングに使用したプロパティファイルは、列車ファイルの変更された方向のオンと似ていて、出力ファイル名が変更されました。それは次のようになります。

# location of the training file 
trainFile = custom-model-trainingfile.tsv 
# location where you would like to save (serialize) your 
# classifier; adding .gz at the end automatically gzips the file, 
# making it smaller, and faster to load 
serializeTo = custome-ner-model.ser.gz 

# structure of your training file; this tells the classifier that 
# the word is in column 0 and the correct answer is in column 1 
map = word=0,answer=1 

# This specifies the order of the CRF: order 1 means that features 
# apply at most to a class pair of previous class and current class 
# or current class and next class. 
maxLeft=1 

# these are the features we'd like to train with 
# some are discussed below, the rest can be 
# understood by looking at NERFeatureFactory 
useClassFeature=true 
useWord=true 
# word character ngrams will be included up to length 6 as prefixes 
# and suffixes only 
useNGrams=true 
noMidNGrams=true 
maxNGramLeng=6 
usePrev=true 
useNext=true 
useDisjunctive=true 
useSequences=true 
usePrevSequences=true 
# the last 4 properties deal with word shape features 
useTypeSeqs=true 
useTypeSeqs2=true 
useTypeySequences=true 
wordShape=chris2useLC 

マイserver.propertiesファイルはner.model = /path/to/custom_model.ser.gz

のみ1行が含まれて私はまた、起動スクリプト内の$ CLASSPATH変数に/path/to/custom_modelを追加しました。 CLASSPATH="$CLASSPATH:$JARCLASSPATH="$CLASSPATH:$JAR:/path/to/custom_model.ser.gzに変更しました。私はZLIBエラーが最初に表示されるので、これが必要なステップかどうかはわかりません。これを完全性のために含めたかっただけです。

gunzip custom_model.ser.gzコマンドを使用して私のカスタムモデルを「ガンゼット」しようとしましたが、モデルを読み込もうとした時と同様のエラーが発生しました。それはgzip: custom_model.ser.gz: unexpected end of file

+0

@ChristopherManningあなたは明らかにCoreNLPについてかなり知っていますが、私はあなたがエラー関連の質問に答える傾向があることを知りました。あなたはこれを前に見たことがありますか? –

+0

トレーニングを受けたモデルを実際に正常に実行したことがありますか?新しいnerモデルをどのように訓練したかについていくつかの詳細を説明してください。たとえば、コマンドとプロパティファイルが使用されましたか?このようなエラーが発生した場合、訓練されたモデルファイル自体に何か問題があると思います。 – StanfordNLPHelp

+0

また、コマンドラインでファイルをgunzip'ingしようとしましたか?私はファイルをgzipして作業しなければならないとは思わない。したがって、gzip形式でないバージョンを読み込めます。 – StanfordNLPHelp

答えて

0

私はあなたがスタンフォードCoreNLP 3.7.0をダウンロードし、どこかstanford-corenlp-full-2016-10-31と呼ばれるフォルダを持っていると仮定しています。この例では、/Users/stanfordnlphelp/stanford-corenlp-full-2016-10-31であると仮定します(具体的な状況に変更してください)。

また、Javaプログラムを実行すると、コンパイルされたコードとリソースについては、CLASSPATHが検索されます。 CLASSPATHを設定する一般的な方法は、環境変数をexportコマンドで設定するだけです。

通常、Javaでコンパイルされたコードとリソースは、jarファイルに格納されます。

stanford-corenlp-full-2016-10-31を見ると、.jar個のファイルが表示されます。そのうちの1つはstanford-corenlp-3.7.0-models.jarです。 jarファイル内の内容は、次のコマンドで確認できます。jar tf stanford-corenlp-3.7.0-models.jar

このファイルの中にさまざまなモデルがあることがわかります。たとえば、次のファイルが表示されます。

edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz 

in the model jar

私たちがうまく動作するには、サーバーを実行して、1つのモデルのみをロードするようにします(デフォルトでは3がロードされるため)。

  1. を有する2ラインファイルであるner-server.propertiesと

    export CLASSPATH=/Users/stanfordnlphelp/stanford-corenlp-full-2016-10-31/*: 
    
    java -Xmx12g edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000 -serverProperties ner-server.properties 
    

(ファイルner-server.propertiesと同じディレクトリに)1つのウィンドウでこれらのコマンドを実行しますこれらの2行:

annotators = tokenize,ssplit,pos,lemma,ner 
ner.model = edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz 

上記にそのディレクトリ内のすべてのjarファイルを入れているexportコマンド。それは*の意味です。従ってstanford-corenlp-3.7.0-models.jarCLASSPATHにあるはずです。したがって、Javaコードが実行されると、edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gzを見つけることができます。これを実行すると、サーバーがどこにあるか

wget --post-data 'Joe Smith lives in Hawaii.' 'localhost:9000/?properties={"outputFormat":"json"}' -O - 

は、あなたが(最初のウィンドウに表示されるはずです。

異なるターミナルウィンドウで
  • 、このコマンドを発行し、

      このモデルのみがロードされています edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz。あなたはあなたのファイルから ner.modelを削除し、これらのすべてを再なかった場合、3つのモデルは1

      の代わりにロードすることに注意すべきである

      は、すべての作品の場合か、私に知らせてください。

      custom_model.ser.gzという名前のNERモデルを作ったとしましょう。このファイルは、トレーニングプロセス後にStanfordCoreNLPが出力するものです。私はそれを/Users/stanfordnlphelp/というフォルダに入れています。ステップ1と2が働い

      場合は、これにner-server.propertiesを変更することができるはずです。

      annotators = tokenize,ssplit,pos,lemma,ner 
      ner.model = /Users/stanfordnlphelp/custom_model.ser.gz 
      

      をそして、あなたは同じことを行うとき、それはあなたのカスタムモデルのロードが表示されます。 gzipの問題はありません。まだgzipの問題がある場合は、これを実行しているシステムの種類をお知らせください。 Mac OS X、Unix、Windowsなど...?

      あなたはスタンドアロンのスタンフォードNERソフトウェアでカスタムNERモデルを実行したと言いましたか?もしそうなら、それはモデルファイルのように聞こえます。

  • +0

    カスタムモデルを正常に読み込めました。別のスタックサイトの別の質問で、あるOS(私の場合はWindows)でgzipファイルを作成し、そのgzipを別のOS(私の場合はLinux)で利用しようとするときに問題があることがわかりました。 Windowsシステムにモデルをロードしたときにエラーが表示されませんでした。 **最大の持ち帰りは、あなたがそれをロードする予定の同じOSでモデルを作成することです。**常識のように見えますが、今私たちは知っています。再度、感謝します。 –

    関連する問題