• 2024/12/16 掲載

GraphRAGとは何かを解説、従来型RAGとの違いは?活用手順もイチから紹介(3/3)

  • icon-mail
  • icon-print
  • icon-hatena
  • icon-line
  • icon-close-snsbtns
4
会員になると、いいね!でマイページに保存できます。

Neo4jの使い方とは? 手順をイチから解説

 ここまでグラフデータベースの特徴について解説してきたが、理解のために最も有効なのは、実際に手を動かしてグラフデータベースを構築してみることだろう。

 ここからは、最も広く使われているグラフデータベースであるNeo4jのAuraデータベースの基礎的な使い方を解説していきたい。

 まず、Neo4jのWebサイトにアクセスし、無料登録を行う。

画像
Neo4jのWebサイトから会員登録を行う
(出典:neo4j

 登録手順を進めていくと、以下のようなデータベースのインスタンス選択ページが表示されるので、無料版を選択する。

画像
データベースのインスタンス選択ページ
(出典:Neo4j

 次にデータベースインスタンスのパスワードが生成される。「Download and continue」ボタンをクリックして次に進む。

画像
パスワードが生成された画面
(出典:Neo4j

 「Download and continue」ボタンをクリックすると、以下のようなダッシュボードが表示される。インスタンスが構築されるまで数分かかるので、しばらく待つ。

画像
ダッシュボードが表示された後、インスタンス構築まで数分がかかる
(出典:Neo4j

 インスタンス構築が完了すると以下のようになるため、「Open」ボタンをクリックして、インスタンスにアクセスする。

画像
「Open」をクリック
(出典:Neo4j

 以下がNeo4jのデータベースインターフェースとなる。

画像
Neo4jのデータベースインターフェース
(出典:Neo4j

グラフデータベースの構築を試してみた

 ここでは、小規模なソーシャルネットワークのユーザー関係を表現するグラフデータベースを構築してみたい。用いるのは、Cypher言語だ。

 入力欄にまず入力するのは、以下のクエリだ。入力後、右端にある右向き三角ボタンをクリックして実行する。

CREATE (alice:Person {name: 'Alice', age: 30})
CREATE (bob:Person {name: 'Bob', age: 35})
CREATE (charlie:Person {name: 'Charlie', age: 28})
CREATE (david:Person {name: 'David', age: 32})

画像
クエリ実行後の画面
(出典:Neo4j

 このCypherクエリは、グラフデータベースにPersonノードを4つ作成するものである。

 まず、CREATEコマンドを使用して、各ノードを個別に生成。()内にノードの詳細を指定し、:Personはこのノードに「Person」というラベルを付与することを意味する。ラベルはノードのカテゴリや種類を示し、後でクエリを実行する際にノードをグループ化したり、特定のタイプのノードを簡単に検索したりするのに役立つ。

 続いて、中括弧{}内にノードのプロパティを定義している。nameとageという2つのプロパティを各ノードに設定しており、これらはノードの属性を表す。nameは文字列として、ageは数値として保存される。

 これらのクエリは、具体的には以下を意味する。

Aliceという名前で30歳のPersonノードを作成
Bobという名前で35歳のPersonノードを作成
Charlieという名前で28歳のPersonノードを作成
Davidという名前で32歳のPersonノードを作成

 このクエリを実行すると、グラフデータベース内に4つの独立したPersonノードが生成される。これらのノードは、後続のクエリで関係性を追加したり、データを検索したりする際の基礎となる。

 Personノードを作成すると、ダッシュボード左側にPersonノードが表示される。

画像
ダッシュボード左側に表示されたPersonノード
(出典:Neo4j

 これをクリックすると、以下のように、先ほど作成した4つのPersonノードが表示される。

画像
先ほど作成した4つのPersonノード
(出典:Neo4j

 次に4つのノード(4人のユーザー)の関係を構築していく。以下の4つのクエリを実行すると、各ノード(ユーザー)は、ほかのどのユーザーと友人関係であるのかを設定する。

クエリ1:
MATCH (alice:Person {name: 'Alice'}), (bob:Person {name: 'Bob'})
CREATE (alice)-[:FRIENDS]->(bob)

クエリ2:
MATCH (bob:Person {name: 'Bob'}), (charlie:Person {name: 'Charlie'})
CREATE (bob)-[:FRIENDS]->(charlie)

クエリ3:
MATCH (charlie:Person {name: 'Charlie'}), (david:Person {name: 'David'})
CREATE (charlie)-[:FRIENDS]->(david)

クエリ4:
MATCH (alice:Person {name: 'Alice'}), (david:Person {name: 'David'})
CREATE (alice)-[:FRIENDS]->(david)

 1つ目のクエリを例に解説したい。

MATCH (alice:Person {name: 'Alice'}), (bob:Person {name: 'Bob'})
CREATE (alice)-[:FRIENDS]->(bob)

 このCypherクエリは、既存のノード間に関係性を作成している。具体的には、AliceとBobという2人のPersonノード間に「FRIENDS」という関係を設定している。

 まず、MATCHステートメントを使用して、データベース内の既存のノードを検索する。

 (alice:Person {name: 'Alice'})は、Personラベルを持ち、nameプロパティが'Alice'であるノードを検索し、それをaliceという変数に割り当てている。同様に、(bob:Person {name: 'Bob'})はBobのノードを検索している。

 次に、CREATEステートメントで、検索された2つのノード間に新しい関係を作成している。(alice)-[:FRIENDS]->(bob)という構文は、aliceノードからbobノードへの方向性のある関係を作成することを意味する。[:FRIENDS]は、この関係の種類を「FRIENDS」と定義している。

 この関係性は方向性を持っており、alice -> bob という向きに設定されている。グラフデータベースでは、関係性に方向性を持たせることで、より詳細で柔軟なデータモデリングが可能となる。

 このクエリを実行すると、AliceとBobのノード間に「FRIENDS」という関係が作成される。これにより、「AliceはBobの友人である」という情報がグラフデータベースに追加されることになる。

 4つのクエリを実行すると、ダッシュボード左側の「Relationships」に、「FRIENDS」が表示される。これをクリックすると、「FRIENDS」の関係を持つノードが表示される。グラフは以下のように表現される。

画像
4つのクエリを実行すると「FRIENDS」が表示される
(出典:Neo4j

画像
表示された「FRIENDS」のグラフ
(出典:Neo4j

 このようにノードとその関係性をデータベースとして構築していくことで、さまざまな分析を容易に実行できるようになる。

 たとえば、この事例であれば以下のようなシンプルなクエリで、「最も多く友人を持つユーザーは誰か」を把握することが簡単に実行できるのだ。

MATCH (p:Person)-[:FRIENDS]->(friend)
RETURN p.name AS Person, count(friend) AS FriendCount
ORDER BY FriendCount DESC
LIMIT 1

 その答えは以下の通り「Alice」である。4人の中で、2人の友人を持っており、最多となる。これは、上記のノードと関係性のグラフからも分かる。Aliceは、BobとDavidと友人関係であることが示されている。

画像
上記のクエリで表示される結果
(出典:Neo4j

 このNeo4jグラフデータベースは、LLMマルチエージェントフレームワークであるLangchainでも使うことができるため、複数のLLMとグラフデータベースを活用したGraphRAGシステムを構築することも可能だ。

 グラフデータベースとGraphRAGの活用はさらに活発化することが見込まれる。これに関してどのようなツールやアプリケーションが登場するのか、今後の注目ポイントと言えるだろう。

評価する

いいね!でぜひ著者を応援してください

  • 4

会員になると、いいね!でマイページに保存できます。

共有する

  • 0

  • 6

  • 0

  • 1

  • 0

  • 0

  • icon-mail
  • icon-print
  • icon-hatena
  • icon-line
関連タグ タグをフォローすると最新情報が表示されます
あなたの投稿

    PR

    PR

    PR

処理に失敗しました

人気のタグ

投稿したコメントを
削除しますか?

あなたの投稿コメント編集

機能制限のお知らせ

現在、コメントの違反報告があったため一部機能が利用できなくなっています。

そのため、この機能はご利用いただけません。
詳しくはこちらにお問い合わせください。

通報

このコメントについて、
問題の詳細をお知らせください。

ビジネス+ITルール違反についてはこちらをご覧ください。

通報

報告が完了しました

コメントを投稿することにより自身の基本情報
本メディアサイトに公開されます

必要な会員情報が不足しています。

必要な会員情報をすべてご登録いただくまでは、以下のサービスがご利用いただけません。

  • 記事閲覧数の制限なし

  • [お気に入り]ボタンでの記事取り置き

  • タグフォロー

  • おすすめコンテンツの表示

詳細情報を入力して
会員限定機能を使いこなしましょう!

詳細はこちら 詳細情報の入力へ進む
報告が完了しました

」さんのブロックを解除しますか?

ブロックを解除するとお互いにフォローすることができるようになります。

ブロック

さんはあなたをフォローしたりあなたのコメントにいいねできなくなります。また、さんからの通知は表示されなくなります。

さんをブロックしますか?

ブロック

ブロックが完了しました

ブロック解除

ブロック解除が完了しました

機能制限のお知らせ

現在、コメントの違反報告があったため一部機能が利用できなくなっています。

そのため、この機能はご利用いただけません。
詳しくはこちらにお問い合わせください。

ユーザーをフォローすることにより自身の基本情報
お相手に公開されます