RAPTOR: 트리 구조로 요약해 검색하기
조각을 의미로 묶어 요약하기를 반복한 요약 트리에서 검색해 긴 문서 질문에 답하는 방법
먼저 알아야 할 것
다루는 내용
RAPTOR는 문서를 100토큰 조각으로 나눠 SBERT로 임베딩하고, UMAP과 가우시안 혼합 모델(BIC로 군집 수 선택)로 비슷한 조각을 소프트 군집한 뒤 gpt-3.5-turbo로 요약해 부모 노드를 만드는 일을 반복해 요약 트리를 쌓습니다. 검색은 모든 층 노드를 펼쳐 질문과 코사인이 높은 순으로 2,000토큰까지 넣어 큰 그림과 세부를 함께 가져옵니다. SBERT · BM25 · DPR 어디에 붙여도 성능이 올랐고, GPT-4와 함께 QuALITY 82.6으로 이전 최고(62.3)를 크게 넘었습니다.
초록
검색 증강 언어 모델은 세상의 변화에 더 잘 적응하고 긴 꼬리 지식을 담을 수 있습니다. 하지만 대부분의 기존 방법은 검색 말뭉치에서 짧고 연속된 조각만 검색해, 문서 전체 맥락에 대한 총체적 이해를 제한합니다. 우리는 텍스트 조각을 재귀적으로 임베딩하고, 군집화하고, 요약해 아래에서 위로 서로 다른 요약 수준을 가진 트리를 만드는 새로운 방법을 소개합니다. 추론 시점에 RAPTOR 모델은 이 트리에서 검색해, 긴 문서 전반의 정보를 서로 다른 추상화 수준에서 통합합니다. 통제된 실험에서 재귀적 요약을 활용한 검색은 여러 과제에서 기존 검색 증강 언어 모델보다 크게 향상됐습니다. 복잡한 다단계 추론이 필요한 질의응답 과제에서 최고 성능을 보였으며, 예를 들어 RAPTOR 검색을 GPT-4와 결합하면 QuALITY 벤치마크의 최고 성능을 절대 정확도로 20% 높일 수 있습니다.
해설
RAPTOR: 트리 구조로 요약해 검색하기
문서를 잘게 자른 조각들을 비슷한 것끼리 묶어 요약하고, 그 요약을 다시 묶어 요약하기 를 반복해 아래에서 위로 '요약 트리'를 만든 뒤, 질문에 맞는 수준의 노드를 골라 LLM에 넣는 검색 방법입니다. 긴 문서 전체를 이해해야 하는 질문에서 강했고, GPT-4와 함께 QuALITY의 최고 기록을 절대 정확도 20%p 끌어올렸습니다.
| 항목 | 내용 |
|---|---|
| 원제 | RAPTOR: Recursive Abstractive Processing for Tree-Organized Retrieval |
| 저자 | Parth Sarthi 외 5명 (스탠퍼드대) |
| 발표 | 2024 · ICLR 2024 · arXiv 2401.18059 |
| 트랙 · 수준 | RAG·검색 · 심화 |
| 먼저 알면 좋은 것 | 청크 단위 RAG, 문장 임베딩(SBERT) · 코사인 유사도, 군집화(가우시안 혼합 모델), 차원 축소, LLM 요약 |
들어가기 전에
이 해설은 아래 내용을 안다고 보고 씁니다. 처음이라면 먼저 읽고 오면 수식과 손계산을 훨씬 쉽게 따라올 수 있습니다.
- 검색 증강 생성 (RAG) — 검색기(DPR)와 생성기(BART)를 함께 미세조정해 문서를 보고 답을 생성하는 RAG의 원조 논문
- 검색의 기초: TF-IDF · BM25 · 벡터 검색 · 검색 평가 지표 — 역색인 · TF-IDF · BM25 · 벡터 검색 · P@k · MRR · nDCG를 손계산하는 RAG 검색 기초
한눈에 보기
- 짧은 조각만 꺼내 오는 일반 RAG가 '전체 줄거리 · 주제' 같은 질문에 왜 약한지 알게 됩니다.
- 임베딩 → 군집 → 요약 → 다시 임베딩 을 반복해 트리를 만드는 과정을 단계별로 따라갑니다.
- 한 조각이 여러 군집에 속할 수 있는 소프트 군집(GMM) 과 군집 수를 고르는 BIC 를 손계산으로 이해합니다.
- 트리에서 검색하는 두 방식(층별 탐색 · 펼친 트리)의 차이와, 왜 '펼친 트리'가 더 나았는지 압니다.
초록 (번역)
검색 증강 언어 모델은 세상의 변화에 더 잘 적응하고 긴 꼬리 지식을 담을 수 있습니다. 하지만 대부분의 기존 방법은 검색 말뭉치에서 짧고 연속된 조각만 검색해, 문서 전체 맥락에 대한 총체적 이해를 제한합니다. 우리는 텍스트 조각을 재귀적으로 임베딩하고, 군집화하고, 요약해 아래에서 위로 서로 다른 요약 수준을 가진 트리를 만드는 새로운 방법을 소개합니다. 추론 시점에 RAPTOR 모델은 이 트리에서 검색해, 긴 문서 전반의 정보를 서로 다른 추상화 수준에서 통합합니다. 통제된 실험에서 재귀적 요약을 활용한 검색은 여러 과제에서 기존 검색 증강 언어 모델보다 크게 향상됐습니다. 복잡한 다단계 추론이 필요한 질의응답 과제에서 최고 성능을 보였으며, 예를 들어 RAPTOR 검색을 GPT-4와 결합하면 QuALITY 벤치마크의 최고 성능을 절대 정확도로 20% 높일 수 있습니다.
무엇을 풀었나
일반적인 RAG는 문서를 짧은 조각(청크)으로 나누고, 질문과 가장 비슷한 조각 몇 개만 가져옵니다. 사실 하나를 묻는 질문에는 잘 맞지만, 다음과 같은 질문에는 약합니다.
- "이 이야기의 중심 주제는 무엇인가?"
- "신데렐라는 어떻게 행복한 결말에 이르렀나?"
이런 답은 어느 한 조각에 있지 않고 문서 여러 곳에 흩어진 정보를 종합 해야 나옵니다. 논문은 연속된 구간으로 자르는 방식이 글의 의미 깊이를 다 담지 못하고, 기술 · 과학 문서에서 떼어 낸 조각은 중요한 맥락이 빠져 읽기 어렵거나 오해를 부를 수 있다고 지적합니다.
"그냥 긴 문맥에 다 넣으면 되지 않나?"라는 물음에도 논문은 답합니다. 모델은 긴 문맥을 충분히 활용하지 못하고(관련 정보가 긴 문맥 속에 묻히면 성능이 떨어짐), 긴 문맥은 비싸고 느립니다. 그래서 여전히 관련 정보를 골라 넣는 일 이 중요합니다.
이전에도 인접한 조각을 차례로 요약해 올리는 재귀 요약(책 요약 연구, LlamaIndex 등)이 있었지만, 이웃한 조각끼리만 묶어 서로 멀리 떨어진 관련 내용을 놓칠 수 있었습니다. RAPTOR는 위치가 아니라 의미의 유사도 로 묶습니다.
핵심 아이디어
flowchart TD
D[긴 문서] --> C[100토큰 조각으로 나눔 · 문장은 자르지 않음]
C --> E1[SBERT 임베딩 = 잎 노드]
E1 --> U[UMAP 차원 축소]
U --> G[GMM 소프트 군집 · BIC로 군집 수 선택]
G --> S[군집마다 gpt-3.5-turbo로 요약 = 부모 노드]
S --> E2[요약을 다시 임베딩]
E2 -->|더 묶을 수 없을 때까지 반복| U
E2 --> T[(요약 트리)]
Q[질문] --> R[펼친 트리에서 코사인 상위 노드를 2,000토큰까지]
T --> R
R --> L[LLM이 답 생성]1. 트리 만들기: 임베딩 → 군집 → 요약의 반복
직관. 회의록 100장을 정리한다고 합시다. 먼저 비슷한 주제의 페이지끼리 묶어 묶음마다 한 쪽 요약을 쓰고, 그 요약들을 다시 비슷한 것끼리 묶어 더 큰 요약을 씁니다. 맨 위에는 '전체 회의의 큰 줄기'가, 맨 아래에는 '원래 페이지'가 남습니다. 질문에 따라 위층 요약을 볼지, 아래층 원문을 볼지 고르면 됩니다.
단계별 설명.
- 조각 내기: 문서를 약 100토큰 길이의 연속된 조각으로 나눕니다. 문장이 100토큰 경계에 걸리면 문장을 자르지 않고 통째로 다음 조각으로 넘깁니다.
- 잎 노드: 각 조각을 SBERT(multi-qa-mpnet-base-cos-v1)로 임베딩합니다. 조각과 그 임베딩이 트리의 잎(leaf) 노드입니다.
- 군집: 비슷한 노드끼리 묶습니다(아래 2절).
- 요약: 군집마다 속한 노드의 글을 gpt-3.5-turbo로 요약합니다. 이 요약이 부모 노드가 됩니다.
- 반복: 요약을 다시 임베딩하고 3~4를 반복합니다. 더 이상 군집이 의미 없을 때 멈춥니다.
숫자로 해 보기 (설명용 예시). 조각 8개 이 있다고 합시다.
- 1층 군집: , , → 요약 노드
- 2층 군집: , → 요약 노드
- 트리 전체 노드는 개입니다.
처럼 문서 뒤쪽에 있는 조각도 내용이 비슷하면 앞쪽 와 같은 군집에 들어갈 수 있다는 점이, '이웃끼리만 묶는' 방식과 다른 점입니다.
압축 정도 (논문 부록). 요약 길이는 자식 노드 길이 합의 평균 0.28배로, 약 72% 압축이었습니다. 요약은 평균 131토큰, 자식 노드는 평균 86토큰이었습니다.
비용. 논문은 트리 구축 시간과 토큰 사용량이 문서 크기에 대해 선형 으로 늘어난다고 밝힙니다.
2. 군집: UMAP + 가우시안 혼합 모델(GMM) + BIC
직관. 학생들을 동아리로 나눌 때, 한 학생이 '축구부'와 '밴드부'에 동시에 들어갈 수 있게 허락하는 방식입니다. 글 조각 하나도 여러 주제에 걸쳐 있을 수 있으니까요.
단계별 설명.
- 차원 축소: 임베딩은 차원이 높아 거리 계산이 잘 맞지 않으므로, UMAP으로 차원을 줄입니다. UMAP의 이웃 수(n_neighbors)를 바꿔 가며 먼저 전역 군집, 그 안에서 지역 군집 을 찾는 2단계로 묶습니다.
- 소프트 군집: 가우시안 혼합 모델(GMM)은 각 노드가 각 군집에 속할 '확률'을 줍니다. 그래서 한 노드가 여러 군집에 들어갈 수 있습니다.
- 군집 수 정하기: 군집 수를 바꿔 가며 BIC가 가장 작은 것을 고르고, EM 알고리즘으로 GMM의 평균 · 공분산 · 혼합 비율을 추정합니다.
- 크기 제한: 한 군집의 글을 합친 길이가 요약 모델의 토큰 한도를 넘으면, 그 군집 안에서 다시 군집을 나눕니다.
수식. GMM은 차원 벡터 의 확률을 가우시안 개의 혼합으로 봅니다.
군집 수는 다음 BIC가 가장 작은 로 고릅니다.
| 기호 | 뜻 |
|---|---|
| 번째 군집의 혼합 비율(합이 1) | |
| 평균 , 공분산 인 가우시안 분포에서 의 확률 밀도 | |
| 텍스트 조각(데이터 점) 수 | |
| (BIC 식) | 모델 파라미터 수. 군집이 늘수록 커짐 |
| 모델이 데이터를 설명하는 최대 가능도 |
숫자로 해 보기 (설명용 예시, 논문 수치 아님). 조각 개, 이라 합시다.
- 군집 2개: 파라미터 20개, →
- 군집 4개: 파라미터 40개, →
- 군집 8개: 파라미터 80개, →
군집 4개가 가장 작으므로 고릅니다. 군집을 늘리면 데이터를 더 잘 설명하지만(가능도 증가), 파라미터 벌점이 더 빨리 커집니다. BIC는 이 둘의 균형점을 찾습니다.
왜 GMM인가. 논문은 텍스트 데이터가 가우시안 가정에 딱 맞지는 않지만 실험적으로 효과적이었다고 밝힙니다. 부록 절제 실험에서 같은 SBERT · UnifiedQA 조건으로 GMM 군집 트리는 QuALITY 정확도 56.6%, 이웃한 조각을 차례로 묶은 트리는 55.8%였습니다.
3. 트리에서 검색하기: 층별 탐색 vs 펼친 트리
직관. 책을 찾을 때 ① 대분류 → 중분류 → 소분류 순서로 서가를 내려가는 방법과 ② 모든 분류 카드를 한 상자에 쏟아 놓고 질문과 가장 맞는 카드를 뽑는 방법이 있습니다.
층별 탐색(tree traversal).
- 맨 위층 노드 중 질문과 코사인 유사도가 높은 상위 개를 고릅니다.
- 고른 노드의 자식들 중에서 다시 상위 개를 고릅니다.
- 잎까지 층을 반복하고, 고른 노드의 글을 모두 이어 붙입니다.
펼친 트리(collapsed tree).
- 트리의 모든 층 노드를 한 층으로 펼칩니다.
- 질문과 모든 노드의 코사인 유사도를 계산합니다.
- 유사도 순서대로 노드를 추가하다가, 정해 둔 최대 토큰 수에 닿으면 멈춥니다.
수식 (코사인 유사도).
| 기호 | 뜻 |
|---|---|
| 질문 임베딩 | |
| 노드(원문 조각 또는 요약) 임베딩 |
숫자로 해 보기 (설명용). 펼친 트리에서 노드별 (유사도, 길이)가 위 요약 (0.82, 130토큰), 원문 (0.79, 100토큰), 요약 (0.75, 130토큰), 원문 (0.60, 100토큰)이고 한도가 300토큰이라면, 토큰까지 넣고 을 더하면 360토큰이 넘으므로 멈춥니다. 한 질문 안에서 요약(큰 그림)과 원문(세부)이 자연스럽게 섞입니다.
왜 펼친 트리를 골랐나. QASPER 20개 문서로 비교했더니 펼친 트리가 일관되게 나았고, 2,000토큰 한도가 가장 좋아 본 실험에 썼습니다. 층별 탐색은 와 가 정해지면 층별로 가져오는 노드 비율이 질문과 상관없이 고정되지만, 펼친 트리는 질문마다 알맞은 세밀도 의 노드를 고를 수 있기 때문이라고 설명합니다. 대신 모든 노드와 유사도를 계산해야 하는데, FAISS 같은 최근접 이웃 라이브러리로 효율을 높일 수 있습니다.
결과
같은 검색기에 트리를 붙였을 때 (리더: UnifiedQA-3B)
| 검색기 | QuALITY 정확도 (트리 없음 → 있음) | QASPER F1 (없음 → 있음) | NarrativeQA ROUGE-L (없음 → 있음) |
|---|---|---|---|
| SBERT | 54.9 → 56.6 | 36.23 → 36.70 | 29.26 → 30.87 |
| BM25 | 49.9 → 52.1 | 26.47 → 27.00 | 23.52 → 27.93 |
| DPR | 53.1 → 54.7 | 31.70 → 32.23 | 29.56 → 30.94 |
- 어떤 검색기에 붙여도 모든 데이터셋에서 성능이 올랐습니다.
여러 LLM과 함께 (QASPER F1)
| 검색 | GPT-3 | GPT-4 | UnifiedQA |
|---|---|---|---|
| BM25 | 46.6 | 50.2 | 26.4 |
| DPR | 51.3 | 53.0 | 32.1 |
| RAPTOR | 53.1 | 55.7 | 36.6 |
- QuALITY 정확도도 GPT-3 기준 RAPTOR 62.4 (DPR 60.4, BM25 57.3), UnifiedQA 기준 56.6 (DPR 53.9, BM25 49.9)였습니다.
최고 기록 비교
- QuALITY: RAPTOR + GPT-4가 전체 82.6, 어려운 부분집합 76.2로, 이전 최고 CoLISA(62.3 / 54.7)를 크게 넘었습니다.
- QASPER: RAPTOR + GPT-4가 F1 55.7로 CoLT5 XL(53.9)을 넘었습니다.
- NarrativeQA: RAPTOR + UnifiedQA가 METEOR 19.1로 최고였습니다.
어느 층이 쓰였나. 부록 분석에서 최종 검색 결과의 상당 부분이 잎이 아닌 요약 노드에서 왔습니다. 요약 노드가 실제로 답에 기여한다는 뜻입니다.
요약의 환각: 주석 연구에서 요약의 약 4%에 사소한 환각이 있었지만, 부모 노드로 퍼지지 않았고 질의응답 성능에 눈에 띄는 영향은 없었습니다.
왜 중요한가 · 이후 영향
- '여러 추상화 수준의 색인'이라는 아이디어를 정착시켰습니다. 원문 조각만이 아니라 요약 노드도 함께 색인해, 질문 성격에 따라 큰 그림과 세부를 함께 가져오는 방식은 이후 계층형 · 요약형 RAG 설계에 널리 참고됩니다.
- 검색기와 독립적입니다. SBERT · BM25 · DPR 어디에 붙여도 이득이었으므로, 기존 RAG 파이프라인에 '색인 단계'만 바꿔 넣을 수 있습니다.
- GraphRAG와 같은 문제의식 을 공유합니다. 둘 다 "문서 전체를 아우르는 질문"을 다루지만, RAPTOR는 임베딩 군집 + 요약 트리, GraphRAG는 개체 그래프 + 커뮤니티 요약이라는 다른 길을 택했습니다.
한계 · 주의할 점
- 색인 비용: 모든 군집을 LLM으로 요약해야 하므로, 단순 임베딩 색인보다 비용이 큽니다(선형이긴 하지만 LLM 호출이 필요).
- 문서가 바뀌면 트리를 다시 만들어야 할 수 있습니다. 자주 바뀌는 문서 모음에는 갱신 전략이 필요합니다.
- 요약의 환각 위험: 약 4%의 요약에 사소한 환각이 있었습니다. 영향은 작았다고 하지만, 높은 정확성이 필요한 분야에서는 원문 노드를 함께 확인하는 것이 안전합니다.
- 평가 범위: 이야기 · 논문 · 중간 길이 지문(QuALITY) 위주의 질의응답에서 평가했습니다. 사실 하나만 묻는 짧은 질문에서는 이득이 작을 수 있습니다(SBERT 기준 QASPER 향상은 0.47점).
스스로 점검
- RAPTOR가 '이웃한 조각끼리 요약'하는 방식과 다른 핵심은?
위치가 아니라 임베딩 유사도로 군집을 만들어, 문서 곳곳에 흩어진 관련 내용을 한 요약에 모을 수 있다는 점입니다. 또 소프트 군집이라 한 조각이 여러 요약에 들어갈 수 있습니다.
- BIC에서 군집 수를 늘리면 무엇이 좋아지고 무엇이 나빠지나요?
데이터를 더 잘 설명해 가능도 항()은 작아지지만, 파라미터 수에 비례하는 벌점()이 커집니다. 둘의 합이 가장 작은 군집 수를 고릅니다.
- 펼친 트리 검색이 층별 탐색보다 나았던 이유는?
모든 층의 노드를 한꺼번에 비교해, 질문마다 필요한 세밀도(요약 vs 원문)를 알맞게 섞어 가져올 수 있기 때문입니다. 층별 탐색은 층마다 가져오는 비율이 고정됩니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 청크(chunk) | 문서를 일정 길이로 자른 조각 |
| 잎 노드(leaf node) | 트리 맨 아래의 원문 조각 노드 |
| 재귀적 요약(recursive summarization) | 요약을 다시 묶어 요약하기를 반복하는 것 |
| 소프트 군집(soft clustering) | 한 항목이 여러 군집에 확률적으로 속할 수 있는 군집화 |
| 가우시안 혼합 모델(GMM) | 데이터가 여러 가우시안 분포의 섞임에서 나왔다고 보는 확률 모델 |
| UMAP | 고차원 데이터를 구조를 보존하며 낮은 차원으로 줄이는 방법 |
| BIC | 모델의 설명력과 복잡도를 함께 따져 모델(군집 수)을 고르는 기준 |
| EM 알고리즘 | 숨은 군집 배정과 분포 파라미터를 번갈아 추정하는 방법 |
| 층별 탐색(tree traversal) | 위층부터 아래층으로 내려가며 노드를 고르는 검색 |
| 펼친 트리(collapsed tree) | 모든 층 노드를 한데 모아 유사도 순으로 고르는 검색 |
이어서 읽을 것
다음에 볼 것
이 글을 이해했다면 이어서 보면 좋은 항목입니다.
- 지역에서 전역으로: 그래프 RAG (GraphRAG) — 개체 그래프의 커뮤니티 요약과 맵-리듀스로 데이터 전체를 아우르는 질문에 답하는 RAG
출처
- 원문: arxiv.org/abs/2401.18059 (2024 · Parth Sarthi 외)
AI 원리부터 이해하기 · RAG·검색 모듈
RAG·검색 모듈 학습
이 글은 RAG·검색 모듈의 학습 자료입니다. 전체 21개 자료 중 18번째입니다.
출처·원문
원문 보기요약만