fbpx

Neo4jでNASAのナレッジグラフを再現してみた #neo4j #graph #nosql

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

今回は、弊社の李・朱・細見が社内PoCとして「Neo4jを利用してNASAのナレッジグラフを再現してみた」プロセスについてお送りします!
この社内プロジェクトは、2019年4月~7月の間に、各メンバーが他のプロジェクトに参加しながら、残りの時間を有効活用する形で進められました。

プロジェクト名:
* AIによるナレッジグラフの自動生成及びナレッジのレコメンド、Cypherによるナレッジ検索エンジン開発のためのPoC(ナレッジレコメンデーションエンジン)

ちなみにこの内容は、毎週月曜日に弊社で行っているWeekly朝会で全社員に共有されました。
Weekly朝会の詳細についてはこちらもご参照ください♪

社内PoCの背景

今回の社内PoCのきっかけは、「市場に対してクリエーションライン自ら、Neo4jの需要を起こせないか?」と思ったこと。
また、以下のような事例をみて刺激を受け、われわれの力(CLのエンジニア)で、どこまで再現できるのか、チャレンジしてみたかった、というわがままを通す形で成立しました。

  • NASAのナレッジグラフ
    NASAでは、膨大な研究文献や資料をもっているが従来のタグ付けのような検索システムでは限界を感じていた。
    彼らはおそらく、MLのトピックスモデルで文献を解析し、Neo4jでナレッジグラフを生成し、新しいタイプの「文献&ナレッジレコメンドシステム」を構築している。
    同様な事例は世界的にも珍しく、国内でも事例がない。
    [How NASA Finds Critical Data through a Knowledge Graph]
    https://neo4j.com/blog/nasa-critical-data-knowledge-graph/?ref=solutions#what-is-knowledge-architecture

われわれがNASAモデルに注目したのは、人間が推論したような検索が出来ること。
実際にはまだまだギャップがありますが、少なくとも全文検索よりは精度が高い検索が実現できることでした。

  • AIオントロジーでのNeo4jの活用
    AIも結局、データを蓄積し、メンテナンスし、検索する必要がある。既存のオントロジーの研究では、RDFモデル(インターネットを支えているデータモデルで本質的にはグラフ)をベースにしてデータモデルを設計し、実装はRDBでやっているらしい。しかし、グラフモデルをRDBに実装すると検索のパフォーマンスが良くない。そこで、RDFモデルをグラフデータベースであるNeo4jに取り込むPoCなどは、すでに海外では事例が出始めている。その結果もまた好評だ。何よりも検索のパフォーマンスが圧倒的に優れている。
    [Importing RDFS/OWL ontologies into Neo4j]
    https://lju-lazarevic.github.io/ImportingRDFSOWL.html
    [Neo4j graph database realizes efficient storage performance of oilfield ontology]
    https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0207595

海外では、「グラフ≒オントロジー」とされているようで、AIを実現するためのデータストアとしてグラフ構造のデータベースであるNeo4jが注目を浴びているようです。

Digital Brain(デジタルブレイン)構想

まず、色んな思いを盛り込むことからはじめてみました。NASAのナレッジグラフも意識はしつつも、それに拘ることなく、夢を膨らませてみよう!ということに。そして、エンジニア達がやりたいことをイメージ化したものが、「図:Digital Brain」です。エンジニア達の言葉を借りると、学習して「どんどん賢くなるナレッジベース」というコンセプトです。
最終的には、日本語を解析しナレッジグラフを生成する、日本語の質問をCypherに変換してナレッジグラフに投げ、回答を返してくれるAPIををイメージしていました。
この段階でのキャッチフレーズは、「NASAを超えてみよう!」でした。


[図:Digital Brain]

  • データ
    外部情報+内部情報

  • 外部情報
    インターネットの情報

  • 内部情報
    組織体の内部で蓄積しているデータサイロの情報。プロジェクト計画書や研究ログ、規定や評価基準書、PJに参画した人の生の声、内部の人間がレコメンドした情報等々

  • 興味
    ナレッジグラフに情報を収集するためのトピックス

Minimum Viable Product(MVP) の策定

ただ、一気にすべてのイメージ(Digital Brain)を実現することは困難なので、最小限のゴールを決めました。
それが、「図:Minimum Viable Product(MVP)」です。そこで、まずは3カ月後ぐらいに動くもの(MVP)を開発するという目標でスタートを切りました。


[図:Minimum Viable Product(MVP)]

  • ナレッジグラフを生成するまで、一切人間の手を加えることなく、日本語の文書を読み込んでタグ付けを行い、グラフを生成する
  • 問い合わせは、日本語の文章で行い、言葉での問い合わせをCypherに切り替えて検索を行う
  • このような機能をCUIで実装してみる

グラフの作成過程

  • 第1作目のグラフ

これは、第1作目のグラフです。データはライブドアの7000件のブログです(検証とかで使って良いとされているもの)。シンプルに見えますが、日本語構造になっており、日本語がすべて収まるグラフになっています。この段階では、吸い込まれるような感じで日本語の構造をグラフとして再現してみることにしました。このときは何故か、凄い成果が得られるのではないか、という期待感で一杯でした。

・・・結果は歯がゆいものでした。
質問を投げると、キーワードの意味に近い言葉も良い感じでヒットしましたが、、類似語の検索ができない、考慮すべき検索パターンが多すぎるなど、課題が一山積み。しかし!もうちょっと頑張れば良い感じで検索できそう、という感が強く残りました。

  • 第2作目のグラフ
    このグラフでは、第1作目での結果を受け、日本語をより忠実に再現してみました。自然言語を「てにをは」まで細部に渡って再現し、言語の意味をより正確にとらえることで、全文検索を超えるレベルに到達する、という狙いでした。
    その結果、あまりにも関係性が複雑になってしまいました。また、「正確な言語構造には正確な語順による検索が必要」ということがわかり、検索の有効性が著しく落ちることがわかりました。
    (・・・まあ、実装する前は何かが凄いことが起きると、期待に満ちていたのですが。。)
    ある意味、7000件のブログから、20万を超えるノードと200万を超える日本語構造のグラフを作ったのだから、凄いことが起きていたのは事実です!笑
    (グラフが重すぎて、まったく検索ができてない状況になっていました。)

第3作目のグラフ

第2作目の結果を受けて、思い切り方向転換をして、直にNASAモデルを踏襲して再現してみることになりました。その結果が、次の「図: Knowledge graph of the NASA」です。なんとか、NASAのナレッジグラフを再現できました。もちろん、品質という面ではいろいろ課題ばかりが浮き彫りになりましたが、日本語の解析から、タグ付けの自動化(人が介入しない)という面では成功を得ました。
NASAのナレッジグラフは、上記で紹介しているようにNeo4jのブログで紹介しているデータモデルをそのまま使いました。当初、あまりにもシンプルだったので、「これでいいのか?」「NASAで肝心な部分をマスクして出しているのではないか?」という議論もありました。
しかし、実際にやってみた結果としては、ブログで出しているデータモデルで必要十分ではないか、と言う結論に達しました。

[図: Knowledge graph of the NASA]

社内PoCのまとめ

最後に、社内PoCに参加したエンジニア達の生の声をお伝えします!

  • MVPレベルでのNASAのナレッジグラフの再現は成功した!
    「結局、NASAナレッジグラフの再現に成功したのか?」ということですが、MVPのレベルでは「成功しました」、と答えることができます。現段階としては、わわわれのチャレンジは、NASAモデルの再現可能性を確かめたところで、一旦、ペンディングしています。ただ、プロダクトレベルにもって行くためには、いろいろ課題が多いことも分かりました。実際にPoCを進める過程で、必要な知識のほとんどを海外の論文や事例から得るしか方法がありませんでした。当然、必要なツールも英語しかない事が多く、それらを作りながら進めるしかないことを実感しています。何よりも、基礎研究のようなことが必要であると考えています。例えば、日本語の類似語のグラフや言葉の概念を体系化したようなグラフなどです。プロダクトを出すためのチャレンジをするかどうかの判断は、道なき道を進むことになりそうだということで、なかなか厳しい状況です。

  • 実に楽しかったし、多くのことを勉強するきっかけになった
    プロジェクトに参加したメンバー達は、このプロジェクトの過程や結果をとても楽しんでいました。本当に楽しかったです!企画も調査も、論文や事例を読みあさることも、すべて!
    何か創造的な作業に携わることが、こんなに楽しいことなんだ、という事が分かりましたし、多くの知識を得ることができました。今後、どのような展開になるかは読めない部分がありますが、少なくとも関連するプロジェクトに関わったとしたら、この体験は重宝されると思います。

  • 社内PoCの承認まで、わずか1日、はやっ (実話です)
    社員がこのようなことをするには、稼働の一部を分ける必要がありますので、会社としては「投資」となり、メンバーの稼働を紐づけるプロジェクトコードの発行が必要になります。このプロジェクトを企画した「メンバー」は、次の「落書きのような図」にやってみたい事をまとめて、それをCTOに持ちかけました。

それから、わずか1日で(はやっ)、プロジェクトコードが発行され、その枠のなかで具体的なプランを立てることができました。これも一つ、クリエーションラインらしいところですね。「いつ投資が回収できるんだ?そのプランを出せ!」と言われたら、このような話はその時点で消えたかもしれません。。。
もちろん、プロダクトになってはいませんが、すべてのプロダクトはこのような試作品からスタートすることでしょう。

このようにクリエーションラインにはパッションを持ったエンジニアがたくさんいます。
今回は、Neo4jのPoCについてお届けしましたが、また社内の様子をお伝えできればと思います!

新規CTA