본문 바로가기
C.W.K.
Stream
Lesson 04 of 10 · published

재순위화 — Top-K가 정답처럼 보일 때

~16 min · context, reranking, rag

Level 0수련생
0 XP0/100 lessons0/14 achievements
0/120 XP to next level120 XP to go0% complete

벡터가 가깝다고 질문에 알맞은 건 아니야

임베딩 검색은 보통 코사인 유사도로 결과의 순위를 매겨. 유사도와 관련성은 어느 정도 함께 움직이지만 같은 값은 아니야. 그래서 벡터 검색의 상위 K개에는 분위기와 어휘는 비슷해도 살짝 다른 질문에 답하는 청크가 자주 섞여. 재순위화 모델은 첫 검색 후보를 실제 질문과 하나씩 다시 비교해 이 오차를 줄여.

두 단계로 넓게 찾고 날카롭게 고르기

  1. 검색 — 싸고 넓게 찾는 단계야. 벡터 검색과 BM25를 섞어 상위 50개 정도를 모아.
  2. 재순위화 — 더 비싸지만 정밀해. 교차 인코더나 LLM으로 후보 50개가 질문에 얼마나 맞는지 다시 점수를 매겨.
  3. 꾸리기 — 새 순위에서 상위 N개 청크만 골라 답을 종합할 모델에 넣어.

추가 비용이 아깝지 않은 경우

  • 법률·의료·고객 지원처럼 정밀도보다 먼저 정답 청크를 후보 안에 놓는 재현율이 중요할 때.
  • 질문이 단일 낱말이나 덜 끝난 구절처럼 짧고 모호할 때.
  • 말만 조금씩 다른 거의 같은 문서가 많아 구별이 어려울 때.

생략해도 되는 경우

  • 지연 시간에 200밀리초조차 더할 수 없을 때.
  • 첫 검색만으로 상위 세 개가 이미 95% 정확할 때.
  • 비용이 가장 큰 제약이고 현재 정확도도 충분할 때.

Code

Cohere나 LLM 판정기로 재순위화·python
import cohere

cohere_client = cohere.Client()
results = cohere_client.rerank(
    query=user_query,
    documents=top_50_chunks,  # from vector search
    model="rerank-english-v3.0",
    top_n=5,
)

final_chunks = [r.document for r in results.results]

# Or LLM-as-judge alternative:
# Send the 50 chunks to an LLM with a scoring prompt and pick top 5.

External links

Exercise

RAG 흐름에 재순위화 단계를 더해봐. 정답 청크가 표시된 질문 모음에서 적용 전후의 상위 3개 정확도를 재고, 늘어난 재현율이 추가 지연 시간만큼 값어치 하는지 판단해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.