프로그래밍 PROGRAMMING/인공지능 AI

Reranker란 무엇인가 — Bi-encoder vs Cross-encoder

매운할라피뇨 2026. 4. 28. 09:30
반응형

Reranker란 무엇인가 — Bi-encoder vs Cross-encoder

 
검색 시스템에서 가장 중요한 질문은 단순합니다.

“사용자의 질문에 가장 잘 맞는 문서를 어떻게 위로 올릴 것인가?”

 
BM25나 벡터 검색은 이 질문에 대한 1차 답을 제공합니다. 빠르게 많은 문서 중에서 그럴듯한 후보를 찾아옵니다. 하지만 후보 검색 결과가 항상 완벽한 순서로 정렬되는 것은 아닙니다. 이때 사용하는 것이 Reranker입니다. Reranker는 이미 검색된 후보 문서들을 다시 평가해서, 사용자 질문에 더 잘 맞는 순서로 재정렬하는 모델입니다.

사용자 질문
  -> BM25 / Vector Search
  -> 후보 문서 top-k 검색
  -> Reranker로 재정렬
  -> 최종 상위 문서 반환

 
예를 들어 사용자가 다음과 같이 질문했다고 가정합니다.

퇴직연금 중도 인출 조건은 무엇인가요?

 
1차 검색 결과에는 다음과 같은 문서들이 섞일 수 있습니다.

A. 퇴직연금 가입 방법
B. 퇴직연금 중도 인출 가능 사유
C. 연금저축 세액공제 안내
D. 퇴직금 지급 기준

 
BM25나 벡터 검색은 이 문서들을 후보로 가져올 수 있습니다. 하지만 최종적으로 가장 위에 와야 하는 문서는 B. 퇴직연금 중도 인출 가능 사유입니다. Reranker는 이런 후보 문서들을 질문과 다시 비교해서, 더 적절한 문서를 위로 올리는 역할을 합니다.

검색은 보통 두 단계로 나뉩니다

검색 시스템은 보통 다음 두 단계 구조를 가집니다.

1단계: Retriever
2단계: Reranker

 

Retriever

Retriever는 전체 문서 저장소에서 관련 있을 가능성이 높은 후보를 빠르게 찾습니다. 대표적인 방식은 다음과 같습니다.

BM25
벡터 검색
하이브리드 검색

 
Retriever의 목표는 “정답일 가능성이 있는 문서를 놓치지 않고 후보에 포함시키는 것”입니다. 즉, 속도와 recall이 중요합니다.

Reranker

Reranker는 Retriever가 가져온 후보 문서들을 더 정밀하게 비교합니다. 전체 문서를 대상으로 검색하지 않고, 이미 추려진 후보만 다시 봅니다. Reranker의 목표는 “후보 문서들을 더 정확한 순서로 정렬하는 것”입니다. 즉, precision과 ranking quality가 중요합니다. 정리하면 다음과 같습니다.

Retriever = 넓게 빠르게 찾는 단계
Reranker = 좁게 깊게 판단하는 단계

Bi-encoder란 무엇인가

Bi-encoder는 질문과 문서를 각각 따로 임베딩하는 방식입니다.

질문 -> Encoder -> 질문 벡터
문서 -> Encoder -> 문서 벡터

 
그다음 질문 벡터와 문서 벡터의 유사도를 계산합니다.

similarity(query_vector, document_vector)

 
이 방식은 벡터 검색에서 많이 사용됩니다. 예를 들어 다음과 같이 동작합니다.

문서들을 미리 임베딩해서 벡터 DB에 저장합니다.
사용자 질문이 들어오면 질문만 임베딩합니다.
질문 벡터와 가까운 문서 벡터를 검색합니다.

 

Bi-encoder의 장점

Bi-encoder의 가장 큰 장점은 빠르다는 점입니다. 문서 벡터를 미리 만들어 둘 수 있기 때문에, 검색 시점에는 질문 벡터만 만들고 벡터 DB에서 가까운 문서를 찾으면 됩니다. 대량의 문서 검색에 적합합니다. 수십만 개, 수백만 개 문서 중에서도 빠르게 후보를 찾을 수 있습니다. 또한 벡터 검색을 통해 표현이 다른 문서도 찾을 수 있습니다. 예를 들어 자동차 보험료 줄이는 방법과 차량 보장 비용 절감 전략처럼 단어가 다르더라도 의미가 비슷하면 가까운 벡터로 매칭될 수 있습니다.

Bi-encoder의 약점

Bi-encoder는 질문과 문서를 따로 인코딩합니다.그래서 질문과 문서 사이의 세밀한 상호작용을 충분히 보지 못합니다. 예를 들어 질문의 특정 조건, 부정 표현, 숫자, 시간, 비교 관계 같은 요소를 문서와 정밀하게 대조하는 데 약할 수 있습니다. 또한 하나의 벡터에 문서 의미를 압축해야 하므로 긴 문서나 복잡한 문서에서는 정보 손실이 생길 수 있습니다. 즉, Bi-encoder는 빠르게 후보를 찾는 데는 좋지만, 최종 순위를 정밀하게 판단하는 데는 한계가 있습니다.

Cross-encoder란 무엇인가

Cross-encoder는 질문과 문서를 함께 입력해서 관련도를 계산하는 방식입니다.

[질문, 문서] -> Encoder -> 관련도 점수

 
Bi-encoder가 질문과 문서를 따로 벡터화하는 것과 달리, Cross-encoder는 질문과 문서를 한 번에 읽습니다. 예를 들어 다음처럼 입력합니다.

질문: 퇴직연금 중도 인출 조건은 무엇인가요?
문서: 퇴직연금은 주택 구입, 장기 요양, 파산 등 특정 사유가 있을 때 중도 인출이 가능합니다.

 
모델은 질문과 문서의 단어, 문장, 조건, 의미 관계를 함께 보면서 관련도 점수를 계산합니다.

Cross-encoder의 장점

Cross-encoder의 가장 큰 장점은 정확도입니다.
질문과 문서를 직접 비교하기 때문에, Bi-encoder보다 더 세밀한 판단이 가능합니다.
질문에 포함된 조건이 문서에 실제로 답변되어 있는지, 문서가 질문의 의도와 얼마나 맞는지를 더 잘 평가할 수 있습니다.
그래서 Reranker 모델은 대부분 Cross-encoder 구조를 사용합니다. 

질문과 후보 문서를 함께 읽고,
각 후보의 relevance score를 계산하고,
그 점수로 최종 순위를 다시 정렬합니다.

 

Cross-encoder의 약점

Cross-encoder는 느립니다. 문서 벡터를 미리 만들어 둘 수 없고, 검색 시점마다 질문과 각 후보 문서를 함께 넣어 계산해야 합니다. 예를 들어 후보 문서가 100개라면 다음 계산을 100번 해야 합니다.
 

질문 + 문서1 -> 점수
질문 + 문서2 -> 점수
질문 + 문서3 -> 점수
...
질문 + 문서100 -> 점수

 
따라서 Cross-encoder는 전체 문서 저장소를 직접 검색하는 데 적합하지 않습니다. 대신 Retriever가 가져온 후보 문서 수십 개에서 수백 개를 재정렬하는 데 사용합니다.

Bi-encoder vs Cross-encoder 비교

구분 Bi-encoder Cross-encoder
입력 방식 질문과 문서를 따로 인코딩합니다 질문과 문서를 함께 입력합니다
속도 빠릅니다 느립니다
정확도 상대적으로 낮습니다 상대적으로 높습니다
대규모 검색 적합합니다 부적합합니다
사전 계산 문서 임베딩을 미리 저장할 수 있습니다 사전 계산이 어렵습니다
주 용도 후보 검색, 벡터 검색 후보 재정렬, Reranking
장점 빠르고 확장성이 좋습니다 질문-문서 관계를 정밀하게 봅니다
약점 세밀한 상호작용을 놓칠 수 있습니다 비용과 지연 시간이 큽니다

 
간단히 말하면 다음과 같습니다.

Bi-encoder = 빠르게 넓게 찾는 모델
Cross-encoder = 느리지만 깊게 판단하는 모델
320x100

RAG에서 Reranker가 중요한 이유

RAG에서는 검색 품질이 답변 품질을 크게 좌우합니다.
LLM이 아무리 좋아도 잘못된 문서를 컨텍스트로 받으면 좋은 답변을 만들기 어렵습니다.
일반적인 RAG 파이프라인은 다음처럼 구성됩니다.

사용자 질문
  -> Retriever로 후보 문서 검색
  -> Reranker로 후보 재정렬
  -> 상위 문서만 LLM 컨텍스트에 전달
  -> 답변 생성

 

Reranker를 사용하면 LLM에 넣는 문서의 품질을 높일 수 있습니다.
관련 없는 문서가 줄어들고, 질문에 직접 답하는 문서가 상위에 배치됩니다.
이로 인해 다음 효과를 기대할 수 있습니다.

  • 답변 정확도가 좋아집니다.
  • 불필요한 컨텍스트가 줄어듭니다.
  • 토큰 사용량을 줄일 수 있습니다.
  • hallucination 가능성을 낮출 수 있습니다.
  • 검색 결과의 최종 순위 품질이 좋아집니다.

언제 Reranker를 사용해야 할까

Reranker는 다음 상황에서 특히 유용합니다. 검색 결과는 많이 나오지만 상위 순서가 자주 틀릴 때 사용합니다. 예를 들어 정답 문서가 top 20 안에는 있는데 top 5 안에 잘 들어오지 않는 경우입니다. RAG 답변이 관련 없는 문서를 근거로 생성될 때도 사용합니다. Retriever가 후보를 잘 찾더라도 최종 컨텍스트에 들어가는 문서가 부정확하면 답변 품질이 흔들립니다. 또한 BM25와 벡터 검색을 함께 쓰는 하이브리드 검색에서도 유용합니다. BM25와 벡터 검색 결과를 RRF 등으로 합친 뒤, Reranker로 최종 순위를 다시 정렬하면 검색 품질이 좋아질 수 있습니다.

대표적인 Reranker 모델

Reranker는 여러 방식으로 사용할 수 있습니다.

Cohere Rerank
bge-reranker
Jina Reranker
ColBERT 계열 모델
LLM 기반 reranking

 
상용 API를 쓰면 빠르게 적용할 수 있고, 오픈소스 모델을 쓰면 직접 운영하거나 도메인에 맞게 튜닝할 수 있습니다.
선택 기준은 보통 다음과 같습니다.

  • 정확도
  • 지연 시간
  • 비용
  • 지원 언어
  • 운영 방식
  • 도메인 적합성

한국어 문서가 많다면 한국어 또는 다국어 성능을 반드시 확인해야 합니다.

 


마무리

Reranker는 검색 결과를 한 번 더 읽고, 더 정확한 순서로 다시 정렬하는 모델입니다. Retriever가 넓게 후보를 찾는 역할이라면, Reranker는 그 후보 중에서 진짜 중요한 문서를 위로 올리는 역할을 합니다. Bi-encoder와 Cross-encoder의 차이를 이해하면 Reranker의 위치가 명확해집니다. Bi-encoder는 질문과 문서를 따로 벡터화하기 때문에 빠르고 대규모 검색에 적합합니다. 반면 Cross-encoder는 질문과 문서를 함께 읽기 때문에 느리지만 더 정확합니다. 그래서 현대 검색 시스템은 보통 둘 중 하나만 고르지 않습니다. Bi-encoder나 BM25로 후보를 빠르게 찾고, Cross-encoder 기반 Reranker로 최종 순위를 정밀하게 다듬습니다. 결국 좋은 검색 시스템은 “빠르게 찾는 능력”과 “정확하게 고르는 능력”을 함께 갖춰야 합니다. Reranker는 그중 두 번째 역할, 즉 검색 품질을 마지막으로 끌어올리는 중요한 단계입니다.

반응형