728x90
이 글에서는 RetrievalQA 또는 ConversationalRetrievalChain의 성능을 높이기 위한
검색 튜닝 기법을 정리합니다.
특히 top-k 조정, score_threshold 필터링을 중심으로 다룹니다.
🎯 목표
- top-k로 검색 결과 개수 조절
- score_threshold로 유사도 기준 필터링
- search_type을 이용해 다양한 검색 방식 실험
📦 검색 튜닝이 필요한 이유
문제 상황 | 원인 |
불필요한 문서가 답변에 포함됨 | top-k가 너무 큼 |
관련 없는 답변이 생성됨 | 유사도 기준 없음 |
응답 속도 저하 | 과도한 문서 입력으로 LLM이 느려짐 |
➡️ 이를 해결하기 위해 검색기의 파라미터 조정이 필요합니다.
🔧 Step 1. Retriever 구성 시 top-k 설정
retriever = vectordb.as_retriever(
search_kwargs={"k": 1} # 가장 유사한 문서 1개만 반환
)
✅ k 값이 작을수록 정확도↑, 속도↑, 하지만 정보 손실 가능
✅ k 값이 클수록 정보량↑, 하지만 GPT 응답이 산만해질 수 있음
🧪 Step 2. score_threshold로 유사도 필터링
retriever = vectordb.as_retriever(
search_kwargs={
"k": 5, # 최대 5개 검색
"score_threshold": 0.3 # 유사도 0.3 이하인 경우만 포함 (낮을수록 더 유사)
}
)
score_threshold는 일부 VectorStore에서만 지원합니다.
Chroma에서는 .similarity_search_with_score()를 사용할 경우 직접 필터링할 수 있습니다.
💬 실전 코드 예시 (Chroma + score 출력)
# Chroma 검색 결과에 점수 포함 (manual filtering 가능)
results = vectordb.similarity_search_with_score("상품 테이블은 뭐야?", k=3)
# 결과 출력
for i, (doc, score) in enumerate(results):
print(f"[{i+1}] 점수: {score:.4f}") # 유사도 거리 값 (낮을수록 유사)
print(doc.page_content + "\n")
✅ 유사도는 Cosine Distance 기반이며
0.0 ~ 0.3 범위는 매우 유사한 문서로 간주됩니다.
⚙️ Step 3. 다양한 검색 타입 실험하기
retriever = vectordb.as_retriever(
search_type="similarity", # 기본값: 유사도 기반 검색
search_kwargs={"k": 3}
)
search_type | 설명 |
"similarity" | 가장 유사한 순으로 정렬 |
"mmr" | Maximal Marginal Relevance: 다양성과 유사도 균형 조절 |
retriever = vectordb.as_retriever(
search_type="mmr", # 다양한 문서 포함
search_kwargs={"k": 4, "lambda_mult": 0.8} # 다양성 조절 계수
)
📎 요약 및 핵심 정리
- top-k는 반환 문서 수를 조절하는 핵심 파라미터입니다.
- score_threshold를 활용하면 불필요한 문서를 걸러낼 수 있습니다.
- search_type을 통해 정확도 또는 다양성 중심 검색 방식 선택이 가능합니다.
- 성능 최적화를 위해선 데이터 성격에 맞게 실험과 조정이 필수입니다.
728x90
'LLM & Generative AI > RAG in Practice' 카테고리의 다른 글
[LangChain RAG 구축 시리즈 Ep.22] 📊 RAG 성능 평가 지표와 테스트 전략 설계하기 (1) | 2025.04.05 |
---|---|
[LangChain RAG 구축 시리즈 Ep.21] 🧬 멀티 문서 및 멀티 컬렉션 처리 전략 설계하기 (1) | 2025.04.05 |
[LangChain RAG 구축 시리즈 Ep.19] 🧠 대화형 QA 시스템: ConversationalRetrievalChain 구성하기 (1) | 2025.04.05 |
[LangChain RAG 구축 시리즈 Ep.18] 💬 RetrievalQA 체인을 통해 문서 기반 답변 생성하기 (1) | 2025.04.05 |
[LangChain RAG 구축 시리즈 Ep.17] 🔍 ChromaDB에서 문서 검색 및 Retriever 구성하기 (1) | 2025.04.05 |