自然言語処理において、依存構造解析は多くのアプリケーションに役立つ重要な技術の1つでしょう。たとえば、テキストからさまざまな情報を抽出するシステムやアスペクトベースの評判解析、含意関係認識といった幅広いタスクで役立ちます。日本語で依存構造を解析するためのツールとしては、CaboChaやKNP、GiNZAがあります。本記事では、オープンソースの日本語NLPライブラリであるGiNZA v4.0で追加された文節単位の解析APIを使って、文節単位での依存構造を可視化する方法を紹介します。
記事では要点だけを紹介するので、コードについては以下のノートブックを参照してください。
GiNZA v4の文節単位の解析API
GiNZAでは、Universal Dependenciesの枠組みで依存構造解析をしています。GiNZA v4以前は、以下の図の左側のように、単語単位の依存関係を解析することができました。これはこれでいいのですが、日本語においては単語単位より以下の図の右側のように、文節単位で依存構造を捉えられた方が応用するのに便利です。GiNZA v4では、文節単位で解析をするためのAPIが追加されたので、より日本語の解析で使いやすくなりました。
新しく追加された文節解析APIの一覧については、以下を参照してください。
依存構造の可視化
依存構造解析の結果を使って情報抽出やアスペクトベースの評判解析を行う場合、解析した依存構造に対してルールを定義して行うことがあるかと思います。そのようなルールを書く場合、依存構造がひと目でわかるように可視化されていると、仕事がしやすくなります。spaCyには組み込みで依存構造の可視化機能があるのですが、普通に使うと、以下のように単語単位での可視化になってしまいます。
文節単位で解析した結果を、spaCyの可視化機能に合わせた形式へ変換することで、以下のように文節単位での可視化を行うことができます。単語単位での可視化と比べて、よりスッキリとしてわかりやすくなりました。このように可視化したほうが、OpenIEやアスペクトベース評判解析のために、どういったルールを書くかの分析をしやすくなるのではないでしょうか。もちろん、単語単位の可視化と併用することもできます。
もう少し長い文も可視化してみましょう。「デザインがスタイリッシュからどんどん可愛らしくなっています。」を単語単位で可視化すると以下のようになります。
一方で、同じ文を文節単位で可視化すると以下のようになります。
StreamlitによるWebアプリ化
こうして可視化した依存構造は、見出し語や品詞と合わせてインタラクティブに表示できると議論しやすいです。このような機能は、Streamlitを使うことで、Webアプリとして簡単に実現できます(下図)。この仕組みは、後輩の@yasufumyくんがKNPの出力を見やすくするために使ったのがきっかけで知ったのですが、今回はGiNZAで実現するために、そのアイデアを借用させてもらいました。ありがとう!
spaCyで可視化する場合は、以下のリポジトリが参考になると思います。