Tan Kim

hierarchical-retrieval

Hierarchical Retrieval

Hierarchical Retrieval은 문서 또는 검색 공간을 계층적으로 구성하고, 상위 계층에서 후보를 좁힌 뒤 하위 계층에서 정밀하게 검색하는 방식이다. 두 가지 의미로 사용된다. 첫째는 문서 구조 계층(요약 → 청크)을 활용하는 방식, 둘째는 retriever를 단계적으로 적용해 검색 공간을 점진적으로 좁히는 방식이다.

유형 1: 문서 계층 기반 검색

개념

문서를 요약(summary)과 청크(chunk) 두 계층으로 인덱싱한다. 쿼리와 유사한 요약을 먼저 찾아 관련 문서를 특정하고, 그 문서의 청크에서만 정밀 검색을 수행한다.

인덱스 구조:
  Summary Layer: [문서 A 요약, 문서 B 요약, 문서 C 요약 ...]
  Chunk Layer:   [A-chunk1, A-chunk2, B-chunk1, B-chunk2 ...]
                  └─── 문서 A와 연결됨 ────┘

검색 흐름

Query
  │
  ▼
[1단계] Summary 인덱스에서 관련 문서 식별 (top-k 문서)
  │
  ▼
[2단계] 해당 문서의 Chunk 인덱스에서 세밀한 패시지 검색
  │
  ▼
LLM 컨텍스트

장점

전체 청크 인덱스를 탐색하지 않아도 되므로 검색 공간이 크게 줄어든다. 특히 수백만 개 이상의 청크가 있는 대규모 코퍼스에서 효과적이다.

유형 2: Retriever 계층 기반 검색

개념

여러 retriever를 순차 적용해 후보 집합을 단계적으로 좁힌다. 앞 단계는 재현율(recall) 중심, 뒤 단계는 정밀도(precision) 중심으로 설계한다.

전체 코퍼스 (수백만 문서)
  │
  ▼ [1단계: BM25 / ANN] — 빠른 후보 생성 (top-1000)
  │
  ▼ [2단계: Dense Retriever] — 의미 기반 재정렬 (top-100)
  │
  ▼ [3단계: Cross-encoder Reranker] — 정밀 재순위 (top-10)
  │
  ▼
LLM 컨텍스트

각 단계는 이전 단계가 남긴 후보만 처리하므로, 비싼 모델을 전체 코퍼스에 적용하지 않아도 된다.

구현 예시 (문서 계층)

def hierarchical_retrieve(query: str, top_docs: int = 5, top_chunks: int = 10):
    # 1단계: 요약 계층에서 관련 문서 식별
    relevant_docs = summary_index.search(query, k=top_docs)
    doc_ids = [doc.id for doc in relevant_docs]
 
    # 2단계: 해당 문서의 청크만 검색
    chunk_filter = {"doc_id": {"$in": doc_ids}}
    relevant_chunks = chunk_index.search(query, k=top_chunks, filter=chunk_filter)
 
    return relevant_chunks

멀티홉 추론과의 결합

Hierarchical Retrieval은 멀티홉 쿼리(여러 문서를 거쳐야 답을 찾을 수 있는 질문)와 자연스럽게 결합된다. 1단계 검색 결과를 바탕으로 파생 쿼리를 생성하고, 파생 쿼리로 2단계를 실행하는 반복 패턴이다.

원래 쿼리: "A사의 CEO가 설립한 다른 회사의 본사 위치는?"
  │
  ▼ [1hop] "A사의 CEO는 누구인가?" → 검색 → 이름 추출
  │
  ▼ [2hop] "[이름]이 설립한 회사는?" → 검색 → 회사명 추출
  │
  ▼ [3hop] "[회사명]의 본사 위치는?" → 검색 → 최종 답변

장단점

항목 내용
장점 대규모 코퍼스에서 효율적, 정밀도와 재현율 균형
장점 멀티홉 추론 지원
단점 1단계에서 놓친 문서는 2단계에서 복구 불가 (recall이 상위 계층에 의존)
단점 파이프라인 복잡도 증가, 계층 간 인덱스 동기화 필요

관련 개념

  • Tiered Retrieval: 비용·속도 기준의 계층적 실행 (Hierarchical Retrieval은 검색 공간 구조의 계층화)
  • Agentic Evidence Gathering: LLM이 검색 계획을 동적으로 수립하는 방식
  • Reranker-centric: retriever 계층의 마지막 단계로 reranker를 배치하는 방식