Anthropic Contextual Retrieval
Anthropic는 Contextual Retrieval을 도입했는데, 이는 맥락 임베딩과 BM25를 결합할 때 검색 실패율을 49% 감소시키고, 추가로 재정렬(reranking)을 통합할 경우 67% 감소시킵니다. 이 방법은 기존 RAG(검색 증강 생성) 청크가 정확히 검색되거나 AI 모델에 활용될 수 있도록 필요한 배경 정보를 잃는 '맥락의 역설' 문제를 해결합니다.
기존 RAG에서의 맥락의 역설
기존 RAG 시스템은 효율성을 유지하기 위해 문서를 작은 청크(보통 수백 토큰)로 나눕니다. 그러나 이 과정은 중요한 맥락을 파괴하기 쉽습니다. 예를 들어, "회사의 수익이 3% 증가했다"는 청크는 어떤 회사나 어느 시기의 정보인지 알 수 없다면, 사용자가 특정 실체에 대해 구체적인 질문을 할 때 검색 실패를 초래합니다.
Contextual Retrieval의 작동 방식
Contextual Retrieval은 각 청크를 임베딩하거나 인덱싱하기 전에 짧고 간결한 설명적 맥락(보통 50~100 토큰)을 청크 앞에 추가함으로써 맥락 손실 문제를 해결합니다.
Claude를 통한 구현
수동 주석을 피하기 위해 Anthropic는 Claude 3 Haiku를 사용하여 이 맥락을 자동으로 생성합니다. 모델은 전체 문서와 특정 청크를 제공받고, 검색 및 검색 결과 추출 목적에 맞게 청크를 전체 문서 내에서 위치 지정할 수 있는 간결한 맥락을 생성하도록 유도합니다.
전처리 파이프라인
- 맥락 생성: Claude는 전체 문서를 기반으로 각 청크에 대해 간결한 맥락을 생성합니다.
- 맥락 임베딩: 맥락화된 청크를 벡터 임베딩으로 변환합니다.
- 맥락 BM25: 맥락화된 청크를 BM25(최적 매칭 25)를 사용하여 인덱싱합니다.
- 하이브리드 검색: 시스템은 의미적 임베딩과 BM25의 결과를 순위 융합(rank fusion)을 통해 결합하여 가장 관련성이 높은 청크를 찾습니다.
성능 벤치마크
Anthropic는 코드베이스, 소설, 과학 논문 등 다양한 분야에서 이 방법을 테스트했습니다. 1 - recall@20을 지표로 사용(관련 문서 중 검색되지 않은 비율 측정)했을 때 다음과 같은 개선 효과를 확인했습니다:
- 맥락 임베딩: 상위 20개 청크 검색 실패율을 35% 감소시켰습니다(5.7% → 3.7%).
- 맥락 임베딩 + 맥락 BM25: 실패율을 49% 감소시켰습니다(5.7% → 2.9%).
- Contextual Retrieval + 재정렬: 위 두 기법에 Cohere 재정렬 모델을 추가로 적용하여 실패율을 67% 감소시켰습니다(5.7% → 1.9%).
비용 및 지연 시간 최적화
프롬프트 캐싱
모든 청크에 대해 맥락을 생성하는 것은 비용이 클 수 있습니다. Anthropic는 프롬프트 캐싱을 활용해 이러한 비용을 줄입니다. 참조 문서를 한 번만 캐시하고, 모든 청크에 대해 이를 참조함으로써 맥락화된 청크를 생성하는 일회성 비용은 약 100만 토큰당 $1.02입니다(800 토큰 청크, 8,000 토큰 문서 기준).
재정렬의 트레이드오프
재정렬은 정확도를 크게 향상시키지만, 런타임 단계를 추가해 지연 시간과 비용을 증가시킵니다. 개발자는 재정렬할 청크 수(예: 150개를 검색하고 20개로 재정렬)를 응답 속도 요구 사항과 균형을 맞춰야 합니다.
주요 구현 권고사항
심층 테스트를 바탕으로 Anthropic는 RAG 성능을 극대화하기 위한 다음과 같은 지침을 제시합니다:
- 하이브리드 검색 사용: 임베딩만 사용하는 것보다 임베딩과 BM25를 결합하는 것이 우수합니다.
- 고성능 임베딩 선택: Gemini와 Voyage 임베딩이 특히 효과적임이 확인되었습니다.
- 청크 수 최적화: 모델에 상위 20개 청크를 전달하는 것이 5개나 10개를 전달하는 것보다 일반적으로 더 나은 성능을 보였습니다.
- 기술 통합: 맥락 임베딩, 맥락 BM25, 재정렬 단계를 모두 결합할 때 최고의 성능을 달성합니다.
Sources
관련
- Dispatch
- Dispatch
- 프로젝트
- Dispatch
- Dispatch