紹介したいこと
-
最近、個人的にグラフデータベースに関心を持ち、Neo4jでデータの可視化を試みました。しかし、初心者なので、グラフデータベースのクエリ(Cypher)を入力するのは非常に時間がかかる上に、ミスもしやすいため、効率的に入力する方法を探していました。
-
そこで、自然言語処理の分野で注目されているChatGPTを使って、文章からCypherクエリを生成することを試してみました。ChatGPTを活用事例をみて、Neo4jでのグラフDBのノード、関係性の作成、検索にも活かせないかと思ったのです。
Cypherとは
Cypherは、グラフデータベースにおける検索、追加、削除、更新などの操作を行うためのクエリ言語です。Cypherは、テーブル構造のデータベースではなく、ノードや関係性からなるグラフデータベースに対して最適化されたクエリ言語です。Cypherは直感的で読みやすく、グラフデータベースの特徴を生かしたパターンマッチング機能や、グラフ分析に必要な統計処理などをサポートしており、グラフデータベースの利用を容易にします。
変換したい文章
Cypherに変換する文章の例をChatGPTに考えてもらった
Johnはニューヨークに住んでいて、プログラマーです。彼はラーメンが好きで、よく近所のラーメン店に行きます。
文章からCypherを作成してもらった結果
CREATE (john:Person {name: 'John'})
CREATE (newyork:City {name: 'New York'})
CREATE (programmer:Job {name: 'Programmer'})
CREATE (ramen:Food {name: 'Ramen'})
CREATE (ramen_shop:Restaurant {name: 'Nearby Ramen Shop'})
CREATE (john)-[:LIVES_IN]->(newyork)
CREATE (john)-[:WORKS_AS]->(programmer)
CREATE (john)-[:LIKES]->(ramen)
CREATE (john)-[:GOES_TO]->(ramen_shop)
動作確認
アカウントを作成すれば、無料で一時的なNeo4jの環境を構築できるAuraDBでDBを利用して動作確認した。
"AuraDBとは"
作成したDBにログインしてQueryの画面で作成したもらったクエリを実行してみた。
Bloomの画面関係性を確認したところ、以下のように正しく表現できていた。
まとめ
- 簡単な文章であれば、ChatGPTは文章からCypherに変換してくれた。自分でGoogleで検索しながら作業するよりもとても効率的であった。自力でやるより、感覚だが、2倍以上のスピードが上がってると思う。あまり知らないものに対して、サポートしてもらって簡単な実装するにはChatGPTは強力だ!
- 変換だけでなく、わからなくなったら、ChatGPTに聞いて解決できることも良かった。
- ときどき、ChatGPTで間違ったクエリが提示されるが、間違ってる部分の修正をお願いしるようなやり取りすれば、訂正したクエリがかえってくるやりとりもできた。
所感
- OpenAIのAPIにも同様のリクエストはできるので、文章 to Cypher 変換はできそう。文章から、その状況をグラフデータベースで可視化したい場合には活用できそう。だいたいの状況を知りたいケースなど。ただし、OpenAIに送るデータにビジネス用途の秘密情報が含まれる場合などは、より検討が必要である。今回はあくまでも、公開されてる、秘密でない情報での変換を前提としている。
- データオーケストレーションツール、ETLなどから、データの変換を検知して、AIのAPIを活用して、グラフDBに蓄積していくなどのシステム構成も考えられると思った。時間があれば試してみたい。
参考
- Neo4jの公式のtwitterでもすでに話題になってました・・・。やっぱ活用したくなりますよね!
- Azure OpenAI Service
AzureでRest APIから使用できるサービスがある。Micorosoftが提供する基盤で使用できるのもいい。モデルをカスタマイズモデルするなど試してみたい。一般公開してほしい。(2023年2月時点)