지역에서 전역으로: 그래프 RAG (GraphRAG)
개체 그래프의 커뮤니티 요약과 맵-리듀스로 데이터 전체를 아우르는 질문에 답하는 RAG
먼저 알아야 할 것
다루는 내용
GraphRAG는 LLM으로 문서 조각에서 개체 · 관계 · 주장을 뽑아 지식 그래프를 만들고, Leiden 알고리즘으로 계층적 커뮤니티를 찾아 층별 커뮤니티 요약을 미리 생성합니다. 전역 질문이 오면 요약 묶음마다 부분 답과 도움 점수를 만들고(맵), 점수 순으로 모아 최종 답을 씁니다(리듀스). 약 100만 토큰 팟캐스트 · 뉴스 데이터에서 벡터 RAG 대비 포괄성 72~83%, 다양성 62~82% 승률을 보였고, 루트 층 요약은 원문 직접 요약보다 토큰을 97% 넘게 적게 썼습니다.
초록
외부 지식 원천에서 관련 정보를 검색하는 검색 증강 생성(RAG)은 대형 언어 모델(LLM)이 비공개 문서나 처음 보는 문서 모음에 대한 질문에 답할 수 있게 해 줍니다. 하지만 RAG는 "이 데이터셋의 주요 주제는 무엇인가?"처럼 텍스트 말뭉치 전체를 향한 전역 질문에는 실패합니다. 이것은 본질적으로 명시적인 검색 과제가 아니라 질의 중심 요약(QFS) 과제이기 때문입니다. 한편 기존 QFS 방법은 일반적인 RAG 시스템이 색인하는 정도의 텍스트 양으로 확장되지 않습니다. 이 대조적인 방법들의 장점을 결합하기 위해, 우리는 사용자 질문의 일반성과 원문 텍스트의 양 모두에 맞춰 확장되는, 비공개 텍스트 말뭉치에 대한 그래프 기반 질의응답 방법인 GraphRAG를 제안합니다. 우리의 방법은 LLM을 써서 두 단계로 그래프 색인을 만듭니다. 먼저 원문 문서에서 개체 지식 그래프를 도출하고, 그다음 밀접하게 관련된 개체들의 모든 묶음에 대해 커뮤니티 요약을 미리 생성합니다. 질문이 주어지면 각 커뮤니티 요약으로 부분 응답을 만들고, 모든 부분 응답을 다시 요약해 사용자에게 줄 최종 응답을 만듭니다. 100만 토큰 규모 데이터셋에 대한 전역적 의미 파악(sensemaking) 질문들에서, GraphRAG는 기존 RAG 기준선보다 생성된 답의 포괄성과 다양성 모두에서 크게 향상됨을 보였습니다.
해설
지역에서 전역으로: 그래프 RAG (GraphRAG)
"이 자료 전체의 주요 주제는 뭐야?"처럼 문서 모음 전체를 아울러야 답할 수 있는 질문 을 위해, LLM으로 개체 · 관계 지식 그래프를 만들고, 그래프를 '커뮤니티'로 나눠 미리 요약해 둔 뒤, 그 요약들로 맵-리듀스식 답을 만드는 Microsoft Research의 방법입니다. 100만 토큰급 데이터에서 일반 벡터 RAG보다 답의 포괄성 · 다양성이 크게 높았습니다.
| 항목 | 내용 |
|---|---|
| 원제 | From Local to Global: A Graph RAG Approach to Query-Focused Summarization |
| 저자 | Darren Edge 외 9명 (Microsoft Research 등) |
| 발표 | 2024 (arXiv v2: 2025) · arXiv 2404.16130 |
| 트랙 · 수준 | RAG·검색 · 심화 |
| 먼저 알면 좋은 것 | 벡터 RAG, 지식 그래프(개체 · 관계), 그래프 커뮤니티 탐지, 맵-리듀스, LLM 평가자(LLM-as-a-judge) |
들어가기 전에
이 해설은 아래 내용을 안다고 보고 씁니다. 처음이라면 먼저 읽고 오면 수식과 손계산을 훨씬 쉽게 따라올 수 있습니다.
- RAPTOR: 트리 구조로 요약해 검색하기 — 조각을 의미로 묶어 요약하기를 반복한 요약 트리에서 검색해 긴 문서 질문에 답하는 방법
한눈에 보기
- 일반 '벡터 RAG'가 전역 질문(global question) 에 왜 근본적으로 약한지 알게 됩니다.
- 문서 → 개체 · 관계 추출 → 그래프 → 계층적 커뮤니티 → 커뮤니티 요약으로 이어지는 색인 과정 을 따라갑니다.
- 질문 시점의 맵(부분 답) → 리듀스(최종 답) 흐름과 '도움 점수' 정렬을 손계산으로 이해합니다.
- 정답이 없는 질문을 평가하는 방법(페르소나 기반 질문 생성 + LLM 맞대결 판정)과 그 한계를 압니다.
초록 (번역)
외부 지식 원천에서 관련 정보를 검색하는 검색 증강 생성(RAG)은 대형 언어 모델(LLM)이 비공개 문서나 처음 보는 문서 모음에 대한 질문에 답할 수 있게 해 줍니다. 하지만 RAG는 "이 데이터셋의 주요 주제는 무엇인가?"처럼 텍스트 말뭉치 전체를 향한 전역 질문에는 실패합니다. 이것은 본질적으로 명시적인 검색 과제가 아니라 질의 중심 요약(QFS) 과제이기 때문입니다. 한편 기존 QFS 방법은 일반적인 RAG 시스템이 색인하는 정도의 텍스트 양으로 확장되지 않습니다. 이 대조적인 방법들의 장점을 결합하기 위해, 우리는 사용자 질문의 일반성과 원문 텍스트의 양 모두에 맞춰 확장되는, 비공개 텍스트 말뭉치에 대한 그래프 기반 질의응답 방법인 GraphRAG를 제안합니다. 우리의 방법은 LLM을 써서 두 단계로 그래프 색인을 만듭니다. 먼저 원문 문서에서 개체 지식 그래프를 도출하고, 그다음 밀접하게 관련된 개체들의 모든 묶음에 대해 커뮤니티 요약을 미리 생성합니다. 질문이 주어지면 각 커뮤니티 요약으로 부분 응답을 만들고, 모든 부분 응답을 다시 요약해 사용자에게 줄 최종 응답을 만듭니다. 100만 토큰 규모 데이터셋에 대한 전역적 의미 파악(sensemaking) 질문들에서, GraphRAG는 기존 RAG 기준선보다 생성된 답의 포괄성과 다양성 모두에서 크게 향상됨을 보였습니다.
무엇을 풀었나
일반 RAG(이 논문은 벡터 RAG 라고 부름)는 질문과 의미가 가까운 문서 조각 몇 개를 가져와 답합니다. 답이 몇 개의 조각 안에 있는 질문에는 잘 맞습니다.
그런데 다음 같은 질문을 생각해 봅시다.
- "지난 10년간 학제 간 연구가 과학적 발견에 미친 영향의 핵심 흐름은?"
- "이 팟캐스트에서 기술 리더들은 정책과 규제의 역할을 어떻게 보나?"
이런 의미 파악(sensemaking) 질문 의 답은 특정 조각에 있지 않습니다. 데이터 전체를 훑고 흩어진 연결(사람 · 장소 · 사건 사이)을 종합해야 합니다. 질문과 가장 '비슷한' 조각 몇 개를 가져오는 방식으로는 전체의 일부 표본만 보게 되고, 논문은 그 결과가 마치 전체 요약인 것처럼 잘못 제시될 위험까지 지적합니다.
반대로 질의 중심 요약(QFS) 기법은 문서 전체를 질문에 맞춰 요약하지만, LLM 문맥 창에 다 들어가지 않는 대량 데이터에는 확장되지 않았습니다.
GraphRAG의 질문은 이것입니다. RAG처럼 대량 데이터로 확장되면서, QFS처럼 전체를 아우르는 답을 낼 수 있는 방법은 없을까?
핵심 아이디어
flowchart TD
D[원문 문서] --> CH[텍스트 조각 600토큰]
CH --> EX[LLM: 개체 · 관계 · 주장 추출 + 설명]
EX --> KG[(지식 그래프: 노드 = 개체, 간선 = 관계)]
KG --> LD[Leiden 커뮤니티 탐지 · 계층적으로 반복]
LD --> CS[커뮤니티 요약 C0 루트 ~ C3 하위]
Q[전역 질문] --> MAP[맵: 요약 묶음마다 부분 답 + 도움 점수 0~100]
CS --> MAP
MAP --> RED[리듀스: 점수 높은 순으로 모아 최종 답]
RED --> A[전역 답]1. 문서에서 지식 그래프 만들기
직관. 두꺼운 보고서 묶음을 읽으며 '등장인물 · 회사 · 장소' 카드를 만들고, 카드 사이에 "누가 누구를 인수했다" 같은 관계 선을 긋는 작업을 LLM에게 맡깁니다.
단계별 설명.
- 조각 내기: 문서를 텍스트 조각으로 나눕니다. 조각이 길면 LLM 호출 수(비용)는 줄지만, 조각 앞부분 정보를 놓치기 쉬워집니다(논문은 600토큰을 씀).
- 요소 추출: LLM이 조각마다 중요한 개체(entity), 개체 사이 관계(relationship), 그리고 짧은 설명을 뽑습니다. 필요하면 날짜 · 사건 같은 주장(claim) 도 뽑습니다. 분야에 맞는 퓨샷 예시로 프롬프트를 조정할 수 있습니다.
- 합치기: 같은 개체가 여러 조각에서 여러 번 나오므로, 개체는 노드로, 관계는 간선으로 합칩니다. 같은 관계가 반복된 횟수는 간선 가중치가 되고, 설명들은 다시 요약합니다. 개체 이름 맞추기는 이 논문에서는 정확한 문자열 일치로 했습니다.
논문의 예. "NeoChip(NC) 주가가 상장 첫 주에 급등했다 … NeoChip은 2016년 Quantum Systems에 인수됐다 …"라는 조각에서
- 개체 NeoChip: "웨어러블 · IoT용 저전력 프로세서를 만드는 상장사"
- 개체 Quantum Systems: "이전에 NeoChip을 소유했던 회사"
- 관계 NeoChip–Quantum Systems: "Quantum Systems가 2016년부터 NeoChip 상장 전까지 소유"
왜 이렇게 했나. 개체 · 관계 · 주장 추출은 일종의 추상적 요약입니다. 원문에 명시되지 않은 관계까지 의미 단위로 정리해 두면, 나중에 '무엇과 무엇이 엮여 있는지'라는 구조를 활용할 수 있습니다.
2. 커뮤니티로 나누고 미리 요약하기
직관. 인맥 지도를 그려 보면 서로 촘촘하게 연결된 무리(동창 모임, 회사 팀)가 보입니다. 무리마다 "이 무리는 무엇에 관한 무리인가" 보고서를 미리 써 두면, 나중에 전체 그림을 빨리 파악할 수 있습니다.
단계별 설명.
- 커뮤니티 탐지: Leiden 알고리즘으로 그래프를 서로 촘촘히 연결된 노드 무리(커뮤니티)로 나눕니다. 각 커뮤니티 안에서 다시 하위 커뮤니티를 찾는 일을 더 나눌 수 없을 때까지 반복해 계층 을 만듭니다. 각 층은 모든 노드를 겹치지 않게, 빠짐없이 나눕니다.
- 하위(잎) 커뮤니티 요약: 커뮤니티의 간선을 '양 끝 노드 차수의 합'이 큰 순서(눈에 띄는 순서)로 정렬하고, 출발 노드 · 도착 노드 · 간선 설명 · 관련 주장을 차례로 LLM 문맥에 넣다가 토큰 한도에 닿으면 멈춘 뒤 요약합니다.
- 상위 커뮤니티 요약: 모든 요소 설명이 한도에 들어가면 그대로 요약하고, 넘치면 하위 커뮤니티 요약(더 짧음)을 요소 설명(더 김) 대신 끼워 넣어 한도에 맞춥니다.
- 이렇게 루트(C0)부터 하위(C3)까지 층별 커뮤니티 요약이 만들어집니다.
수식 (우선순위 규칙, 설명용으로 정리). 간선 의 우선순위를 두 끝 노드의 차수 합으로 둡니다.
| 기호 | 뜻 |
|---|---|
| , | 간선의 두 끝 노드(개체) |
| 노드 에 연결된 간선 수(차수) |
숫자로 해 보기 (설명용). 간선 A–B에서 A의 차수 5, B의 차수 3이면 우선순위 8, 간선 C–D에서 C 2, D 1이면 3입니다. A–B 관련 설명을 먼저 문맥에 넣습니다. 많이 연결된 '중심 개체'의 정보가 요약에 먼저 들어가게 하는 규칙입니다.
왜 커뮤니티인가. 논문은 그래프의 모듈성(modularity), 즉 서로 촘촘히 엮인 무리로 나뉘는 성질을 활용한 점을 이전 그래프 RAG와의 차이로 듭니다. 커뮤니티는 데이터의 '주제별 분할'이 되어, 나눠서 요약하고(분할) 합치는(정복) 전역 요약을 가능하게 합니다.
3. 질문에 답하기: 맵-리듀스
직관. 큰 회의에서 각 팀장(커뮤니티 요약)에게 같은 질문을 던져 자기 팀 관점의 답과 "내 답이 얼마나 도움이 될지" 자체 점수를 받고(맵), 의장이 점수 높은 답부터 모아 최종 결론을 쓰는 것(리듀스)과 같습니다.
단계별 설명.
- 준비: 사용할 층의 커뮤니티 요약을 무작위로 섞어 정해진 토큰 크기의 묶음으로 나눕니다. 관련 정보가 한 묶음에 몰려 있다가 통째로 잘리는 일을 막기 위해서입니다.
- 맵: 묶음마다 병렬로 부분 답을 만들고, LLM이 그 부분 답이 질문에 얼마나 도움이 되는지 0~100점을 매깁니다. 0점은 버립니다.
- 리듀스: 부분 답을 점수 높은 순으로 정렬해 새 문맥에 토큰 한도까지 채우고, 이것으로 최종 전역 답을 만듭니다.
수식 (설명용 정리).
| 기호 | 뜻 |
|---|---|
| 번째 커뮤니티 요약 묶음 | |
| , | 그 묶음으로 만든 부분 답, 도움 점수 |
| 리듀스 단계 문맥의 토큰 한도 | |
| 최종 전역 답 |
숫자로 해 보기 (설명용). 부분 답 4개의 (점수, 길이)가 (90, 300토큰), (0, 200), (70, 400), (40, 500)이고 한도가 800토큰이라면, 0점을 버리고 90 → 70 순으로 넣어 700토큰, 다음 40점짜리(500)는 넘치므로 멈춥니다. 최종 답은 점수 90 · 70 부분 답을 바탕으로 만들어집니다.
4. 정답 없는 질문을 어떻게 평가했나
직관. "이 데이터의 핵심 주제" 같은 질문에는 정답지가 없습니다. 그래서 두 시스템의 답을 나란히 놓고 심사위원(LLM)에게 "어느 쪽이 더 낫나"를 묻는 맞대결 방식으로 평가합니다.
단계별 설명.
- 질문 만들기: 데이터 설명만 주고 LLM이 가상 사용자 페르소나 명, 사용자마다 과제 개, (사용자, 과제)마다 전역 질문 개를 만듭니다. 로 데이터셋마다 125개 질문입니다. 질문을 말뭉치 원문에서 직접 만들지 않아 공정성을 지킵니다.
- 판정 기준: 포괄성(comprehensiveness), 다양성(diversity), 이해 돕기(empowerment), 그리고 대조 기준으로 직접성(directness). 직접성은 포괄성 · 다양성과 반대 성격이라 어느 방법도 네 기준을 모두 이기지 않을 것으로 봤습니다.
- 맞대결: 질문과 두 답을 LLM에게 주고 승자 또는 무승부를 판정하게 하며, 무작위성을 줄이려고 비교마다 5번 반복해 평균 냅니다.
- 검증: 답에서 검증 가능한 '주장'을 뽑는 Claimify로 주장 수(포괄성)와 주장 군집 수(다양성)를 따로 세어 LLM 판정과 비교했습니다.
결과
데이터와 그래프 규모
- 팟캐스트 대본(Behind the Tech): 600토큰 조각 1,669개(약 100만 토큰) → 노드 8,564개, 간선 20,691개
- 뉴스 기사(2013년 9월~2023년 12월): 600토큰 조각 3,197개(약 170만 토큰) → 노드 15,754개, 간선 19,520개
- 문맥 창은 커뮤니티 요약 · 부분 답 · 최종 답 모두 8k 토큰. 팟캐스트 색인에 gpt-4-turbo로 281분
층별 컨텍스트 크기 (질문 하나에 쓰는 단위 수 / 토큰 수, 원문 요약 TS 대비 비율)
| 데이터 | C0 (루트) | C1 | C2 | C3 (하위) | TS (원문 직접 요약) |
|---|---|---|---|---|---|
| 팟캐스트 | 34개 / 26,657 (2.6%) | 367 / 225,756 (22.2%) | 969 / 565,720 (55.8%) | 1,310 / 746,100 (73.5%) | 1,669 / 1,014,611 (100%) |
| 뉴스 | 55개 / 39,770 (2.3%) | 555 / 352,641 (20.7%) | 1,797 / 980,898 (57.4%) | 2,142 / 1,140,266 (66.8%) | 3,197 / 1,707,694 (100%) |
전역 방법 vs 벡터 RAG (LLM 맞대결 승률)
- 포괄성: 팟캐스트 72~83%, 뉴스 72~80%로 GraphRAG 등 전역 방법이 벡터 RAG를 이겼습니다(p < .001).
- 다양성: 팟캐스트 75~82%, 뉴스 62~71%.
- 직접성(대조 기준)은 예상대로 벡터 RAG가 모든 비교에서 가장 좋았습니다.
- 이해 돕기(empowerment)는 엇갈렸습니다. 구체적 예시 · 인용 · 출처가 중요했다는 분석이 나와, 추출 프롬프트를 조정하면 이런 세부를 더 남길 수 있을 것이라고 봅니다.
커뮤니티 요약 vs 원문 직접 요약(TS)
- 루트 층을 빼면 커뮤니티 요약이 작지만 일관된 우위를 보였습니다. 팟캐스트 중간 층(C2) 포괄성 승률 57%, 뉴스 하위 층(C3) 64%.
- 비용 면에서 하위 층(C3)은 TS보다 컨텍스트 토큰이 26~33% 적었고, 루트 층(C0)은 97% 넘게 적었습니다. 루트 층은 성능이 약간 낮지만 벡터 RAG 대비 포괄성 72%, 다양성 62% 승률을 유지해, 반복 질문이 많은 의미 파악 작업에 효율적이라고 정리합니다.
주장 기반 검증: 답에서 고유 주장 47,075개(답당 평균 31개)를 뽑아 셌더니, 모든 전역 방법이 벡터 RAG보다 주장 수(포괄성)가 유의미하게 많았습니다. LLM 판정이 무승부가 아니었던 경우, LLM 판정과 주장 기반 판정이 포괄성 78%, 다양성 69~70%에서 일치했습니다.
왜 중요한가 · 이후 영향
- '전역 질문'이라는 RAG의 사각지대를 명확히 이름 붙였습니다. 실무에서 "보고서 전체에서 반복되는 리스크는?", "고객 문의의 주요 유형은?" 같은 질문에 벡터 RAG가 왜 엉성한지 설명하는 기준점이 됐습니다.
- 오픈소스로 공개 돼(microsoft/graphrag), LangChain · LlamaIndex · Neo4j 등 여러 라이브러리에 확장으로 들어갔다고 논문이 밝힙니다. 그래프 기반 RAG를 실무에서 시도하는 출발점이 됐습니다.
- RAPTOR와 같은 문제의식, 다른 해법: 둘 다 계층적 요약 색인이지만, RAPTOR는 임베딩 군집으로, GraphRAG는 개체 그래프의 커뮤니티로 주제를 나눕니다.
- 저자들은 질문 임베딩과 그래프 정보를 섞는 지역(local) 질의 방식, 상위 요약에서 하위로 내려가는 '드릴다운' 같은 확장 가능성도 제시합니다.
한계 · 주의할 점
- 색인 비용이 큽니다. 조각마다 LLM으로 개체 · 관계를 뽑고, 모든 커뮤니티를 요약해야 합니다. 100만 토큰 팟캐스트에 gpt-4-turbo로 281분이 걸렸습니다.
- 평가가 LLM 판정 중심입니다. 정답이 없는 질문이라 LLM 맞대결과 주장 수 세기로 평가했고, 두 데이터셋(각 약 100만 토큰)에 한정됩니다. 저자들도 다른 분야로의 일반화, 환각(지어낸 내용) 비율 비교가 더 필요하다고 밝힙니다.
- 사실 하나를 찾는 질문에는 맞지 않습니다. 직접성은 벡터 RAG가 늘 앞섰습니다. 질문 유형에 따라 두 방식을 나눠 쓰는 것이 현실적입니다.
- 개체 맞추기가 단순합니다. 이 논문은 정확한 문자열 일치를 썼습니다. 같은 대상을 다르게 부르는 경우(약칭 · 오타)는 커뮤니티 단계에서 대체로 묶인다고 하지만, 완벽하지는 않습니다.
- 잘못된 전역 답의 위험: 큰 문서 모음에 대한 답이 원문을 정확히 대변하지 않으면 의사결정에 영향을 줄 수 있으므로, AI 사용과 오류 가능성을 분명히 알려야 한다고 논문이 강조합니다.
스스로 점검
- 벡터 RAG가 "이 데이터의 주요 주제는?"에 약한 근본 이유는?
질문과 비슷한 조각 몇 개만 가져오므로 전체의 작은 표본만 보게 됩니다. 이 질문은 검색이 아니라 전체를 요약해야 하는 질의 중심 요약 과제입니다.
- 맵 단계 부분 답의 점수가 (80, 0, 55, 20)이고 각 300토큰, 리듀스 한도가 700토큰이면 어떤 답이 쓰이나요?
0점은 버리고 80 → 55 순으로 600토큰을 넣으면, 다음 20점짜리는 900토큰이 되어 넘치므로 80 · 55 두 개가 쓰입니다.
- 루트 층(C0) 요약을 쓰는 장점과 단점은?
컨텍스트 토큰이 원문 직접 요약보다 97% 넘게 적어 매우 효율적이지만, 하위 층보다 포괄성 · 다양성이 약간 낮습니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 벡터 RAG | 질문과 임베딩이 가까운 조각을 가져와 답하는 일반 RAG |
| 전역 질문(global question) | 데이터 전체를 아울러야 답할 수 있는 질문 |
| 의미 파악(sensemaking) | 흩어진 정보의 연결을 종합해 전체 그림을 이해하는 일 |
| 질의 중심 요약(QFS) | 주어진 질문에 맞춰 문서를 요약하는 과제 |
| 지식 그래프 | 개체를 노드로, 관계를 간선으로 나타낸 그래프 |
| 커뮤니티(community) | 그래프에서 서로 촘촘히 연결된 노드 무리 |
| Leiden 알고리즘 | 그래프를 커뮤니티로 나누는 대표적 방법 |
| 차수(degree) | 한 노드에 연결된 간선 수 |
| 맵-리듀스(map-reduce) | 나눠서 각각 처리(맵)한 뒤 결과를 합치는(리듀스) 방식 |
| LLM-as-a-judge | LLM에게 두 답을 비교 · 판정하게 하는 평가 방법 |
이어서 읽을 것
다음에 볼 것
이 글을 이해했다면 이어서 보면 좋은 항목입니다.
- 중간에서 길을 잃다: 언어 모델의 긴 문맥 활용 — 긴 입력의 가운데 정보를 언어 모델이 잘 못 쓰는 U자 성능 곡선을 보인 분석 논문
출처
- 원문: arxiv.org/abs/2404.16130 (2024 · Darren Edge 외)
AI 원리부터 이해하기 · RAG·검색 모듈
RAG·검색 모듈 학습
이 글은 RAG·검색 모듈의 학습 자료입니다. 전체 21개 자료 중 19번째입니다.
출처·원문
원문 보기요약만