Multi-hop Search (다중 홉 검색)
정의: 그래프에서 여러 단계의 관계를 따라가며 정보를 수집하는 검색 기법. 1-hop → 2-hop → n-hop 순서로 직간접 관계를 모두 활용.
기본 개념
Hop의 의미
1-hop: 직접 연결된 이웃
Alice --WORKS_AT--> Google
2-hop: 중간 노드를 거친 관계
Alice --WORKS_AT--> Google --MANUFACTURES--> Chrome
3-hop: 더 깊은 관계
Alice --WORKS_AT--> Google --MANUFACTURES--> Chrome --USED_BY--> User123
실제 예시
추천 시스템
1-hop: 직접 유사도
사용자 A가 본 영화
A --WATCHED--> Movie1, Movie2, Movie3
2-hop: 카테고리 기반 추천
A --WATCHED--> Movie1 --BELONGS_TO--> Drama --HAS_SIMILAR--> Movie4
→ Movie4 추천
3-hop: 협업 필터링
A --WATCHED--> Movie1 --RATED_BY--> User B --WATCHED--> Movie5
→ Movie5 추천 (유사 사용자가 본 영화)
사기 탐지
1-hop: 직접 거래
계정 A --TRANSFERS_TO--> 계정 B (금액 큼)
2-hop: 의심 패턴
A --TRANSFERS_TO--> B --TRANSFERS_TO--> C --WITHDRAWS_FROM--> 환전소
→ 의심 거래 체인 감지
3-hop: 네트워크 분석
A --SHARES_IP--> X --SHARES_EMAIL--> Y --OPENS_NEW_ACCOUNT--> Z
→ 조직된 사기 탐지
Cypher에서의 구현
1-hop 검색
MATCH (a:Person {name: "Alice"})-[r1]->(b)
RETURN a, r1, b2-hop 검색
MATCH (a:Person {name: "Alice"})-[r1]->(b)-[r2]->(c)
RETURN a, b, c3-hop 검색
MATCH (a:Person {name: "Alice"})-[r1]->(b)-[r2]->(c)-[r3]->(d)
WHERE d.risk_level > 0.8
RETURN a, b, c, d가변 길이 경로 (1~5 hop)
MATCH (a:Person {name: "Alice"})-[*1..5]->(result)
RETURN DISTINCT resultVector RAG vs Graph RAG에서의 역할
Vector RAG의 한계
Q: "Alice가 선호할 만한 상품은?"
검색 결과:
→ "Alice, 구매, 책" (청크 1)
→ "사용자, 추천, 영화" (청크 2)
문제: 관계가 단절됨. Alice의 구매 이력과 추천의 연결고리 없음
Graph RAG의 장점 (Multi-hop)
Q: "Alice가 선호할 만한 상품은?"
탐색 경로 (3-hop):
1. Alice --PURCHASED--> Book1, Book2
2. Book1 --BELONGS_TO--> ScienceFiction
3. ScienceFiction --HAS_SIMILAR--> Book3, Book4
결과: Book3, Book4 추천 (깊이 있는 추론)
Multi-hop Search의 특징
장점
✅ 깊이 있는 컨텍스트 — 직접 관계만으로는 알 수 없는 정보 발굴 ✅ 관계 추론 — 간접적 연결고리 발견 ✅ 정확도 향상 — 더 많은 증거 수집 ✅ 이상 탐지 — 비정상 패턴의 깊은 체인 발견
단점
❌ 계산 복잡도 — hop 깊이에 따라 지수적 증가 ❌ 성능 저하 — 깊은 탐색은 느림 ❌ 노이즈 — 너무 깊으면 무관한 정보 포함 가능 ❌ 최적화 필요 — 가중치, 필터링 필요
최적 Hop 깊이 결정
| 도메인 | 최적 깊이 | 사유 |
|---|---|---|
| 추천시스템 | 2~3 | 사용자→아이템→카테고리 |
| 사기탐지 | 3~4 | 거래망 분석 |
| 그래프RAG | 1~2 | 컨텍스트 관련성 |
| 소셜분석 | 2~5 | 영향력 범위 |
| 네트워크분석 | 5+ | 중심성(centrality) 계산 |
성능 최적화 전략
1. 필터링 (Filtering)
MATCH (a:Person {name: "Alice"})-[*1..3]->(result:Product)
WHERE result.price < 100
RETURN result2. 가중치 제한 (Weight Constraints)
MATCH (a:Person {name: "Alice"})-[r1*1..3]->(result)
WHERE all(rel IN r1 WHERE rel.weight > 0.5)
RETURN result3. 경로 제한 (Path Constraints)
MATCH (a:Person)-[*1..3]->(result)
WHERE length(path) <= 3 # 정확히 3 hop 이하
RETURN result4. 샘플링 (Sampling)
MATCH (a:Person {name: "Alice"})-[*1..3]->(result)
RETURN result
LIMIT 100 # 상위 100개만실제 GraphRAG 파이프라인에서의 역할
1. 사용자 쿼리: "Alice의 선호도 프로필은?"
↓
2. 시맨틱 매칭: Alice 노드 식별
↓
3. Multi-hop 탐색:
- 1-hop: Alice의 직접 구매
- 2-hop: 구매 상품의 카테고리
- 3-hop: 유사 카테고리의 상품
↓
4. 컨텍스트 수집: [Alice, 구매, 책, SF, Book3]
↓
5. LLM에 전달: "Alice는 과학소설을 좋아하고..."
↓
6. 최종 답변 생성
관련 개념
- GraphRAG — Multi-hop Search의 주요 응용
- VectorRAGvsGraphRAG — 검색 방식의 차이
- Knowledge Graph — Multi-hop의 기반 구조
- Cypher Query Language — 구현 언어
- EntityExtraction, RelationshipExtraction — 그래프 구축 기초
출처: graphrag-performance — Multi-hop Search의 성능 실증