始める無料で始める

グラフに基づくエンティティ解決

なんてことでしょう。堅牢なプロンプトや few-shot の例を用意して祈ってみたのに、LLM が Romeo Capulet という架空のキャラクターを幻覚し、データベースにいくつかのセリフまで割り当ててしまいました。

{
  "id": "romeo-capulet",
  "name": "Romeo Capulet",
  "family": "Montague"
}

幸い、ナレッジグラフ内のリレーションシップを使って、このノードが Romeo Montague という別人物の誤重複である可能性を判断できます。

similarity_cypher の Cypher 文は、MEMBER_OFINTERACTS_WITH のリレーションシップを用いて、次の特性をもつ任意の類似度スコアを算出します。

Condition Cypher Points Modifier
同じ家系への MEMBER_OF リレーションシップ af = bf +1
同一の name プロパティ a.name = b.name +2
ab がやり取りしているキャラクターの割合 size(inCommon) / size(aInteractsWith) a がやり取りしている b の割合で乗算

ドメイン知識から、スコアが 2 であれば強い相関を示すとわかっています。

この演習はコースの一部です

Graph RAG with LangChain and Neo4j

コースを見る

演習の手順

  • Cypher クエリ(similarity_cypher)で graph にクエリを実行し、"romeo-capulet" と他のキャラクターノードとの類似度スコアを計算します。
  • results の各 row から、"bId""bFamily""score" の順で値を取り出してください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Query the graph with similarity_cypher
result = ____

# Extract and print the results
for row in result:
    print(row['____'], 'from', row['____'], 'has similarity score of ', row['____'])
コードを編集して実行