Reranker
리랭커는 결과를 사용자나 LLM에 전달하기 전에 크로스 인코더와 같은 더 느리고 정확한 모델로 검색기의 후보 목록을 다시 평가합니다.
재순위화 모델은 빠른 1단계 검색기가 추린 짧은 후보 목록을 받아 각 후보를 쿼리와 더 정밀하게 비교해 점수를 매기고 목록의 순서를 다시 정하는 모델입니다. 검색 엔진, 검색 증강 생성(RAG) 파이프라인, 추천 시스템은 가장 정확한 관련성 모델을 수백만 개 문서에 적용하기에는 너무 느리지만, 상위 수십 개에서 수백 개에는 충분히 빠르므로 이 방식을 사용합니다. 텍스트 검색에서 표준적인 재순위화 모델은 크로스 인코더입니다. 쿼리와 후보 하나를 함께 입력으로 읽고 단일 관련성 점수를 출력하는 Transformer입니다. Nogueira와 Cho(2019)는 이 방식으로 미세 조정한 BERT를 사용해 MS MARCO 구절 순위표에서 이전 최고 기록보다 상대적으로 27% 높은 MRR@10을 달성했습니다.
검색 후 재순위화의 작동 방식#
1단계에서는 재현율을 우선합니다. BM25를 이용한 키워드 매칭, 사전 계산된 임베딩을 이용한 벡터 검색, 또는 두 방식을 함께 사용하여 전체 컬렉션에서 그럴듯한 후보 수백 개를 밀리초 만에 가져옵니다. 재순위화 모델은 정밀도를 우선합니다. 쿼리와 후보의 모든 쌍에 대해 모델을 한 번씩 실행하며, 상위 결과 몇 개만 사용자에게 전달하거나 LLM의 컨텍스트 윈도우에 넣습니다. Ultralytics의 VisualAISearch 솔루션은 이러한 1단계 검색기입니다. 이미지 폴더를 CLIP ViT-B/32로 임베딩하고, 텍스트 쿼리와의 코사인 유사도를 기준으로 순위를 매긴 뒤, 기본적으로 유사도 임계값 0.1을 넘는 일치 항목을 최대 30개 반환합니다.
크로스 인코더와 바이 인코더#
일반적인 검색기인 바이 인코더는 쿼리와 각 문서를 별도로 임베딩하므로 문서 벡터를 한 번만 계산해 벡터 데이터베이스에 저장할 수 있습니다. 이러한 독립성은 한계이기도 합니다. 쿼리를 알기 전에 문서 벡터가 고정되기 때문입니다. 크로스 인코더는 쿼리와 문서를 하나의 입력으로 이어 붙이므로 셀프 어텐션이 쿼리의 모든 단어와 문서의 모든 단어를 비교할 수 있지만, 쿼리 시점에 각 쌍마다 전체 순전파를 실행해야 합니다. ColBERT는 그 중간에 위치합니다. 문서 토큰마다 벡터 하나를 저장하고 지연 상호작용 방식으로 쿼리 토큰과 비교합니다. Sentence Transformers의 CrossEncoder 클래스는 MS MARCO 검색 쿼리로 학습한 ms-marco-MiniLM-L6-v2와 같은 재순위화 모델을 실행합니다.
from sentence_transformers import CrossEncoder
query = "When was the transformer architecture introduced?"
# Shortlist returned by a fast first-stage retriever, in its original order
candidates = [
"Transformer models such as GPT and BERT are widely used in natural language processing.",
"An electrical transformer changes the voltage of an alternating current.",
"Convolutional neural networks became popular after AlexNet won ImageNet in 2012.",
"The transformer was introduced in the 2017 paper Attention Is All You Need.",
]
# The cross-encoder reads the query and each candidate together and scores their relevance
reranker = CrossEncoder("cross-encoder/ms-marco-MiniLM-L6-v2")
ranked = reranker.rank(query, candidates)
for hit in ranked:
print(f"{hit['score']:6.2f} {candidates[hit['corpus_id']]}")질문에 답하는 구절은 6.97점으로 꼴찌에서 1위로 올라서며, 다음 후보의 -4.48점보다 훨씬 앞섭니다. 전기 변압기에 대한 문장은 쿼리의 핵심 단어를 공유하지만 -5.29점을 받습니다.
재순위화 모델의 유형#
- 크로스 인코더: MS MARCO MiniLM 모델과 BAAI의 bge-reranker 제품군처럼 관련성 레이블로 미세 조정한 소형 Transformer이며, 호스팅 재순위화 API로도 제공됩니다.
- LLM 재순위화 모델: 대규모 언어 모델(LLM)에 프롬프트를 제공해 후보의 점수를 매기거나 전체 목록을 한 번에 정렬합니다. RankGPT는 ChatGPT와 GPT-4가 정렬된 목록을 작성하는 방식으로 구절을 재순위화할 수 있음을 보여 주었으며, ChatGPT의 순위를 소형 전용 재순위화 모델로 증류했습니다.
- 학습-순위화 모델: 추천 및 전자상거래 시스템은 클릭 이력, 가격, 최신성과 같은 특성을 사용하는 그래디언트 부스팅 트리 모델로 후보의 순위를 다시 매깁니다. LambdaMART와 같은 순위화 목적 함수로 학습하며, LightGBM과 XGBoost에서 사용할 수 있습니다.
재순위화 모델과 관련 개념 비교#
- 시맨틱 검색: 보통 바이 인코더 검색기를 사용해 의미를 기준으로 검색합니다. 재순위화 모델은 그 위에 추가할 수 있는 2단계 구성 요소입니다.
- 하이브리드 검색: 키워드 검색 결과와 벡터 검색 결과 목록을 합칩니다. 콘텐츠를 다시 읽지 않고 순위를 결합하는 상호 순위 융합을 사용하는 경우가 많습니다. 재순위화 모델은 병합된 목록에 적용되는 경우가 많습니다.
- 지식 증류: 빠른 검색기가 느린 재순위화 모델의 점수를 모방하도록 학습하여 재순위화 성능의 일부를 1단계에 반영합니다.
- 2단계 객체 탐지기: 이미지에 같은 방식을 적용합니다. 영역 제안 단계에서 후보 박스를 제안하고, 2단계에서 각 박스의 점수를 다시 매기고 보정한 뒤 비최대 억제(NMS)로 겹치는 중복 항목을 제거합니다.










