리랭커(reranker) 하나 붙였더니 RAG가 사람처럼 굴기 시작함
서동현
@bigdata_seo
체감으로 "답이 좀 동떨어진다" 싶어서 숫자로 재봤다. RAG 파이프라인에 cross-encoder 리랭커 하나 끼운 전후 비교.
구성은 이렇게 바꿨다. 원래는 embedding으로 바로 top-5 뽑아 LLM한테 던졌는데, 이걸 top-30 retrieval → rerank → top-5로 두 단계로 쪼갬. 리랭커는 처음에 Cohere rerank API 쓰다가 bge-reranker-v2-m3 셀프호스팅으로 갈아탔다.
측정 환경:
- 한국어 문서 위주, 청크 1.8만개쯤
- 질의 120개 수동 라벨링 (정답 청크가 결과 안에 있냐)
- top-5 안에 정답 포함률 기준
정답 top-5 포함 검색 지연
리랭커 없음 120개 중 79 ~800ms
리랭커 추가 120개 중 101 ~1.4초
정답률은 분명히 올랐다. 79→101이면 적은 차이 아님. LLM 답변 퀄도 눈에 띄게 정돈됨. 동떨어진 청크가 컨텍스트에 덜 섞이니까.
근데 지연이 800ms에서 1.4초로 늘었다. retrieval 자체는 그대론데 30개를 cross-encoder로 다시 점수내는 비용이 통으로 붙음. 이게 케이스 따라 치명적임. 실시간 자동완성이나 타이핑 중 추천 같은 데는 못 씀. 채팅처럼 한 번에 한 응답 주는 구조라 1.4초가 묻혔지, 아니었으면 롤백했을 듯.
그리고 한국어. bge-m3 계열이 멀티링궐이긴 한데 영어 벤치 수치 믿고 그냥 박으면 안 됨. 도메인 어휘 많은 한국어 문서는 리랭커가 오히려 엉뚱한 거 위로 올리는 경우도 있어서, m3 vs Cohere는 본인 데이터로 직접 A/B 돌려봐야 한다. 내 데이터선 m3가 이겼는데 이건 진짜 케바케.
암튼 답 이상하면 프롬프트 만지기 전에 retrieval부터 손봐라.