Anthropic 컨텍스트 기반 검색 기법이 RAG 정확도 향상

TL;DR

Anthropic는 각 문서 청크에 짧고 구체적인 컨텍스트를 사전에 추가한 후 임베딩과 BM25 인덱스를 생성하는 컨텍스트 기반 검색(Contextual Retrieval) 기법을 도입했습니다. 이 방법은 컨텍스트 임베딩만으로도 상위 20개 청크 검색 실패율을 49% 감소시키고, 재정렬 기법과 결합하면 67% 감소시켰습니다. 이 기법은 Claude와 공개된 쿡북을 통해 오늘날 바로 배포 가능하며, 대규모 지식 기반에 대한 검색 증강 생성(RAG)을 비용 효율적으로 개선할 수 있는 방법을 제공합니다.


기존 RAG가 컨텍스트를 잃는 이유

기존 RAG는 코퍼스를 작은 청크로 나누고, 각 청크를 임베딩한 후 벡터 데이터베이스에서 의미적 유사도를 검색합니다. 이 접근 방식은 종종 주변 문서의 컨텍스트를 버리게 되어, 핵심 식별자(예: 회사명 없이 수익 성장 문장)가 없는 모호한 청크를 생성합니다. 컨텍스트의 손실은 관련성 없거나 불완전한 정보를 검색하게 만들며, 후속 모델의 성능을 저하시킵니다.


핵심 아이디어: 컨텍스트 기반 검색

컨텍스트 기반 검색은 각 청크를 임베딩하기 전과 BM25 인덱스를 생성하기 전에 설명성 메타데이터를 청크 앞에 추가함으로써 컨텍스트 손실 문제를 해결합니다. 추가된 메타데이터("컨텍스트화된 청크")는 청크의 출처(문서 제목, 섹션, 날짜 등)를 설명하지만, 짧게 유지(약 50~100 토큰)합니다.

예시 변환

original_chunk = "The company's revenue grew by 3% over the previous quarter."

contextualized_chunk = "This chunk is from an SEC filing on ACME Corp's performance in Q2 2023; the previous quarter's revenue was $314 million. The company's revenue grew by 3% over the previous quarter."

컨텍스트화된 청크는 이후 임베딩(컨텍스트 임베딩)되며, BM25(컨텍스트 BM25)로 인덱싱됩니다.


구현 파이프라인

  1. 코퍼스 청크화 – 문서를 최대 수백 토큰 크기의 조각으로 나눕니다.
  2. 컨텍스트 메타데이터 생성 – 전체 문서와 대상 청크를 입력으로 받아 간결한 컨텍스트 문자열을 반환하는 Claude 3 Haiku를 사용합니다.
  3. 컨텍스트 추가 – 생성된 메타데이터를 원본 청크 앞에 붙입니다.
  4. 임베딩 생성 – 컨텍스트화된 청크를 임베딩 모델(예: Gemini Text-004, Voyage)에 입력합니다.
  5. BM25 인덱스 구축 – 동일한 컨텍스트화된 텍스트를 TF-IDF 기반 BM25로 인덱싱합니다.
  6. 런타임 검색 – 벡터 저장소와 BM25를 쿼리하고 결과를 융합, 중복 제거한 후 상위-K 청크(일반적으로 20개)를 생성 모델에 전달합니다.
  7. 옵션: 재정렬 – 초기 상위-N(약 150개) 청크에 재정렬기(예: Cohere)를 적용한 후, 최종 프롬프팅을 위해 상위-K를 유지합니다.

단계 2~5의 시각적 개요는 Anthropic의 블로그 이미지에 제공됩니다.


정량적 영향

Anthropic는 코드, 소설, ArXiv, 과학 논문 등 다양한 도메인과 임베딩 제공업체에서 컨텍스트 기반 검색을 평가했습니다. 주요 지표는 1 – recall@20(상위 20개에서 누락된 관련 청크 비율)입니다. 결과는 다음과 같습니다:

구성 실패율 (1 – recall@20) 상대적 개선
베이스라인 임베딩만 5.7 %
+ 컨텍스트 임베딩 3.7 % 35% 감소
+ 컨텍스트 임베딩 + 컨텍스트 BM25 2.9 % 49% 감소
+ 재정렬(Cohere) 상위 150 → 상위 20 1.9 % 67% 감소

모든 테스트된 임베딩 모델이 개선되었으며, Gemini와 Voyage가 가장 큰 절대적 성능 향상을 보였습니다.


Claude 프롬프트 캐싱을 통한 비용 효율적 배포

Claude의 프롬프트 캐싱 기능을 통해 개발자는 전체 문서를 한 번만 캐시에 로드하고, 각 청크의 컨텍스트화 단계에서 재사용할 수 있습니다. 800토큰 청크, 8k토큰 문서, 50토큰 컨텍스트 생성 프롬프트, 청크당 약 100토큰 컨텍스트를 가정할 때, 일회성 비용은 100만 토큰당 $1.02입니다. 이는 대규모 컨텍스트화를 경제적으로 가능하게 합니다.


실용적 고려사항

  • 청크 경계 – 논리적 단위를 유지하는 크기, 겹침, 분할 지점을 선택하세요. 너무 작은 청크는 컨텍스트를 희석시키고, 너무 큰 청크는 지연을 증가시킵니다.
  • 임베딩 모델 선택 – 컨텍스트 기반 검색은 모든 모델에 개선 효과를 줍니다. 하지만 Anthropic의 테스트에서 Gemini Text-004와 Voyage 임베딩이 가장 뛰어난 절대 성능을 보였습니다.
  • 사용자 정의 프롬프트 – 도메인 특화 용어집 등을 추가한 Claude 프롬프트를 맞춤화하면 컨텍스트 관련성은 더욱 향상될 수 있습니다.
  • 검색된 청크 수 – 실험 결과 상위 20개 청크가 관련성과 모델 오버로드 사이의 좋은 균형을 이룹니다. 개발자는 자신의 사용 사례에 맞게 이 수치를 검증해야 합니다.
  • 재정렬의 트레이드오프 – 재정렬기 추가는 정확도를 높이지만 지연과 비용을 증가시킵니다. 병렬 평가로 지연을 완화할 수 있지만, 최적의 재정렬 대상 상위-N은 예산과 응답 시간 요구 사항에 따라 달라집니다.

간단한 더 긴 프롬프트로 충분한 경우

지식 기반의 크기가 20만 토큰 미만 (약 500페이지)인 경우, Anthropic는 전체 코퍼스를 프롬프트에 직접 임베딩하는 것을 권장합니다. Claude의 프롬프트 캐싱 기능을 활용하면 지연을 낮추고 비용을 절감할 수 있으며, 성능은 2배 이상 향상되고, 비용은 최대 90%까지 감소됩니다. 코퍼스 크기가 이 범위를 초과하면 컨텍스트 기반 검색이 유의미한 가치를 갖습니다.


시작 방법

Anthropic는 청크화 및 컨텍스트 메타데이터 생성에서 임베딩, BM25 인덱싱, 옵션 재정렬에 이르기까지 전체 워크플로를 자동화하는 단계별 쿡북(cookbook)을 제공합니다. 쿡북은 다음에서 이용 가능합니다:

https://platform.claude.com/cookbook/capabilities-contextual-embeddings-guide


핵심 메시지

평가된 모든 기법—임베딩 + BM25, 컨텍스트 기반 검색, 재정렬—는 누적적으로 효과를 발휘합니다. 전체 스택(컨텍스트 임베딩, 컨텍스트 BM25, 재정렬, 상위 20개 청크 선택)을 배포하면 검색 실패율이 가장 크게 감소하며, 결과적으로 가장 신뢰할 수 있는 RAG 기반 애플리케이션이 가능해집니다.


감사의 말

연구 및 글쓰기는 Daniel Ford가 담당했으며, Orowa Sikder, Gautam Mittal, Kenneth Lien의 중요한 피드백을 받았습니다. 구현 지원은 Samuel Flamini가 제공했고, 프로젝트 조율은 Lauren Polansky가 담당했으며, 편집적 구성은 Alex Albert, Susan Payne, Stuart Ritchie, Brad Abrams가 맡았습니다.

Sources

관련