1차 검색이 빠르게 가져온 후보 문서를 더 꼼꼼한 모델로 다시 채점해 순위를 새로 매기는 단계로, 서류 전형 뒤에 면접을 보는 것과 비슷하다. RAG에서 LLM에 넘길 문서를 고를 때 쓰며, 답변 품질을 높이는 가장 손쉬운 개선 지점으로 꼽힌다.
| 단계 | 방식 | 특징 |
|---|---|---|
| 1차 검색 | 질문과 문서를 따로 벡터로 바꿔 비교 | 빠르지만 미묘한 차이를 놓친다 |
| 리랭킹 | 질문과 문서를 붙여 함께 읽고 채점 | 정확하지만 느리다 |
벡터 검색은 질문과 문서를 한 번도 같이 읽지 않는다. 그래서 "파이썬 3.12에서 제거된 기능"을 물었는데 "파이썬 3.12의 새 기능" 문서가 1등으로 나오는 일이 생긴다. 리랭커는 둘을 함께 읽기 때문에 부정, 조건, 버전 차이 같은 것을 훨씬 잘 잡아낸다.
대신 리랭커는 질문이 들어올 때마다 후보 수만큼 모델을 돌려야 해서 전체 문서에 쓰기엔 너무 느리다. 그래서 빠른 검색으로 넓게 찾고, 리랭커로 좁히는 조합이 표준이 됐다.
구성은 단순하다. 벡터 검색과 키워드 검색(BM25)을 섞어 후보를 넉넉히 가져오고, 리랭커로 점수를 매긴 뒤 상위 몇 개만 LLM에 넘긴다.
| 상황 | 이렇게 쓴다 |
|---|---|
| API를 쓸 수 있을 때 | Cohere Rerank에 query, documents, top_n을 보내면 relevance_score 순으로 돌려준다. 한국어도 된다 |
| 데이터를 밖으로 못 보낼 때 | 오픈 리랭커를 Sentence Transformers의 CrossEncoder로 불러 직접 돌린다 |
| LangChain을 쓸 때 | ContextualCompressionRetriever에 리랭커를 끼우면 기존 검색기는 그대로 둔다 |
표 형태 데이터는 YAML 문자열로 바꿔 넣는 것이 좋다(Cohere 문서 권장).
Anthropic 실험에서 키워드 검색을 더하고 리랭킹까지 얹자 검색 실패율이 크게 떨어졌다. 후보 150개를 다시 매겨 상위 20개만 쓰는 구성이었다.
상위 20개 청크 안에 필요한 문서가 없었던 비율. 낮을수록 좋다.
후보를 많이 넣을수록 정확해지지만 느려지고 비싸진다. 실시간 챗봇은 후보를 줄이고, 밤에 돌리는 배치 분석은 늘리면 된다. 효과는 실제 사용자 질문 50~100개에 정답 문서를 표시해 두고, 리랭킹 전후로 상위 5개 안에 정답이 들어오는 비율을 비교해 보면 알 수 있다. 약관이나 기술 문서처럼 비슷한 문서가 많을수록 효과가 크다.
점수가 낮은 문서는 버리는 게 좋다. 상위 5개를 무조건 넘기지 말고 relevance_score에 기준선을 둔다. 남는 문서가 없으면 "관련 자료를 찾지 못했다"고 답하게 하면 엉뚱한 근거로 지어낸 답이 줄어든다. 컨텍스트 창이 넓어져도 관련 없는 문서가 많으면 비용이 늘고 모델이 핵심을 놓치기 쉽다.
가장 흔한 건 RAG 챗봇에서 LLM 직전에 끼우는 방식이다. 기존 검색은 그대로 두고 후보를 다시 줄 세우기만 하면 되니, 검색 품질이 아쉬울 때 가장 먼저 붙여 본다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 사내 문서 검색·Q&A 챗봇 | 벡터·키워드 검색으로 후보를 넉넉히 모은 뒤 리랭커로 상위 몇 개만 골라 LLM에 근거로 넘긴다 |
| 약관·기술 문서 질의응답 | 비슷한 문서가 많아 1차 검색이 헷갈릴 때, 버전·조건 차이를 리랭커로 걸러 낸다 |
| 사이트·쇼핑몰 검색 | 기존 검색 결과 상위 일부만 다시 채점해 질문 의도에 맞는 결과를 위로 올린다 |
| 배치 분석·리서치 | 속도 부담이 없으니 후보를 많이 넣어 다시 매기고, 기준선 아래 문서는 버린다 |