Field Log · Entry

Reranker란 무엇인가: 두 단계 검색과 전체 지도 (1/14)

넓고 빠른 후보 검색 뒤 느리지만 정밀한 reranker가 최종 근거를 고르는 두 단계 검색 구조와 14편 학습 지도

이번 글의 결론

  • Retriever는 거대한 corpus에서 정답을 놓치지 않는 후보 집합을 만들고, reranker는 그 안에서 상위 순서를 더 정확하게 만듭니다.
  • Reranker는 candidate 안에 없는 문서를 되살릴 수 없습니다. 따라서 Recall@N → nDCG@k → end-to-end answer quality 순서로 봐야 합니다.
  • Cross-Encoder, ColBERT, monoT5, LLM listwise ranker는 같은 축의 이름이 아닙니다. interaction 구조, scoring 단위, 학습 목표를 분리해야 정확히 비교할 수 있습니다.
  • Reranking은 fusion, filtering, diversification, context packing과 다릅니다. Production에서는 이 단계들을 명시적인 contract로 연결해야 합니다.
  • 가장 큰 model을 고르는 것이 출발점이 아닙니다. 고정 candidate set에서 품질·p95 latency·비용을 함께 재는 작은 baseline이 출발점입니다.

RAG 검색 계층 시리즈의 reranking 입문 글에서는 Cross-Encoder·monoT5·ColBERT를 한 번에 비교했습니다. 이번 시리즈는 그 한 단계를 독립된 engineering discipline으로 확대합니다. 수학적 기초, model 구조, 학습 데이터, 평가, 한국어 model 선택, serving, RAG utility, 멀티모달·reasoning 연구를 14편에 걸쳐 연결합니다.

질문 q

  ├─ Stage 1: BM25 / dense ANN / hybrid
  │             corpus 10,000,000 → candidates 100
  │             목표: 정답을 후보에 넣기

  ├─ Stage 2: reranker
  │             candidates 100 → ordered candidates 10
  │             목표: 유용한 문서를 위로 올리기

  └─ Stage 3: selector / packer / generator
                candidates 10 → evidence 4 → answer
                목표: 충분하고 안전한 context로 답하기

1. Reranker를 한 문장으로 정의한다

Reranker는 첫 검색기가 반환한 유한한 후보 집합을 더 비싼 relevance function으로 다시 점수화하거나 직접 순열로 만들어 상위 결과의 품질을 높이는 구성 요소입니다.

Corpus를 (D), query를 (q), first-stage retriever를 (R)라고 합시다.

C_N(q) = R(q, D, N)

C_N(q)는 corpus 전체가 아니라 최대 N개의 후보입니다. Pointwise reranker라면 각 후보에 score를 붙입니다.

s_i = fθ(q, d_i)
π = argsort_desc([s_1, ..., s_N])

Listwise reranker라면 후보 목록을 함께 읽고 순열을 직접 예측할 수 있습니다.

π = gθ(q, [d_1, ..., d_N])

최종 top_kπ의 앞부분입니다. 이 정의에서 중요한 사실은 입력 범위가 D가 아니라 C_N(q)라는 점입니다.

2. 왜 한 Model로 전부 검색하지 않는가

정확한 relevance 판단에는 query와 document의 세부 관계를 읽는 계산이 필요합니다. 하지만 corpus가 수백만 개라면 모든 query-document pair에 full attention을 계산할 수 없습니다.

full scan cost ≈ |D| × pair_cost
rerank cost    ≈ N   × pair_cost

|D| = 10,000,000
N   = 100

그래서 검색 시스템은 역할을 나눕니다.

단계주된 최적화버리는 정보대표 방식
Candidate retrievalrecall·throughput정밀한 query-document interactionBM25, dense vector, learned sparse, hybrid
Rerankingtop-rank precision·orderingcorpus 전체 탐색 가능성LambdaMART, Cross-Encoder, monoT5, LLM ranker
Context selectioncoverage·diversity·budget단순 relevance 순서MMR, set cover, evidence graph, dynamic selection
Generationanswer utility·faithfulness검색 metric 자체grounded LLM, citation, abstention

두 단계 구조는 “약한 model 뒤에 강한 model”이라는 말보다 정확합니다. 첫 단계와 둘째 단계는 서로 다른 search space와 실패 비용을 갖습니다.

3. Reranker의 절대 상한은 Candidate Recall이다

Gold document 집합을 G(q)라고 하겠습니다. 후보가 gold를 하나라도 포함하는지 보는 binary candidate recall은 다음과 같습니다.

hit_N(q) = 1 if C_N(q) ∩ G(q) ≠ ∅ else 0
Recall@N = mean_q hit_N(q)

질문 1,000개에서 Recall@100 = 0.86이라면 최소 140개 질문은 reranker가 아무리 좋아도 gold를 위로 올릴 수 없습니다.

gold ∉ candidates
→ reranker가 관찰할 수 없음
→ final top-k에도 넣을 수 없음

이 때문에 다음 두 문장은 전혀 다릅니다.

  • “Reranker가 나빠서 정답 passage가 top-5에 없다.”
  • “Retriever가 정답 passage를 top-100에 넣지 못했다.”

첫 문장은 ordering 문제이고, 둘째는 candidate generation 문제입니다. Trace에 gold_in_candidates를 남기지 않으면 두 실패가 섞입니다.

여러 Gold가 필요한 질문

Multi-hop 질문은 gold 하나가 아니라 evidence set 전체가 필요할 수 있습니다.

Question: A 회사가 인수한 B 제품의 현재 지원 종료일은?

Evidence A: A가 B를 인수했다.
Evidence B: B의 지원 종료일은 2027-03-31이다.

이때 하나라도 포함하는 recall은 너무 낙관적입니다.

evidence coverage@N
  = |C_N(q) ∩ G(q)| / |G(q)|

Reranker가 pointwise relevance만 최적화하면 비슷한 evidence A 여러 개를 위에 두고 evidence B를 밀어낼 수도 있습니다. 이 문제는 12편에서 set utility와 context selection으로 다시 다룹니다.

4. Reranker와 자주 혼동하는 네 단계

Fusion

BM25와 dense 결과처럼 서로 다른 ranked list를 합칩니다.

BM25 ranks + dense ranks
→ RRF / weighted score fusion
→ merged candidate list

RRF도 순위를 바꾸지만 보통 query-document text를 새 model로 읽지 않습니다. 후보 source의 rank signal을 결합하는 fusion입니다.

Filtering

ACL, tenant, 날짜, 문서 상태 같은 hard constraint를 적용합니다.

visibility = allowed(user, document)
status     = approved
valid_at   = query_time

권한 없는 문서를 rerank한 뒤 숨기는 것이 아니라, 가능한 한 검색 전에 security filter를 적용해야 합니다. Reranker score는 authorization 판정이 아닙니다.

Diversification

상위 문서가 거의 같은 내용을 반복하지 않도록 novelty를 반영합니다. MMR처럼 query relevance와 이미 선택한 문서와의 중복을 함께 볼 수 있습니다.

Context Packing

선택한 chunk를 원문 순서, source authority, token budget에 맞춰 LLM prompt로 배치합니다. Search rank 1이 prompt position 1이어야 한다는 법은 없습니다.

5. 종류를 외우기 전에 분류축을 세운다

Reranker 이름이 혼란스러운 이유는 서로 직교하는 분류축을 한 줄에 섞기 때문입니다.

축 A · 후보를 몇 개씩 비교하는가

방식한 번의 판단결과주요 trade-off
Pointwise(q, d_i)후보별 score병렬화가 쉽지만 후보 간 관계를 직접 보지 않음
Pairwise(q, d_i, d_j)d_i > d_j 선호상대 비교가 자연스럽지만 비교 수가 커질 수 있음
Setwise(q, subset)subset의 승자·scorepairwise보다 호출 수를 줄일 수 있음
Listwise(q, d_1...d_n)전체 score·순열global context를 보지만 길이·순서 bias가 큼

축 B · Query와 Document가 어디서 상호작용하는가

구조interactiondocument 사전 계산대표 예
Feature LTR수작업·검색 feature 결합가능LambdaMART
Single-vector bi-encoder마지막 dot product가능dense retriever
Late interactiontoken vector 간 MaxSim가능ColBERT
Cross-Encoder모든 layer의 joint attention불가monoBERT, MiniLM reranker
Encoder-decoderjoint encoding + label/score decoder불가monoT5, RankT5
Decoder-only LLMprompt 내 비교·생성·logitmodel에 따라 다름RankGPT, RankZephyr, Qwen3-Reranker

ColBERT는 corpus 전체를 검색하면 retriever이고, first-stage 후보에만 MaxSim을 적용하면 reranker 역할입니다. Architecture 이름만으로 pipeline 역할이 정해지지 않습니다.

축 C · 무엇으로 학습하는가

human qrels
click / purchase / dwell-time behavior
teacher scores or permutations
synthetic query-document judgments
downstream answer utility
reinforcement learning reward
zero-shot instruction only

같은 Cross-Encoder도 binary label로 pointwise 학습할 수 있고, pairwise loss나 listwise softmax로 학습할 수 있습니다. Model 구조와 loss를 분리해서 기록해야 합니다.

축 D · 무엇을 최적화하는가

  • topical relevance
  • exact answer support
  • freshness·authority
  • task-specific instruction following
  • multiple evidence coverage
  • final generator confidence·correctness
  • latency·token cost까지 포함한 utility

“관련 있다”는 label 정의가 달라지면 같은 query-document도 정답이 달라집니다.

6. Reranking이 특히 잘 듣는 실패

다음은 넓은 후보 검색에는 성공했지만 세부 조건을 구분하지 못한 경우입니다.

Query: Orion S2 승인된 emergency shutdown 온도

1차 후보:
1. Orion S1 emergency shutdown: 82°C
2. Orion S2 draft shutdown proposal: 92°C
3. Orion S2 normal operating range: 45–70°C
4. Orion S2 approved emergency shutdown: 88°C
5. Orion S2 shutdown pressure: 2.4 bar

좋은 reranker는 다음 interaction을 읽어야 합니다.

  • S2S1의 entity mismatch
  • approveddraft의 status 차이
  • temperaturepressure의 attribute 차이
  • emergency shutdownnormal range의 event 차이

Embedding similarity 하나로 압축하기 어려운 부정, 숫자, version, entity relation, source status가 reranking의 대표 이득 구간입니다.

7. Reranker를 붙여도 해결되지 않는 실패

Gold가 Candidate에 없음

First-stage recall, query rewriting, parsing, chunking, index freshness를 고쳐야 합니다.

잘못된 Chunk 경계

제목은 candidate 1에 있고 답은 candidate 2에 찢겨 있다면 pair 하나만 읽는 reranker도 의미를 복원하지 못할 수 있습니다.

Label이 제품 목표와 다름

연구 benchmark의 topical relevance가 실제 제품의 최신 승인 문서답을 직접 지지하는 근거를 보장하지 않습니다.

권한·정책 문제

높은 relevance score가 문서 공개 허가를 뜻하지 않습니다.

후보가 이미 완벽함

Baseline top-k가 충분히 좋으면 reranking gain보다 latency와 운영 복잡성이 클 수 있습니다. “대부분의 RAG에는 reranker가 필수” 같은 일반화는 실험 없이 받아들이지 않습니다.

8. 품질만이 아니라 Cost Model을 먼저 쓴다

Pointwise Cross-Encoder의 요청당 token work를 거칠게 쓰면 다음과 같습니다.

work ≈ Σ_i tokens(query + candidate_i)
latency ≠ work / batch_size     # 완전한 선형식이 아님

후보 수 N, 평균 pair 길이 L, model cost를 c(L)라 하면:

total compute ≈ N × c(L)

Listwise LLM은 후보를 한 prompt에 모으지만 공짜가 아닙니다.

input tokens ≈ query + Σ candidate tokens + delimiters
attention cost grows with the combined sequence
output tokens depend on ranking protocol

Batching은 device utilization을 높이지만 개별 request의 queue time을 늘릴 수 있습니다. 그래서 최소한 다음을 함께 기록합니다.

품질시스템비용
Recall@N, MRR, nDCG@kp50/p95/p99, timeout ratepair 수, input token, GPU·API 비용
context precisionpairs/s, tokens/smemory, energy 또는 request 단가
answer correctness·faithfulnessqueue·compute 분해fallback 비율

9. 첫 실험의 Contract

Model을 고르기 전에 하나의 평가 record를 정합니다.

type RerankTrace = {
  queryId: string;
  query: string;
  retrieverVersion: string;
  corpusVersion: string;
  candidateDepth: number;
  goldInCandidates: boolean | null;
  candidates: Array<{
    documentId: string;
    retrievalRank: number;
    retrievalScore: number | null;
    retrievalChannels: string[];
    rerankRank: number;
    rerankScore: number | null;
    tokenCount: number;
    truncated: boolean;
  }>;
  rerankerVersion: string;
  latencyMs: number;
};

다음 네 run만 있어도 출발할 수 있습니다.

A. 현재 first-stage top-k
B. first-stage top-20  → reranker → top-k
C. first-stage top-50  → reranker → top-k
D. first-stage top-100 → reranker → top-k

같은 candidate list를 저장해 여러 reranker에 replay해야 model 차이와 retrieval 변동을 분리할 수 있습니다.

10. 14편 학습 지도

질문결과물
1Reranker는 pipeline에서 무엇인가?공통 용어와 단계 contract
2Pointwise·pairwise·listwise는 무엇이 다른가?Learning to Rank 수학
3Cross-Encoder는 왜 정확하고 비싼가?local baseline
4monoT5·duoT5·RankT5·ListT5는 어떻게 다른가?생성형 ranking 지도
5ColBERT late interaction은 어느 지점인가?multi-vector 설계 판단
6LLM은 어떻게 point·pair·set·listwise로 순위를 매기는가?prompt ranker 실험
7어떤 positive·negative를 모아야 하는가?dataset contract
8어떤 loss·distillation·calibration을 쓸 것인가?training recipe
9개선을 어떻게 증명하는가?offline·online 평가표
10한국어·도메인·API·open model을 어떻게 고르는가?model bake-off
11p95 latency와 비용을 어떻게 줄이는가?serving·cascade 설계
12RAG에는 relevance보다 무엇이 더 필요한가?utility·보안·멀티홉 선택
132024~2026 연구는 어디로 가는가?연구 동향과 읽을 논문
14처음부터 production 실험을 어떻게 만드는가?end-to-end implementation

순서대로 읽어도 되고, 이미 기본 pipeline이 있다면 3 → 9 → 11 → 14편을 먼저 읽어도 됩니다.

11. 도입 전 체크리스트

  • 현재 Recall@N, nDCG@k, answer quality, p95가 기록돼 있다.
  • Gold miss와 ordering failure를 구분할 수 있다.
  • Candidate list를 고정해 model끼리 replay할 수 있다.
  • Relevance label에 freshness·authority·answer support가 필요한지 정의했다.
  • ACL·tenant filter가 reranker와 독립적으로 강제된다.
  • Long document truncation 정책을 기록한다.
  • 품질 gain이 없을 때 reranker를 우회할 fallback이 있다.
  • 외부 API라면 문서 전송·보존 정책을 확인했다.

스스로 확인하기

  1. Recall@100 = 0인 질문을 reranker가 고칠 수 없는 이유는 무엇인가?
  2. RRF와 Cross-Encoder reranking은 입력 signal이 어떻게 다른가?
  3. Pointwise·listwise와 Cross-Encoder·LLM은 왜 같은 분류축이 아닌가?
  4. ColBERT가 어떤 pipeline에서는 retriever이고 다른 pipeline에서는 reranker일 수 있는 이유는 무엇인가?
  5. RAG의 최종 목표가 answer correctness라면 topical relevance만으로 부족한 경우는 언제인가?

다음 글에서는 neural reranker 이전부터 이어진 Learning to Rank를 pointwise·pairwise·listwise loss와 nDCG 관점으로 정리합니다.

참고자료