Rerank란? RAG 성능을 높이는 5가지 방법 총정 리
검색 증강 생성(Retrieval-Augmented Generation, RAG)은 대규모 언어 모델(LLM)의 성능을 크게 향상시킬 수 있는 강력한 기술입니다. 하지만 RAG 시스템이 복잡해질수록 기본적인 검색과 생성만으로는 높은 수준의 성능을 달성하기 어려워집니다. 이때 Rerank라는 기술을 활용하면 RAG의 성능을 한 단계 더 끌어올릴 수 있습니다. 이 글에서는 Rerank의 개념과 RAG 성능 향상을 위한 5가지 주요 방법에 대해 자세히 알아보겠습니다.
Rerank란 무엇인가?
Rerank는 검색 결과의 순위를 재조정하는 과정을 말합니다. RAG 시스템에서 Rerank는 초기 검색 결과에서 가져온 문서들의 순위를 다시 매기는 역할을 합니다. 이를 통해 사용자의 질문과 가장 관련성 높은 문서들을 상위에 배치하여 LLM이 더 정확한 답변을 생성할 수 있도록 돕습니다.
Rerank의 핵심은 Cross-encoder 구조를 활용한다는 점입니다. 일반적인 벡터 검색에서 사용하는 Bi-encoder와 달리, Cross-encoder는 질문과 문서를 동시에 입력으로 받아 더 정확한 관련성 점수를 계산할 수 있습니다. 이를 통해 단순한 벡터 유사도 비교보다 훨씬 정교한 순위 조정이 가능해집니다.
RAG 성능을 높이는 5가지 Rerank 방법
1. 한국어 특화 Reranker 활용
한국어 RAG 시스템의 성능을 높이기 위해서는 한국어에 특화된 Reranker를 사용하는 것이 중요합니다. 예를 들어, BAAI/bge-reranker-large 모델을 한국어 데이터로 파인튜닝한 'Dongjin-kr/ko-reranker' 모델을 활용할 수 있습니다. 이 모델은 한국어의 특성을 잘 반영하여 더 정확한 순위 조정을 수행할 수 있습니다.
from transformers import AutoModelForSequenceClassification, AutoTokenizer
import torch
model_path = "Dongjin-kr/ko-reranker"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForSequenceClassification.from_pretrained(model_path)
def rerank(query, documents):
pairs = [[query, doc] for doc in documents]
inputs = tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512)
with torch.no_grad():
scores = model(**inputs, return_dict=True).logits.view(-1,).float()
return sorted(zip(documents, scores), key=lambda x: x[1], reverse=True)