Graph Convolutionで自然言語処理を行う(テキスト分類編) Part4
Part4では、Graph Convolutionを利用したテキスト分類機の挙動を分析してみます(実装についてはPart3を参照)。分析のゴールは、テキスト分類において「どんなグラフ構造」の「どんな関係」が精度向上に寄与するのかを明らかにすることです。
- どんなグラフ構造
ノードの種別: 単語表現の種類
関係の種別: 係り受け関係(dependency)/単語類似度(similarity) - どんな関係
有効な関係: どの係り受け関係が効いているのかなど
実際に検証したところ、グラフの構築にミスがあった場合精度に致命的な影響があることがわかりました。ただ、グラフの構築(Dependency Parseなど)は常にうまくいくわけでありません。そこで、次回Part5ではそうした事情を加味したうえで、適切なリスクヘッジを行う手法を探っていきたいと思います。
以下は、実験の詳細となります。
グラフ構造の検証
有効なグラフ構造を検証するための項目は以下となります。
ノードの種別
- 単語分散表現のみ
- LSTMの隠れ層(文脈が考慮される)
- Graph Convolutionした後にLSTM(同様に、文脈が考慮される)
LSTMは、通常のLSTMと既存の研究で効果が実証されているBi-directional LSTMの2つを使います。
関係の種別
- 係り受け関係(dependency)
- 単語類似度(similarity)
検証に使用したNotebookは以下になります。
結果を見ると、Graph Convolutionがほとんど効いていないことがわかりました。
- Word Embedding only: Graph Convolution単独ではほぼランダムと変わらない精度しか出ていない。
- LSTM before: LSTMの隠れ層をGraph Convolutionの入力とする場合。精度はある程度出ているが、baselineを下回っている(=ある意味邪魔している状態)。
- LSTM after: Graph Convolutionの出力を入力としてLSTMを行った場合。精度が出ていない。
- Bi-directional: LSTM beforeのケースをBi-directionalにして検証。LSTM before同様、精度は出ているがbaseline以下。
もう少しGraph Convolution単独の精度(Word Embedding only)を上げないと、そもそも組み合わせること自体に意味がないような印象です。
有効な関係の検証
Graph Convolutionにおいて、重要視されている関係(接続)を調べてみます。今回はGraph ConvolutionとしてGraph Attention Networkを使用しているため、グラフのエッジにかかる重み(Attention)の可視化が可能です。Attentionを分析することで、どのようなエッジ(=接続=単語間のつながり)が重要視されているのかがわかります。
分析に使用したNotebookは以下です。
実際に可視化してみたものが、以下になります。
未知語(<unk>)が入った影響か、グラフの接続がほとんどありません。グラフを構築する際は、前処理済みのデータは使わない方がよさそうです(考えてみれば当然ではありますが・・・)。
考察
Graph Convolution単体の精度が出ていない点を改善する必要がありそうです。行っていること自体はSelf Attentionに近いため、少なくともLSTMレベルの精度は出てもよさそうに思えます。
今回の検証で分かった点は、当然ですがグラフの構築にミスがあると機能しないということです。この点はGraph Convolutionを使う際の一つのリスクになりそうです。特にDependency Parseはいつも成功するわけではありませんし、フルの文長が使えない(=文が途中で切れる)ケースも当然あります。
次回Part5では、Graph Convolution単独でLSTM近辺の精度を出すことに挑戦します。そこから、Graph Convolutionを自然言語で使うための実践的なテクニックを見つけていこうと思います。