Knowledge Graph とNNから始まる（かもしれない）人工知能のブレイクスルー

[前回の記事](https://qiita.com/functionp/items/a7d54c5b3da545ac35f5)では、NIPS 2018に採択された論文 [Embedding Logical Queries on Knowledge Graph](https://papers.nips.cc/paper/7473-embedding-logical-queries-on-knowledge-graphs.pdf)についての解説を行いました。今回の記事では、なぜこの論文に注目したのか、またこの論文のような研究によって将来引き起こされるかもしれないブレイクスルーについて、自分の意見を発信したいと思います。

# 人間の概念はグラフ構造であるという仮説
これは科学的根拠の無い私の仮説（持論）ですが、人間の持つ概念というのはグラフ構造のような形を取っているように思えます。
たとえば、赤ん坊がりんごという物体を最初見て触ったときに、Aということを感じたとします。そして、石を触ったときに同じAということを感じたとすると、Aという感覚を媒介として2つのものを結びつけます。その時点では2つの概念は本質的に同じですが、りんごを見たときにBということを感じ、石を見たときにBということを感じなければ、その意味でその2つの概念は差別化されます。逆に、サンタクロースを見たときもBということを感じると、その意味でりんごとサンタクロースは同質化され・・・ということを繰り返していって、様々な概念にふれるたびに概念へのラベルづけが行われ、概念の差別化が行われていくという仮説です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/107275/0d51d46b-a556-da19-96db-dec095587f78.png)

りんごという概念は「触ると固くて、食べられる外側が赤い果物」であるという辞書的意味をりんごを見たときに脳にインプットが入るというよりは、いろんなものを見たり触れたりする過程で、概念に関してのナレッジグラフの形成が起こり、このグラフ構造上の類似性や共通に結びついているエッジの数などで物事の類似性や類似の質などが定まっていくのではないかと考えています。大人になって言語を習得すると、似ている感じ方や似ている概念そのものに名前をつけ、グルーピングをして、自分の認知そのものを認知していきます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/107275/4eeacb4e-0562-ba27-c7ad-99fc767c2aba.png)

実際は、「固い」というものにもいろいろあり、それの境界線は定かでなく、石を触ったときの「A」りんごを触ったときの「A」は厳密には異なります。そういう意味でベクトル空間というものはその曖昧性をうまくキャプチャしているのかもしれません。**つまり、概念の辞書的な定義を習得していくというよりは、周りの概念との関係性によって概念を形作るという仮説です。**

この仮説のもとでは、 ある概念と別な概念との類似性は、単に類似度（空間上の距離）という尺度で測定できるほど単純なものではなく、類似度の質や構造、そういったものすべての情報を含めないと表現できないのだと考えています（類似度以外もしかり）。そのような意味で、 **私は単語や文章を何らかの手法（畳み込んだり繋ぎ込んだり）でそのまま空間に写像するという自然言語処理のアプローチは、概念の複雑性に関しては多大な情報損失を起こしており、たかだか類似度の比較や分類＋α くらいの処理はできても、その空間上で論理演算や複雑なクエリの計算を行うことは難しいのではないか** と考えてきました。

# グラフ構造＋ニューラルネットワークで可能になる帰納と演繹の両推論
上記の仮説が正しいと仮定すれば、人間も文章を読んだときに、ある程度下図（論文中より抜粋）のようなグラフ構造に置換されるのではないかと考えています。これはJ.F.Sowaが2008年に提唱した[Conceptual Graph](http://www.jfsowa.com/cg/cg_hbook.pdf) というグラフで、このグラフはある意味自然言語を定式化（抽象化）したものと言えます。

<img width="608" alt="スクリーンショット 2018-12-20 23.32.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/107275/8721151d-49f7-16bd-c975-ea931fddf248.png">

しかし、これは論理演算（演繹演算）のような簡単なクエリの処理はできるものの、この形式自体には機械学習の手法が適用できず、文章の類似度の計算やクラス分けなどをすることはできませんでした。つまり、**演繹演算を行うことはできても、帰納演算を行うことはできませんでした**。逆に、単語や文章をそのまま埋め込むアプローチでは、**帰納演算はできても、2つの文章から導かれる論理的帰結を導く、といった論理演算を行うといった演繹演算を行うことはできませんでした**。また、先の仮説のもとでは、人間の脳によって行われる**演繹推論は「あるノードからグラフ上のエッジに従って帰結を導くこと」、帰納演算は「グラフ上にまだ存在していないが存在するであろう新しいエッジ（あるいはノードさえも）を推測すること」**と考えています。

今回取り上げた論文[Embedding Logical Queries on Knowledge Graph](https://papers.nips.cc/paper/7473-embedding-logical-queries-on-knowledge-graphs.pdf) の成果を一言で言うと、グラフというデータ構造をベクトル空間上に埋め込み、その空間上の演算をグラフ上の関係性の演算に置き換え、クエリを満たしうるノードを発見したり未観測のノードを発見したりするというものでした。この論文では、グラフを直接空間上で埋め込んだ上、エッジ上での関係性の推論もニューラルネットワーク（NN）を使って空間上で行うことに成功しています。これはつまり埋め込み空間上でグラフの枝をたどるという演繹推論に近い推論が可能になったということであり、**逆に言えばグラフというデータ構造に対してNN的手法が適用可能になったことを意味しています**。

# これから、自然言語処理に変革が起こるかもしれない
それができると何が嬉しいのでしょうか。従来の埋め込みのアプローチでは、情報劣化が起こるであろうことは上述しましたが、これができると**情報劣化することなく自然言語を空間上に写像することができます**。つまり、自然言語の文章を直接写像するのではなく、一度グラフにしてから写像します。そして、クエリも当論文のようにグラフにしたあとにグラフ上の操作として空間上に適用することで、答えを求めます。自然言語↔グラフの変換に関しては、まだ明確な解はありませんが、他の操作に比べればそこまで難しくは無いように思えます。この変換により自然言語とグラフを行き来することができれば、**自然言語でナレッジベースに対して質問し、帰ってきたグラフを自然言語に直すことで、人間と対話しているかのような自然言語ベースの質問応答システム**ができるかもしれません。私の考える、その理論上での設計図は以下になります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/107275/a2ba3405-12d6-50d5-ce69-4995936554fb.png)

[Embedding Logical Queries on Knowledge Graph](https://papers.nips.cc/paper/7473-embedding-logical-queries-on-knowledge-graphs.pdf)では、自然言語ではなくConjunctive Queryを使い、グラフはDAG（有向非巡回グラフ）に限定されていましたが、根底の仕組みは上図と変わらないという認識をしています。Conjunctive Queryでは論理積と枝の関係性の2つの演算子だけに限定されているのでProjection ${\mathcal P}$ と Intersection ${\mathcal I}$の2つの演算で事足りましたが、自然言語を扱う場合には論理和（$\lor$）や否定($\neg$)、含意($\to$)といったその他の論理演算子に関しても対応する幾何操作を求めないといけません。しかし、これは本論文に言及された${\mathcal P}$や${\mathcal I}$のように、NNを使うことで解決できそうであることが予想されます。また、左側のアウトプットされた埋め込み表現からグラフ（ノード）を求める部分では、本論文中ではスコアを距離とする最小近傍法が使われていました。（このあたりの操作に関しては[前回の記事](https://qiita.com/functionp/items/a7d54c5b3da545ac35f5)を御覧ください。）

Googleが2015年に発表した [Neural Conversation Model](https://arxiv.org/abs/1506.05869)のようなseq2seqベースの従来の対話システムは、対話の組を大量に学習して、来た発話に対して、データ上の返答として最も発生する確率の高い返答を予測し、それを出力するというものでした。これは、返しとして最も"自然な"返答を返す事はできますが、発話の論理的な意味を学習しているわけではありません。しかし、今後は、今回紹介したような論文のようにグラフを使うことで意味の解釈や理解というところにフォーカスした自然言語処理の手法が出てくる可能性があります。

[Embedding Logical Queries on Knowledge Graph](https://papers.nips.cc/paper/7473-embedding-logical-queries-on-knowledge-graphs.pdf)では、Conjunctive Queryに限定されているという大きな制約はありますが、今後このような研究を皮切りに埋め込み空間上の幾何操作を使ったグラフ構造解釈のアプローチが増えてくるのではないかと感じます。もしかしたら、今後上記のような自然言語を直接クエリとした手法も出てくるかもしれません。そのような研究は、自然言語処理におけるブレイクスルーとなり、人間のように対話できる質問応答システムを作る手助けとなるかもしれません。

# おわりに
自分は会社を経営していた関係上、ここ1〜2年の論文が追えていないので、すでに似たような手法があったり、学術的な裏付けが乏しい部分もあるかもしれませんが、以上が私の頭の中にある「人工知能」の設計図の概観となります。[Embedding Logical Queries on Knowledge Graph](https://papers.nips.cc/paper/7473-embedding-logical-queries-on-knowledge-graphs.pdf)を見つけたとき、それを誰かが具現化したのではないかと思ってワクワクしました。今後は自分でも関連研究を追いつつ、弊社scoutyでもこういったプロジェクトをサイドプロジェクトとして走らせて、プロダクトに応用していくといったことをしていきたいと考えています。
「似たような研究がある」といったことや「人間の概念はこう表されている」があれば、コメントやメッセージなどにてお知らせくださればと思います。