Berkeley Parserの解析失敗について

最近、構文解析器をよく使っているんだけど、public availableな構文解析器の中で精度が高いBerkeley Parserを使っていた(Stanford ParserがF値で85%くらいで、Berkeley ParserはF値で89%くらい)。Javaでできているので、Clojureから触るには何かと便利。

ただ、時々Berkeley Parserは解析失敗で落ちるので困る。未知語が入っていると落ちるのかと思ったが、そういうわけでもなく学習データに入っていない未知のルールだったり、ルールがpruningされてしまったりすると解析失敗で落ちてしまうらしい。pruningで落ちてしまうものに関しては-accurateオプションを付けることで閾値を変えてなるべくpruningで落ちないようにすることもできるが、やはり完全に防ぐことは難しいようだ(Stanford Parserはアホでも何かしらvalidな構文木を吐いてくれる)。構文木を素性として使うならまだしも、機械翻訳の事前並び変えみたいな構文木をルールの中で使う人たちはこういう解析失敗に大してどうやっているんだろうか、結構困ると思うんだけど。

色々調べてみたが、Berkeley Parserの解析失敗を完全に防ぐのはなかなか難しいようで、Stanford Parserを使うか、JavaでなくてもよいならCkylark | Yusuke Odaを使うなどが解決方法のようだ。Stanford Parserは精度的にはstate-of-the-artなものよりは少し劣るけど(最近出たRNNのモデルを使うとかなり精度は出るみたい。RNNなので、木に対する尤度などは計算厳しいけども...)、継続的にメンテナンスされているし、mavenから新しいのをちゃんと取ってこれるし、ドキュメントもしっかりしているから使う分にはStanford Parserのほうが安心感があるなぁ。

言語処理のための機械学習入門 (自然言語処理シリーズ)

言語処理のための機械学習入門 (自然言語処理シリーズ)