✨ Reranker란?

구분설명
RetrievalFAISS로 대략 비슷한 문서 찾기 (fast, rough)
Reranking찾은 문서들을 LLM-level로 다시 정밀하게 점수 매기기 (slow, accurate)
결과훨씬 질문과 관련성 높은 top-k 결과만 선택

요약:

"FAISS → rough search"
"Reranker → 정밀 ranking"


🛠️ 쓸 모델 추천: BGE-Reranker

  • huggingface.co/BAAI/bge-reranker-base
  • 질문(query)와 문서(document)를 세트로 넣고
  • Relevance score (0~1) 출력
  • 점수 높은 순으로 정렬!

📂 backend/retriever/reranker.py 만들자!

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

# 1. Reranker 모델 로딩
reranker_tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-reranker-base")
reranker_model = AutoModelForSequenceClassification.from_pretrained("BAAI/bge-reranker-base")

def rerank_documents(query: str, docs: list, top_k: int = 5) -> list:
    """
    검색된 문서 리스트를 Query와 비교해서 relevance 순서로 재정렬한다.
    """
    pairs = [(query, doc) for doc in docs]
    
    inputs = reranker_tokenizer.batch_encode_plus(
        pairs,
        padding=True,
        truncation=True,
        return_tensors="pt",
        max_length=512
    )
    
    with torch.no_grad():
        scores = reranker_model(**inputs).logits.squeeze(-1)  # (batch_size,)
    
    scores = scores.tolist()
    
    # 점수 높은 순서대로 정렬
    sorted_docs = [doc for _, doc in sorted(zip(scores, docs), key=lambda x: x[0], reverse=True)]
    
    return sorted_docs[:top_k]

✨ 설명

단계설명
1(query, doc) 쌍을 만들어 tokenizer encode
2reranker 모델에 넣어 relevance score 추출
3점수 높은 순으로 문서 정렬
4top-k 개 리턴

✅ 적용 방법

search_documents()를 수정해서:

  1. FAISS로 rough 검색한 다음
  2. rerank_documents()로 다시 정렬
from retriever.reranker import rerank_documents

def search_documents(query: str, top_k: int = 5) -> list:
    # 1. Rough FAISS 검색
    query_embedding = embedding_model.encode([query], convert_to_tensor=True).cpu().detach().numpy()
    distances, indices = index.search(query_embedding, top_k)
    results = [documents[idx] for idx in indices[0] if idx != -1]

    # 2. 정밀 Reranking
    reranked_results = rerank_documents(query, results, top_k=top_k)

    return reranked_results

📋 정리

항목설명
FAISS rough search빠르지만 정확성은 살짝 부족
BGE-Reranker 정밀 스코어링정확성 + 의미상 유사성 고려
최종 top-k만 반환Retrieval 품질 대폭 상승

📣 다음 플랜

✅ Reranker 추가
✅ search_documents() 내부에 반영
/ask API 자동 품질 업그레이드 완료


✍️ 다음 질문

"reranker.py"

Was this page helpful?