Study/AI

[LangChain] 검색기, Retriever의 search_type, search_kwargs 알아보기

hongeeii 2025. 8. 24.
728x90
반응형

search_type, search_kwargs

as_retreiever 메서드로 VectorStoreRetriever를 초기화하고 반환한다.
여기서 search_type과 search_kwargs를 설정할 수 있는데, 설정값에 따라 검색되는 응답이 달라진다.

search_type

"similarity" : 유사도 중시 (default 값)

  • 벡터 공간에서 쿼리 벡터와 문서 벡터의 유사도를 기반으로 순위 산정
  • 가장 유사한 문서가 먼저 반환
  • search_kwargs={"k": 1} 의 방식으로 검색 대상 갯수 설정 가능
  • search_kwargs={"filter": {"tags": ["news"]}} 를 통해서 특정 필터 적용 가능

"mmr" (Maximum Marginal Relevance): 다양성 중시

  • mmr(Maximal Marginal Relevance)은 단순히 유사한 문서만 가져오는 것의 한계를 해결하기 위한 검색 기법
  • 왜 mmr이 필요한가? 보통 "similarity" 검색은 쿼리와 가장 유사한 순서대로 문서를 가져온다.
    문제는 비슷한 내용의 문서만 몰려서 중복되는 경우가 많다.
    ex> "금리 인상 이유" 검색 시 →
    문서1: 미국 금리 인상 기사
    문서2: 미국 금리 인상 기사 (다른 신문사지만 거의 같은 내용)
    문서3: 미국 금리 인상 기사 (또 다른 매체)
    👉 다양성이 부족하다.
  • MMR은 두 가지를 동시에 고려한다.
    • 쿼리와의 유사도 (Relevance) → 사용자가 원하는 주제와 얼마나 관련 있는가?
    • 선택된 문서들과의 차별성 (Diversity) → 이미 뽑힌 문서들과 얼마나 다른가?
  • MMR의 주요 매개변수:
    • query: 사용자로부터 입력받은 검색 쿼리
    • k: 최종적으로 선택할 문서의 수. 이 매개변수는 반환할 문서의 총 개수를 결정.
    • fetch_k: MMR 알고리즘을 수행할 때 고려할 상위 문서의 수. 이는 초기 후보 문서 집합의 크기를 의미하며, 이 중에서 MMR에 의해 최종 문서가 k개 만큼 선택된다.
    • lambda_mult: 쿼리와의 유사성과 선택된 문서 간의 다양성 사이의 균형을 조절한다. 1은 유사성만을 고려하며 0은 다양성만을 최대화한다.
retriever = db.as_retriever(
    search_type="mmr",
    search_kwargs={
        "k": 3,          # 최종 반환 3개
        "fetch_k": 10,   # 후보 10개 중에서
        "lambda_mult": 0.5  # 유사도/다양성 균형
    }
)

result = retriever.invoke("세계 각국의 금리 인상 이유는?")
 

=> 한국, 미국, 일본의 금리 인상을 가져올 확률이 높아진다.

similarity_score_threshold

  • 유사도 점수 임계값을 설정, 임계값 이상의 점수를 가진 문서만 반환
  • 쿼리와 관련성이 낮은 문서를 제외,검색 결과의 정확도 향상
  • search_kwargs={"score_threshold": 0.5} 의 방식을 통하여 임계값 설정

search_kwargs

파라미터사용 가능한 search_type설명예시

k 모든 타입 (similarity, mmr, similarity_score_threshold) 최종적으로 반환할 문서 개수 "k": 3
filter 모든 타입 문서 metadata 기반 필터 조건 "filter": {"source": "news"}
fetch_k mmr 후보군 개수 (이 중에서 다양성을 고려해 최종 k개 선택) "fetch_k": 10
lambda_mult mmr 유사도 vs 다양성 가중치 (0~1)
0 = 다양성 ↑, 1 = 유사도 ↑
"lambda_mult": 0.5
score_threshold similarity_score_threshold 문서를 포함할 최소 유사도 점수 "score_threshold": 0.75
728x90
반응형

추천 글