Graph Convolutionを自然言語処理に応用する Part6

piqcy
programming-soda
Published in
8 min readJan 30, 2019

Part6では、Graph Convolutionの性質が活きるタスクの調査を行います。調査はPart4でも行いましたが、今回は調査の観点が異なります。

  • Part4: 言語モデルの中にGraph Convolutionを組み込むことで、よりリッチな文脈情報を獲得できるようにしたい。
  • Part6: 自然言語処理の中でグラフを扱うタスクを調査し、そのグラフに対しGraph Convolutionを行うことで効果が発揮されそうなタスクを調査する。

調査の観点を変えたのは、当初の仮説に誤りがあるのではないかと考えたためです。当初の仮説とは以下でした(Part1より)。

  • 自然言語処理において、Transformerのようなグラフ的なAttentionを持つモデルが良い性能を出している。
  • グラフを明示的に扱うGraph Convolutionを組み込めば、より高い性能を得られるのではないか。

この仮説は、暗黙的に「グラフが有効=Graph Convolutionが有効」という仮定をおいています。しかし、どうやらその限りではなさそうです。その根拠は、前回読んだHow Powerful are Graph Neural Networks?とテキスト分類に実際適用してみた実験結果です。

How Powerful are Graph Neural Networks?より、Graph Convolutionは以下のタスクで力を発揮します。

  • グラフにあるノードの分類
  • グラフ構造の分類

当初考えた「文脈情報を獲得できるようにしたい」という目的は、Graph Convolutionが得意な2つのタスクとは合致しないものになっています。まず、「文脈」ということは各ノード(単語)の特徴より全体の特徴に興味があります。かといって、グラフ構造に着目しているかというとそうではありません。文法構造が違う=異なる文脈とはなりませんし、むしろ文法構造が違っても同じ文脈になるケースに興味があります。つまり、Graph Convolutionが得意なタスクは文脈情報の獲得とは合っていないということです。

Graph Convolutionに使用するグラフ構造にも課題がありました。既存の研究では係り受け関係か単語類似度を使いグラフを構築することが多いです。しかし、テキスト分類においてはいずれも単純に前の単語に接続するより精度が悪く、またGraph Convolutionのレイヤーを重ねると(=遠い関係を取り込むと)精度が悪化しました

以上2点の結果から、以下のような推論を行いました。

  • 自然言語処理においてグラフは有効だが、どんなグラフが有効なのかは事前にわからないため学習から獲得させた方が良い(=事前にGraphを与えるより、Attentionのように学習させた方が良い)。
  • グラフがあれば、それをConvolution(Propagation)しなくても十分な精度が出る(むしろ悪影響が出る?)。

端的には、自然言語処理においてグラフの構造は有効だが、それは学習して獲得させた方がよく、またあえてConvolutionしなくても十分である、ということです。

以上の考察から、今後は以下のタスクを行ってみたいと思います。

  • グラフを学習するモデルの検証(隣接行列の推定をモデルに組み込む)
    GLoMoの結果を見ると幸先は悪そうなので、封印する可能性あり
  • 自然言語処理でグラフを扱う手法において、Graph Convolutionが有効なタスクを調査する。

Part6では、後者の調査を行います。その手順は以下の通りです。

  1. 自然言語処理でグラフを使った研究を調査
  2. (グラフではなく)Graph Convolutionが有効かどうかの検討

以下が、調査結果となります。

自然言語処理でグラフを使った研究

これについては、ちょうど目的に合うサーベイがありました。

こちらのサーベイでは、自然言語処理における様々なタスクにおいて、グラフを使った研究をまとめてくれています。以下では、このサーベイで得られた知見を述べます。

自然言語処理におけるグラフは、主に「教師なし分類(クラスタリング)」で用いられます。グラフの表現(ノード間の関係による特徴作成)や、グラフにすると使える手法(グラフカットや最短経路探索など)にメリットがある場合使われることになります。

グラフは以下3つの種類に分類できます。

  1. 一般的なグラフ
    ノードが単語、エッジが関連度や距離といったもの
  2. Heterogeneous
    複数種類のノードが混在する。論文と著者、単語と文など。
  3. Hypergraph
    Edgeが複数のノードを接続できる。集合問題に近い

1・2が多く、Hypergraphを使った例はあまり内容でした。

以下の表は、本サーベイ中に出てくる手法の中で特徴的と感じた手法をまとめたものです。

タスクとグラフの用途のまとめ1
タスクとグラフの用途のまとめ2

ACL2018ではグラフ関連の手法についてのワークショップがあったのですが、そこでの事例も上記の表にほぼ含まれるかなという印象です。

活用シーンとしては「ノード分類」が大半です。この場合大きいグラフでないとメリットが出ないのではと感じます。端的にはノードが少ない=関係も少ないため、関係性を考慮するメリットが薄そうです。自然言語処理では、リッチなノード特徴となる単語分散表現があるためなおさらです。関係性を考慮するとしても、1段階のみで十分ということもありそうです(Self-Attentionはまさにこれを表していると思います)。

あとは、Heterogeneousなグラフの方がいいのかなというのが個人的な印象です。ノードを単語にするというのは一般的ですが、ELMoやBERTよりリッチな単語表現が得られるかというとかなり難しいのではという気がします。文/文書を分類するにしても、ELMo/BERTの表現を使った分類機に勝てるかというと微妙かなという気がします。そのため、グラフを使うのであれば複数種類の表現を混在させられるというグラフならではのメリットを活かすべきなのではないかと感じます。

大規模かつHeterogeneousなグラフで、かつノード分類の問題に帰着できる」これがGraph Convolutionの登場機会ではないかと考えます。その意味では、以下の研究は結構良いアプローチな気がします。

ただ、分類精度はSWEMと僅差という感じなので、ELMo/BERTを使ったら負けそうではあります。自然言語以外のリソース(画像など)を組み合わせるタスクでないと優位性はあまりでないのかもわかりません。

以上がサーベイ結果になります。次回は、グラフの学習を挟むかもしれませんが、Graph Convolutionサーベイ編は最終回になる予定です。

--

--

piqcy
programming-soda

All change is not growth, as all movement is not forward. Ellen Glasgow