jongkwan.dev
개발 · Essay №103

Late Interaction 리랭킹

문서를 토큰 벡터로 보존하는 ColBERT부터 쿼리와 문서를 함께 인코딩하는 LBNL까지, 크로스 인코더의 정밀도와 바이인코더의 속도 사이를 메우는 리랭킹 구조를 비교합니다.

이종관2026년 7월 15일13 min read
Contents

크로스 인코더의 정밀도와 바이인코더의 속도 사이를, 인코딩과 상호작용의 순서를 바꿔 메우는 리랭킹 구조들입니다.

리랭킹이 속도와 정밀도를 동시에 정하는 자리

검색 강화 생성(Retrieval-Augmented Generation, RAG)은 대개 2단계 검색을 씁니다. 1단계에서 바이인코더나 BM25가 후보를 넓게 추리고, 2단계에서 리랭커가 질의와의 관련성으로 다시 정렬합니다. 리랭커가 필요한 이유는 LLM이 컨텍스트 중간의 정보를 놓치는 'lost in the middle' 현상 때문으로, 관련성 높은 문서를 앞쪽에 배치해야 답 품질이 유지됩니다.

이 2단계에서 리랭커의 인코딩·상호작용 방식이 정확도와 지연을 동시에 결정합니다. 쿼리와 문서를 언제 만나게 하느냐가 설계의 핵심 축입니다. 이 글은 크로스 인코더 이후의 세 흐름, 즉 ColBERT의 late interaction, jina-reranker-v3의 LBNL, 그리고 listwise LLM 리랭킹의 위치 편향을 다룹니다.

세 가지 상호작용 방식

먼저 기준선이 되는 세 방식을 상호작용 시점으로 비교합니다. 쿼리와 문서가 만나는 시점이 이를수록 정밀하지만 느립니다.

방식상호작용 시점문서 표현속도정밀도
바이인코더사전 계산된 벡터 내적 1회단일 벡터매우 빠름보통
ColBERT (late interaction)쿼리 시점 토큰별 MaxSim토큰별 벡터 행렬빠름높음
크로스 인코더쿼리+문서 결합 후 전체 인코딩쌍 단위느림최고

바이인코더는 문서를 벡터 하나로 압축하므로 정보 손실이 큽니다. 크로스 인코더는 후보마다 전체 순전파를 다시 돌려야 해 대규모 코퍼스에 쓰기 어렵습니다. ColBERT는 문서 토큰 벡터를 오프라인에 미리 계산해 두고, 쿼리 토큰과의 상호작용만 추론 시점에 수행해 둘 사이를 메웁니다.

ColBERT의 MaxSim과 인덱스 비용

ColBERT(Khattab & Zaharia, 2020)의 핵심은 MaxSim 점수입니다. 쿼리의 각 토큰이 문서 전체 토큰 중 가장 유사한 하나를 골라, 그 유사도를 모두 더합니다.

text
S(Q, D) = Σ_i  max_j  (Q_i · D_j)
Q_i: 쿼리 i번째 토큰 벡터, D_j: 문서 j번째 토큰 벡터

쿼리의 모든 토큰이 투표권을 가지므로 다의어·복합 질의에 강하고, 문서 쪽은 미리 계산돼 있어 근사 최근접(ANN) 인덱스를 쓸 수 있습니다. 대신 토큰마다 벡터를 저장해 인덱스가 커집니다. 원 ColBERT는 140M 패시지 기준 154 GiB를 요구했습니다(Khattab & Zaharia, 2020).

ColBERTv2(Santhanam et al., 2022)는 이 비용을 두 기법으로 줄입니다. 크로스 인코더를 교사로 쓰는 증류(distillation)로 품질을 높이고, 각 토큰 벡터를 centroid 인덱스와 양자화된 잔차로 인코딩하는 잔차 압축(residual compression)으로 저장 공간을 줄입니다. 결과적으로 인덱스가 1625 GiB로 610배 작아졌고 검색 품질 손실은 최소였습니다(Santhanam et al., 2022).

그 위에 얹는 검색 엔진 PLAID(Santhanam et al., 2022)는 centroid로 후보를 먼저 좁힌 뒤 좁혀진 문서에만 전체 MaxSim을 수행합니다. 유사 문서의 토큰 벡터가 같은 centroid 근처에 몰리는 성질을 이용해, 멀리 떨어진 centroid의 문서는 MaxSim 경쟁에서 질 확률이 낮다고 보고 건너뜁니다. 140M 패시지 기준 GPU에서 2.57배, CPU에서 945배 빨라졌으며 품질 손실은 없었다고 보고됩니다(Santhanam et al., 2022).

LBNL: 인코딩과 상호작용의 순서를 뒤집기

ColBERT는 문서를 독립 인코딩한 뒤 매칭하므로 쿼리-문서 간, 문서-문서 간 문맥을 공유하지 못합니다. jina-reranker-v3(Jina AI, 2025)의 LBNL(Last but Not Late) interaction은 이 순서를 뒤집습니다. 쿼리와 여러 후보 문서를 하나의 공유 컨텍스트에 넣어 causal self-attention으로 먼저 상호작용시킨 뒤, 지정된 토큰 위치에서 임베딩을 뽑습니다.

text
q̃ = 쿼리 위치의 최종 hidden state
d̃_i = 문서 i의 지정 토큰 위치 hidden state
score_i = cos(MLP(q̃), MLP(d̃_i))    # 다층 퍼셉트론: 1024 → 512 → 256

'먼저 독립 인코딩 후 매칭'하는 ColBERT와 달리, LBNL은 '먼저 같은 컨텍스트에서 상호작용 후 임베딩 추출'하는 역순입니다. Qwen3-0.6B(28 layer, hidden 1024, 131K 컨텍스트)를 기반으로 최대 64개 문서를 한 번의 순전파로 처리합니다.

검색 벤치마크 BEIR에서 상위 10개 순위 품질 지표인 nDCG@10 기준, jina-reranker-v3(0.6B)는 2.5배 큰 모델보다 높은 점수를 냈습니다(Jina AI, 2025).

모델파라미터BEIR nDCG@10
jina-reranker-v30.6B61.94
mxbai-rerank-large-v21.5B61.44
jina-reranker-v20.3B57.06
bge-reranker-v2-m30.6B56.51

문서 순서를 바꿔 넣는 민감도 테스트에서 내림차순 61.94, 오름차순 61.52, 무작위 62.54로 편차가 작았습니다(Jina AI, 2025). listwise 방식에서 흔한 위치 편향이 이 구조에서는 완화됐다는 신호입니다. 대신 공유 컨텍스트라 131K 토큰 한도에 따라 문서 수·길이 제약이 남고, 이는 사전 인덱싱이 가능한 순수 late interaction과는 다른 제약 조건입니다.

Listwise LLM 리랭킹과 위치 편향

또 다른 흐름은 LLM에게 후보 리스트 전체를 주고 순서를 직접 정하게 하는 listwise 리랭킹입니다. 후보가 프롬프트 길이를 넘으면 슬라이딩 윈도우로 나눠 반복 처리합니다.

python
window_size = 20
stride = 10
# 리스트 뒤쪽부터 앞쪽으로 윈도우를 겹쳐가며 재정렬
for start in range(len(candidates) - window_size, -stride, -stride):
    window = candidates[start:start + window_size]
    reranked = llm_listwise_rank(query, window)
    candidates[start:start + window_size] = reranked

이 구조에는 위치 편향이 있습니다. Qiao et al.(2026)은 위치 편향을 '리스트 후반부 문서는 관련성이 높아도 상위로 이동할 확률이 낮아지는 현상'으로 정의합니다. 원인은 둘입니다. attention이 앞쪽 토큰에 강하게 반응하는 아키텍처적 편향과, 훈련 데이터에서 관련 문서가 앞쪽에 편중돼 모델이 위치를 관련성의 대리 신호로 학습하는 문제입니다. 슬라이딩 윈도우 자체도 뒤쪽 문서가 앞으로 오려면 여러 이동을 거쳐야 하므로 편향을 더합니다.

2026년의 세 연구는 서로 다른 층위에서 이 문제에 접근합니다. 개입하는 지점이 학습·아키텍처·표현으로 나뉩니다.

방법개입 층위핵심 메커니즘
DebiasFirst (Qiao et al.)학습역성향 스코어링으로 위치별 기여도 재가중치 + 위치 인식 데이터 증강
InvariRank (Bito et al.)아키텍처attention mask와 회전 위치 임베딩(RoPE)으로 순열 불변성 확보, 한 번의 순전파로 처리
RRK (Déjean & Clinchant)표현문서를 고정 길이 다중 토큰으로 압축, 균일 표현이 위치 의존성을 부수적으로 완화

Abdallah et al.(2025, EMNLP Findings)의 22개 방법 비교는 이 편향이 특정 논문의 현상이 아니라 LLM 기반 리랭커 전반의 패턴임을 뒷받침합니다. 같은 연구는 LLM 리랭커가 익숙한 벤치마크에서는 강하지만 처음 보는 질의 분포에서는 일반화가 들쭉날쭉하다고 지적합니다. 위치 편향이 순수한 위치 문제만이 아니라 관련성 판단의 일반화 실패와 얽혀 있을 수 있다는 뜻입니다.

실무에서는 자체 리랭커의 편향을 정량화할 수 있습니다. 같은 후보 집합을 순서만 바꿔 여러 번 입력한 뒤 상위 K 결과의 일관성을 재면 됩니다. 편차가 크면 그 리랭커는 1단계 검색기가 관련 문서를 뒤쪽에 둔 경우를 교정하지 못한다는 신호입니다.

정리

리랭킹 구조의 핵심 축은 쿼리와 문서를 언제 만나게 하느냐입니다. ColBERT는 문서를 토큰 벡터로 보존하고 MaxSim으로 매칭해 크로스 인코더의 정밀도와 바이인코더의 속도 사이를 메우되, 잔차 압축과 PLAID로 인덱스 비용과 지연을 관리합니다. jina-reranker-v3의 LBNL은 인코딩과 상호작용의 순서를 뒤집어 0.6B 모델로 2.5배 큰 모델을 앞섰지만, 공유 컨텍스트라 문서 수·길이 제약이 남습니다. listwise LLM 리랭킹은 문서 간 맥락을 한 번에 반영하는 대신 위치 편향을 안고 있고, 이는 학습·아키텍처·표현 세 층위에서 동시에 다뤄질 만큼 구조적입니다. 프로덕션에서는 순서를 바꿔 입력한 결과의 일관성으로 편향을 먼저 진단하고, 코퍼스 규모와 지연 예산에 맞춰 late interaction과 LBNL 중 하나를 고르는 편이 현실적입니다.