시작하기무료로 시작하기

그래프 기반 엔터티 정합성 해소

이런! 방탄 프롬프트에 few-shot 예시까지 준비하고 행운을 빌었는데도, LLM이 Romeo Capulet이라는 인물을 환각으로 만들어서 데이터베이스에 몇 줄을 할당해 버렸네요.

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

다행히 지식 그래프의 관계를 활용해, 이 노드가 Romeo Montague라는 다른 노드의 실수로 인한 중복인지 판단할 수 있어요.

similarity_cypher Cypher 구문은 MEMBER_OFINTERACTS_WITH 관계를 사용해 다음과 같은 특성을 갖는 임의의 유사도 점수를 계산합니다:

조건 Cypher 점수 가중치
같은 가문으로의 MEMBER_OF 관계 af = bf +1
동일한 name 속성 a.name = b.name +2
ab가 상호작용하는 등장인물의 교집합 비율 size(inCommon) / size(aInteractsWith) ab와 상호작용하는 비율로 곱함

도메인 지식에 따르면, 점수가 2이면 강한 상관관계를 의미합니다.

이 연습은 강의의 일부입니다

LangChain과 Neo4j로 배우는 Graph RAG

강의 보기

연습 안내

  • 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['____'])
코드 편집 및 실행