Contextual Retrieval을 통한 Vector DB 정확도 16% 향상
본 글은 Contextual Retrieval을 통해 Vector DB의 정확도를 16% 올린 내용에 대한 글입니다.
측정 방법
해당 DB의 내용을 기반으로 질문지를 약 200개 만들고, 같은 방법으로 조건을 구성한 후 Contextual Retrieval을 적용하지 않은 DB와 Contextual Retrieval을 적용한 DB에 각각 질문을 던졌습니다. 이후 적절한 응답을 받을 수 있는지를 측정했습니다.
저는 Vector DB 관리자도 겸하고 있습니다. 데이터를 정제하고 가공하여 Vector DB 성능을 강화합니다. Chunking 전략, 토큰 수를 변화시키면서 성능을 고도화하는 과정에서 Contextual Retrieval의 효과가 눈에 띄었습니다.
1. Contextual Retrieval이란?
단순히 문서를 잘라서 임베딩하는 기존 방식 대신, **문맥 정보(인덱스·요약)**를 함께 저장하여 검색 시 더 적절한 결과를 반환하는 Retrieval 기법입니다.
즉, 단순 벡터 유사도 비교가 아닌 문맥 기반 검색 정확도를 높이는 방법입니다.
자세한 내용은 아래 글을 참고하세요:
https://www.anthropic.com/news/contextual-retrieval
2. 기존 방식의 한계
고전적인 방식은 문서를 잘게 잘라서(chunking) DB에 원문과 embedding 값을 넣습니다. 쿼리할 때는 입력값을 임베딩하고, 본문의 chunks 값과 임베딩 비교를 합니다. 그러나 이 경우 정확도가 떨어지는 문제가 발생합니다.
예시: 신문 기사
신문을 생각해봅시다. 기사 제목: “미국”
질문: “미국 신시내티의 날씨는 어때?”
# chunk 1
(미국의 정치 내용 10페이지 중 1번 문단)
# chunk 2
(미국의 가수 내용 15페이지 중 n번 문단)
# chunk 3
(미국의 경제 내용 12페이지 중 n번 문단)
# chunk 4
(미국의 날씨 내용 14페이지 중 x번 문단)
(이하 생략)
우선 (미국의 날씨 내용 14페이지 중 x번 문단)을 불러온다면 절반은 성공입니다. 하지만 x번 문단의 내용을 보고, 이 내용이 “미국의 날씨”인지 단순 임베딩 비교로 알 수 있을까요? (사실 당연한 발상이지만…)
3. Contextual Retrieval 방식
그래서 문서를 자를 때 앞단에 전체적인 내용의 인덱스를 추가하고, 아래쪽에 요약본을 넣습니다.
# chunk 4-1
미국의 날씨를 주별로 설명하고 있습니다. 이 부분은 LA의 날씨를 설명합니다.
(미국의 날씨 내용 14페이지 중 x-1번 문단)의 요약본
# chunk 4-2
미국의 날씨를 주별로 설명하고 있습니다. 이 부분은 신시내티의 날씨를 설명합니다.
(미국의 날씨 내용 14페이지 중 x번 문단)의 요약본
즉, 원본의 내용을 임베딩하지 않고 인덱스와 요약본만 임베딩합니다. 원본은 다른 컬럼(예: metadata)에 넣어두고, 검색 시 원본도 함께 가져올 수 있도록 합니다.
예를 들어, 임베딩 차원이 1024라고 하더라도 내용이 지나치게 길면 중심성이 사라집니다. 따라서 인덱스+요약본 구조가 훨씬 효율적입니다.
(혹시 다른 데이터 엔지니어링을 하실 분 계시다면, 꼭 직접 DB를 열어보고 설계해보시길 추천드립니다. ㅠㅠ)
'데이터 엔지니어링 > AI' 카테고리의 다른 글
| 대량의 PDF 문서, 어떻게 vector DB에 적재할까? (0) | 2025.08.24 |
|---|---|
| [AI-Vector DB]DB가 다르면 결과가 다르게 나온다고? 직접 해보자 (4) | 2025.08.13 |
| 호옥시... tmux 아세요? 옛날에 tmux로 여러 ai model 훈련시킨... (1) | 2025.08.11 |
| 예전에는 이렇게 ai를 했었다. (1) | 2025.08.11 |
