11차시. Retriever 기초 실습
5. 실습 ② — Top-K 실험
출처: 원본 PDF 11차시_Retriever기초실습.pdf 11~12쪽 · 쪽 그림 11쪽 12쪽
감이 아니라 눈으로 확인하며 k를 정합니다.
📝 k값별 결과 관찰
def compare_k(question, ks=(1, 3, 5)):
print(f"질문: {question}")
print("=" * 58)
for k in ks:
pairs = store.similarity_search_with_relevance_scores(
question, k=k)
scores = [round(s, 3) for _, s in pairs]
# 기준(0.47) 미달 조각 개수 세기
low = 0
for s in scores:
if s < 0.47:
low += 1
print(f"k={k:<3} 점수={scores}")
print(f" 기준 미달(0.47) 조각: {low}개")
print()
compare_k("환불은 며칠 이내인가요?")
실행 결과
─────────────────────────────────────────────
질문: 환불은 며칠 이내인가요?
==========================================================
k=1 점수=[0.812]
기준 미달(0.47) 조각: 0개
k=3 점수=[0.812, 0.683, 0.601]
기준 미달(0.47) 조각: 0개
k=5 점수=[0.812, 0.683, 0.601, 0.354, 0.298]
기준 미달(0.47) 조각: 2개 ← 노이즈 시작💡 표에서 읽어낼 것
k=3까지는 전부 기준을 통과합니다.
k=5부터 관련 없는 조각이 섞이기 시작합니다.
k=10이면 7개가 노이즈입니다.
이 노이즈가 전부 프롬프트에 들어가서
→ 토큰 비용 3배
→ LLM이 헷갈림
→ 답변 품질 하락
👉
이 문서에는 k=3이 적절합니다. 질문 여러 개로 이 실험을 반복하면
내 문서에 맞는 k를 근거를 갖고 정할 수 있습니다.