생성 모델이 공유 프리필로 직접 후보를 리랭킹한다
Glance: The Generator Is Its Own Reranker
무엇인가
RAG 시스템은 보통 후보 패시지를 고르는 리랭커와 답을 쓰는 생성기를 별도 모델로 둔다. 그러면 모델을 두 개 상주시켜야 하고, 같은 패시지를 리랭커와 생성기가 각각 처리한다. Glance는 생성기가 어차피 패시지를 읽는다는 점에 주목해, 생성기 백본 하나에 경량 결정 어댑터와 포인터 헤드를 붙여 후보 패시지의 관련도를 직접 채점한다. 별도 리랭커 백본을 없애고, 하나의 9B 백본이 생성·일반 결정·리랭킹을 함께 맡는 것이 핵심 주장이다. 결정 스킬 하나를 추가할 때 드는 메모리는 약 0.1GiB라고 밝힌다.
어떻게 동작하나
구조는 결정 모드와 멀티 프로브 패킹으로 이뤄진다. 상태(state)에 후보 패시지들을 넣고, 각 패시지마다 짧은 질의 프로브를 붙인 뒤, 포인터 헤드가 <decide> 위치의 은닉 상태와 각 선택지 위치의 은닉 상태를 비교해 소프트맥스로 점수를 낸다. 학습되는 것은 rank-16 LoRA와 포인터 헤드뿐이고 백본은 고정된다. packed_all은 상태에 모든 패시지를 넣고 각 프로브가 자기 패시지에 대해 질문하게 하며, packed_q는 질의를 상태로, listwise는 패시지들을 선택지로 둔다. 단일 패스는 후보 패시지를 한 번만 프리필한 뒤 약 30토큰짜리 프로브 k개를 배치로 이어 붙이는 방식이라, 질의-패시지 쌍을 각각 프리필하지 않는다. 다만 packed_all에서는 각 프로브가 모든 패시지를 보므로 점수가 통계적으로 독립은 아니다. 백본은 Gated DeltaNet 선형 어텐션과 풀 어텐션을 3:1로 섞은 하이브리드이고, 선형 어텐션 레이어는 분기별 격리가 안 되므로 상태 끝의 레이어 캐시를 복사해 각 프로브를 시작한다. 그래서 DeltaNet 상태는 순서를 요약해 패시지별 캐시를 임의 순서로 붙일 수 없고, 주 파이프라인은 선택 패시지를 다시 프리필한다. 주 파이프라인은 어댑터를 모든 토큰에 켜고 상위 n개를 고른 뒤 어댑터를 끄고 다시 프리필해 답한다. Glance-Activated는 상태 패스는 기본 가중치로 돌리고 프로브에만 어댑터를 켜, 원래 후보 캐시에서 생성이 이어지게 한다.
무엇과 다른가
훈련은 기존 일반 결정 어댑터에서 출발해 MS MARCO 4,000개 질의로 진행한다. 레코드마다 정답 1개와 BM25 하드 네거티브 7~19개를 섞어 packed_all로 묶고 프로브별 이진 라벨을 준다. 1에포크 500스텝, 55,598개 라벨 프로브, 7.7M 포워드 토큰, LoRA rank 16, 배치 8, bf16, B200 한 장에서 39분, 최대 21GiB를 썼고 BEIR·HotpotQA 데이터는 학습에 쓰지 않았다. 제로샷 일반 결정 어댑터는 SciFact에서 packed_all 0.715로, 같은 9B 모델의 패시지별 개별 호출 0.729와 교차 인코더 0.721 사이에 들어왔고 개별 호출보다 3.6배 빨랐다. NFCorpus에서는 packed_all이 0.341로 교차 인코더 0.326과 개별 호출 0.323을 앞섰다. 39분 학습 후 packed_all은 두 데이터셋 모두에서 가장 좋았고, 교차 인코더보다 SciFact +0.020(0.741), NFCorpus +0.019(0.345) nDCG@10 높았다. 20~80개 패시지 레코드로 14분 더 학습한 trained-long은 같은 k=20 설정에서 SciFact 0.749, NFCorpus 0.346을 기록했다.
어떻게 쓰나
후보 수를 늘리는 실험은 SciFact 첫 100개 질의, 100단어 패시지로 한다. 제로샷 어댑터는 k=20에서 정점을 찍고 k=100에서 무너지지만, MS MARCO로 학습한 어댑터는 k가 커질수록 좋아져 k=100(한 번에 21.6k 토큰)에서 0.682로 같은 100개 후보를 채점한 교차 인코더 0.637을 앞섰다. trained-long은 k=100에서 0.697까지 올라 교차 인코더보다 +0.060이었고 질의당 1.05초가 걸렸다. k=200(43.4k 토큰)은 한 호출로는 들어가지 않아 Kev의 청크 경로로 0.717을 냈고 교차 인코더는 같은 100개 질의에서 0.659였다. 대신 메모리는 k×문맥 길이로 늘어 k=100에서 56GiB를 쓰고 64GiB 제한에서 제로샷 단일 호출은 k=200에서 OOM이 난다. 질의를 묶는 배칭도 현재 구현에서는 처리량을 B=1 2.87질의/초에서 B=16 1.57질의/초로 떨어뜨리고 B=32에서 OOM이 난다. 교차 인코더는 질의당 31~60ms로 여전히 훨씬 빠르다.
전제와 한계
HotpotQA distractor 300문항(문항당 10개 문단, 정답 2개)에서는 같은 9B 백본이 리랭킹과 생성을 모두 맡는다. 제로샷 Glance의 상위 3개 문단으로 답했을 때 F1은 0.718로 bge-reranker-v2-m3 상위 3개를 쓴 0.683보다 높았고, 10개 문단을 모두 준 0.716과 비슷했다. 교차 인코더가 정답 문단을 더 많이 회수했음에도(R@2 0.863 대 0.762) 생성기가 쓸 수 있는 문맥을 고른 결과다. 어댑터를 켠 채 답하면 F1 0.757로 정답 문단 상한과 0.032 차이까지 좁혀지지만, 이는 답변 스타일 효과가 섞여 있다. 교차 인코더 문맥에 같은 어댑터-온 생성기를 써도 Glance 문맥이 F1 +0.055(95% CI 0.018~0.093), EM +0.043(0.003~0.083) 앞섰다. 학습된 어댑터로는 정답 회수가 R@2 0.897 대 0.863으로 높아졌고, 어댑터를 끈 같은 생성기에서 상위 3개 문맥이 F1 0.684에서 0.729로 +0.045(CI 0.014~0.076) 개선됐다. 저자들은 학습 라벨이 답변 품질이 아니라 패시지 관련도라는 점을 분명히 한다.
서빙 쪽에서는 어댑터를 병합하지 않고 둔 채 모드를 바꾼다. 실제 10패시지 리랭킹과 24토큰 생성 사이를 20번 오갈 때 어댑터 끄기 진입은 중앙값 11ms, 복귀는 2.8ms였고, 켤 때마다 확률이 비트 단위로 같고 끌 때마다 같은 탐욕 답이 나왔다. 할당 GPU 메모리는 16.77GiB(백본 14.78, LoRA 0.08, LM head 1.89)였다. 기본 채팅·일반 결정·리랭킹 세 모드를 백본 하나에 올릴 수 있고 추가 결정 스킬당 약 0.1GiB가 든다. 다만 JevBench 231문항에서 일반 어댑터는 184개(79.7%), 리랭킹용으로 특화한 어댑터는 175개(75.8%)를 맞혀 9개(그중 7개가 hard)를 잃었다. Glance-Activated는 상태 캐시를 기본 모델과 비트 단위로 같게 만들어, 100개 HotpotQA 문항에서 상태 패스 64ms, 프로브 85ms(R@3 0.97) 후 같은 캐시를 이어 답해 EM/F1 0.61/0.750, 재프리필 0.59/0.754, 답변 지연 138ms 대 181ms를 냈다. 이 모드에서는 생성기가 상위 3개가 아니라 10개 후보 전부를 본다. vLLM 프로토타입은 채팅 4개와 결정 19행을 0.76초에 처리했고(채팅만 0.43초), Kev 대비 확률 평균 차 0.006, 400개 중 4개 결정이 뒤집혔다.
개발자에게 이 논문은 RAG 서빙에서 리랭커를 별도 모델로 상주시키지 않고 생성기 백본에 작은 어댑터를 붙이는 선택지를 보여준다. 특히 같은 모델로 채팅·결정·리랭킹을 전환해야 하거나, 후보 패시지를 이미 생성기가 읽는 구조라면 메모리와 모델 수를 줄이는 데 참고할 만하다. 다만 교차 인코더가 질의당 수십 ms로 더 빠르고, 후보 수를 늘리면 현재 구현은 캐시 복사 때문에 메모리가 급증한다. 실무 적용 전에는 지연 요구사항, k=20을 넘는 후보 수, bf16 커널·서빙 엔진 차이로 인한 점수 변동을 직접 측정해야 한다.
저자들이 밝힌 한계는 분명하다. 수백 질의 규모의 두 BEIR 데이터셋과 한 QA 데이터셋, 하이브리드 9B 백본 한 계열만 평가한 개념 증명이다. BEIR 차이는 유의성 검정을 하지 않았고, 학습된 어댑터로 패시지별 개별 호출 베이스라인을 다시 돌리지도 않았다. 제로샷 어댑터는 k=20을 넘으면 성능이 떨어지고 k=200에서 0.505로 붕괴하며, 질의 배칭은 현재 처리량을 오히려 낮춘다. Activated와 캐시 재사용 결과는 100문항 단일 시드이고, 비트 단위 캐시 검증은 0.8B Qwen 모델에서 했다. 캐시 재사용 시 생성기는 리랭킹 상위 집합이 아니라 모든 후보를 본다. 어댑터를 켠 채팅 품질은 소수 프롬프트로만 확인했고, 리랭킹 특화는 JevBench 9문항을 잃는다. 메모리는 k×문맥 길이로 늘고 vLLM 경로는 평균 0.006, 최대 0.10 확률 차이와 400개 중 4개 결정 뒤집힘이 있는 프로토타입이다.