Reranking: CC와 RRF & Pre/Post-Retrieval

wldbs._.·2025년 8월 7일

RAG

목록 보기
15/22
post-thumbnail

리랭킹이라는 단어가 자주 보인다.
이에 대해서 알아보자.
CC(Convex Combination)과 RRF(Reciprocal Rank Fusion)을 정리한다.

그리고 검색 이전(Pre) 단계와 후(Post) 단계를 나누어 알아보자.


🔁 Convex Combination

📌 개념

: 여러 개의 스코어(예: dense similarity, sparse similarity 등)를 가중 평균하여 결합

✅ 수식

: final_score=α⋅s1+(1−α)⋅s2\text{final\_score} = \alpha \cdot s_1 + (1 - \alpha) \cdot s_2

  • s1s_1: dense search similarity score (예: cosine similarity)
  • s2s_2: sparse search score (예: BM25)
  • α\alpha: 0과 1 사이의 가중치 (보통 0.5~0.8 사이 튜닝)

🧠 특징

  • 같은 scale의 점수를 전제로 한다
  • 모델이 출력하는 score가 직접 결합되어 최종 점수로 사용된다
  • 점수가 비교적 정규화되어 있을 때 적합하다

🔁 Reciprocal Rank Fusion

좀 더 나은 RRF 만들기 - SRRF

📌 개념

: 두 개 이상의 랭킹 리스트를 받아, 각 문서의 순위를 기반으로 역순위 점수를 계산하여 결합

✅ 수식

: RRF(d)=∑i=1n1k+ranki(d)\text{RRF}(d) = \sum_{i=1}^{n} \frac{1}{k + \text{rank}_i(d)}

  • ranki(d)\text{rank}_i(d): 문서 dd의 i번째 모델에서의 순위 (1-based)
  • kk: 보정 상수 (보통 60 정도 사용)

🧠 특징

  • 스코어의 크기 비교 없이 랭킹만 사용 → 서로 다른 모델 간 비교 가능
  • 한 모델에서 높은 순위를 받으면 전체 순위도 상승
  • 스코어 스케일이 달라 정규화가 어려울 때 유리

🧭 사용 예시

리랭킹 방식주로 사용하는 곳
Convex CombinationHybrid Search (dense + sparse 결합)
Reciprocal Rank Fusion (RRF)Ensemble Ranking, Search Fusion

아래는 python 간단한 예시이다.

# convex combination 예시
score_dense = 0.8
score_sparse = 0.5
alpha = 0.6

final_score = alpha * score_dense + (1 - alpha) * score_sparse
# RRF 예시
rankings = {
    "doc1": [1, 2],
    "doc2": [3, 1],
    "doc3": [2, 5]
}

def rrf_score(ranks, k=60):
    return sum(1 / (k + r) for r in ranks)

rrf_results = {doc: rrf_score(ranks) for doc, ranks in rankings.items()}

🧭 결론

  • 두 방식 모두 검색 결과의 질 향상을 위한 리랭킹 방식
  • 🔹 Convex combination은 score 중심
  • 🔹 RRF는 rank 중심
  • 상황에 따라 둘을 동시에 적용하거나 선택적으로 사용

🔗 기타: 리랭킹 vs 하이브리드 검색

가끔 두 개념이 헷갈리는 경우가 발생하는 것을 대비하여 정리한다

항목Re-rankingHybrid Search
시점벡터 검색 벡터 검색 전/중
목적검색 결과의 순서 개선검색 결과의 정확도 향상
방식Cross-Encoder로 다시 점수 계산Sparse + Dense를 동시에 계산
장점정확한 문서 선택의미 + 키워드의 균형
대표 기술Cohere Reranker, BGE RerankerFAISS Hybrid, Milvus Hybrid, ColBERT

위의 내용을 보면, dense search와 sparse search라는 단어가 빈번하게 나온다.
이에 대한 개념을 작성해둔다.

✅ Dense Search (의미 기반 검색)

질문과 문서의 의미(semantic) 유사도를 기반으로 검색

  • 🧠 방법:
    • 질문과 문서를 임베딩 모델(예: OpenAI embedding)을 사용해 각각 벡터(예: 1536차원)로 변환
    • 코사인 유사도 등으로 질문 벡터와 문서 벡터 간의 거리를 계산
    • 거리가 가까울수록 의미가 유사하다고 판단
  • ✅ 장점:
    • 유의어, 표현 방식이 달라도 의미가 통하면 잘 찾음 (예: "기온 변화" vs "날씨의 온도 차이")
  • ❌ 단점:
    • 최신 정보/숫자 기반 질문은 부정확할 수 있음
    • 계산 비용이 큼 (특히 reranking까지 하게 되면)

✅ Sparse Search (키워드 기반 검색)

질문과 문서 간의 단어(keyword) 매칭 기반 검색

  • 🧾 방법:
    • BM25, TF-IDF 같은 전통적인 정보 검색 기법 사용
    • 문서와 질문에 등장하는 단어의 빈도나 희소성 기반으로 점수 계산
    • 단어가 일치할수록 점수가 높아짐
  • ✅ 장점:
    • 단어 매칭에 충실 → 숫자/고유명사/날짜 등에서 강력
    • 가볍고 빠름
  • ❌ 단점:
    • 표현 방식이 다르면 검색이 안 됨 (예: "온도 변화" vs "기온 차이" → 키워드 일치 X)

🔁 간단 비교 요약

구분Dense SearchSparse Search
기준의미 유사도키워드 매칭
기술임베딩 + 코사인 유사도BM25, TF-IDF
유의어 인식가능불가능
정확한 키워드필요 없음필요함
고유명사 처리약함강함
연산 성능무거움 (벡터 연산)빠름 (정렬 기반)
사용 예시GPT 검색, FAQ 매칭뉴스 검색, 법률 문서 검색

그리고 이 둘을 조합하면 👉 Hybrid Search!


🧵 Retrieval

RAG의 과정 중, 벡터 검색 이전 단계와 후 단계를 나누어 Pre-retrieval과 Post-retrieval이라고 부른다.

구분Pre-retrievalPost-retrieval
시점검색 이전에 수행검색 이후에 수행
목적검색 효율성 향상, 잡음 제거검색 결과의 정확도 향상, 정밀 재정렬
주요 작업- 질문 리라이팅- 쿼리 확장(Query Expansion)- 질문 필터링 등- 리랭킹 (Reranking)- 관련성 필터링- 요약 or 압축 등
예시"9월 전력은?" → "2024년 9월 최대 전력 사용량은 얼마인가요?"검색된 문서 20개 중 5개만 relevance score 기준으로 최종 선택
도구/모델Prompt engineering, Query Rewriter, T5 등Cross-Encoder Reranker, LLM Relevance Scorer 등
장점검색 정확도 증가 (Garbage query 방지)최종 응답 품질 향상
단점잘못 리라이팅하면 recall 저하 위험느림 (모든 쌍 비교, 연산 많음)

📌 요약
1. Pre-retrieval: 질문을 더 좋은 검색어로 만들기 위한 전처리 단계
→ "좋은 검색을 위한 질문 정제"
2. Post-retrieval: 검색 후 문서의 품질을 다시 평가해 최종 문맥을 고르는 단계
→ "검색된 문서 중에서 최적의 문맥 추출"


🏓 Pre-retrieval

Pre-retrieval 단계는 "검색 전에 질문(query)을 더 잘 만들기 위한 과정"으로,

벡터 검색 또는 키워드 검색에서 더 좋은 결과를 얻기 위해 입력 질문을 보정, 확장, 또는 필터링하는 작업이다.

🔹 1. 질문 리라이팅 (Query Rewriting)

✅ 질문을 더 명확하거나 검색에 유리한 형태로 재작성하는 작업

📌 예시:

  • 원래 질문: → "요즘 인기 있는 영화 뭐야?"
  • 리라이팅 결과: → "2025년에 개봉한 한국에서 인기 있는 영화 목록 알려줘"

💡 목적:

  • 불명확한 질문을 명확하게
  • 키워드 누락 보완
  • 시제나 위치 정보 명시

🔹 2. 쿼리 확장 (Query Expansion)

✅ 질문에 관련 단어, 동의어, 연관 개념 등을 추가해서 검색 범위를 넓히는 작업

📌 예시:

  • 원래 질문: → "인공지능 기술"
  • 확장 후: → "인공지능, AI, 머신러닝, 딥러닝, 자연어 처리 기술"

💡 목적:

  • 키워드 기반 검색(BM25 등)에서 recall(재현율)을 높이기 위해 사용
  • 검색 누락을 방지

🔹 3. 질문 필터링 (Query Filtering)

✅ 질문에서 불필요하거나 검색에 방해가 되는 부분을 제거하는 작업

📌 예시:

  • 원래 질문: → "안녕, 혹시 인공지능 기술에 대해 알려줄 수 있어?"
  • 필터링 후: → "인공지능 기술"

💡 목적:

  • 인사말, 잡음, 의존 표현(“혹시”, “알려줄 수 있어”) 제거
  • 벡터 임베딩의 노이즈 감소, 검색 성능 향상

✅ 정리 비교

작업 유형설명예시 변경 전예시 변경 후
질문 리라이팅질문을 더 명확하게 재작성"요즘 인기 있는 영화 뭐야?""2025년에 개봉한 한국에서 인기 있는 영화 목록은?"
쿼리 확장동의어, 관련 키워드 추가"인공지능 기술""인공지능, AI, 머신러닝, 딥러닝"
질문 필터링불필요한 표현 제거"안녕, 혹시 인공지능 기술 알려줄래?""인공지능 기술"
profile
공부 기록용 24.08.05~ #LLM #RAG

0개의 댓글