アイソモカ

知の遊牧民の開発記録

開発記録 200206 Thu (100本ノック #059 途中, Stanford CoreNLP CorefAnnotator)

Stanford CoreNLP の解析結果に句構造解析の結果が入っていなかった。アノテータオプションでルールベースの共参照解析を指定することで解決した。

言語処理100本ノック #059

59. S式の解析

Stanford Core NLP句構造解析の結果(S式)を読み込み,文中のすべての名詞句(NP)を表示せよ.入れ子になっている名詞句もすべて表示すること.

Stanford CoreNLP の CorefAnnotator

これまで実行していたとき、アノテータオプションの存在を知らなくて使っていなかった。今回、句構造解析の結果(S式)を読もうとしたら、無い!!! 調べたら、アノテータオプションを -annotators tokenize,ssplit,pos,lemma,ner,parse,dcoref と付けるっぽい。参考👉 素人の言語処理100本ノック:59 - Qiita

ということで、アノテータオプションを付けて実行した。

実行したコマンド
$ java -Xmx3g -cp "/Users/ファイル置いてるとこ/stanford-corenlp-full-2018-10-05/*" edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse,dcoref -file nlp.txt

めっちゃ速くなったよ!?!? 前回は30分以上?もっと?かかっててんけど、今回は数分で終わってん。

結果の違い

ファイルの差分を調べるコマンド $ diff file1.xml file2.xml でざっと見てみると、句構造解析の結果が現れた。

<parse>(ROOT (S (PP (IN As) (NP (JJ such))) (, ,) (NP (NN NLP)) (VP (VBZ is) (ADJP (VBN related) (PP (TO to) (NP (NP (DT the) (NN area)) (PP (IN of) (NP (JJ humani-computer) (NN interaction))))))) (. .))) </parse>

それだけではなく、係り受け解析の結果も変わっているところがある。

3文目

Many challenges in NLP involve natural language understanding, that is, enabling computers to derive meaning from human or natural language input, and others involve natural language generation.

f:id:piijey:20200206210357p:plain
3文目の構文木(前回の解析)

f:id:piijey:20200206210452p:plain
3文目の構文木(今回の解析)

… ”and” がどれとどれをつないでいますか、という問題か。今回の解析のが合っていそうやんなあ。

Deterministic (ルールベース) と Statistical (機械学習ベース)

CoreNLP のコマンドラインでの使い方によると、アノテータを指定しない場合にどのアノテータを使うかが書いてある。

The -annotators argument is also optional. If you leave it out, the code uses a built in properties file, which enables the following annotators: tokenization and sentence splitting, POS tagging, lemmatization, NER, dependency parsing, and statistical coreference resolution: annotators = tokenize, ssplit, pos, lemma, ner, depparse, coref.

今回指定したアノテータ tokenize, ssplit, pos, lemma, ner, parse, dcoref と見比べると、最後の corefdcoref が違っている。coref は statistical coreference resolution (統計的共参照解析) を指定していて、 dcoref は rule-based coreference resolution (ルールベース共参照解析) を指定している。

CoreNLP CorefAnnotator (共参照解析器) の解説 を見てみよう。

  • Deterministic: Fast rule-based coreference resolution for English and Chinese.

  • Statistical: Machine-learning-based coreference resolution for English. Unlike the other systems, this one only requires dependency parses, which are faster to produce than constituency parses.

  • Neural: Most accurate but slow neural-network-based coreference resolution for English and Chinese.

オプション指定しない場合の「統計的」というのは「機械学習ベース」だから、MacBook Air が壊れないか心配になるくらい時間かかる??? ぼくは何も学習させてないけど?たぶん???

句構造解析の結果が出ていないのも、ルールベースじゃなかったからなのだろうか。機械学習を使えば、句構造解析をする必要がないのだろうか。 そこらへん全然分かってない……。

句構造解析の結果(S式)の構造

カッコがようさんある。S式の S は Stanford の S ではなくて、Symbol の S らしい。

I have a pen.

  ↓↓↓

<parse>
  (ROOT
    (S
      (NP
        (PRP I)
      )
      (VP
        (VBP have)
        (NP
          (DT a)
          (NN pen)
        )
      )
      (. .)
    )
  )
</parse>

名詞句(NP)は、"I" と "a pen" になる。続きは明日か週末に✋