Study/AI
[LangChain] 검색기, Retriever의 search_type, search_kwargs 알아보기
728x90
반응형
as_retreiever 메서드로 VectorStoreRetriever를 초기화하고 반환한다.
여기서 search_type과 search_kwargs를 설정할 수 있는데, 설정값에 따라 검색되는 응답이 달라진다.
- 벡터 공간에서 쿼리 벡터와 문서 벡터의 유사도를 기반으로 순위 산정
- 가장 유사한 문서가 먼저 반환
- search_kwargs={"k": 1} 의 방식으로 검색 대상 갯수 설정 가능
- search_kwargs={"filter": {"tags": ["news"]}} 를 통해서 특정 필터 적용 가능
- 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("세계 각국의 금리 인상 이유는?")
=> 한국, 미국, 일본의 금리 인상을 가져올 확률이 높아진다.
- 유사도 점수 임계값을 설정, 임계값 이상의 점수를 가진 문서만 반환
- 쿼리와 관련성이 낮은 문서를 제외,검색 결과의 정확도 향상
- search_kwargs={"score_threshold": 0.5} 의 방식을 통하여 임계값 설정
파라미터사용 가능한 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
반응형
'Study > AI' 카테고리의 다른 글
[LangChain] Hub와 RAG실습 (4) | 2025.08.24 |
---|---|
[LangChain] MultiQueryRetriever, 사용자 질문 확장하기 (0) | 2025.08.24 |
[LangChain] 검색기, Retriever 개념. similarity_search와 차이점 (0) | 2025.08.24 |
[LangChain] 벡터스토어(VectorStore) ChromaDB, FaissDB 저장하고 불러오기 (1) | 2025.08.21 |
[LangChain] 벡터스토어(VectorStore)란, Chroma DB (1) | 2025.08.21 |
댓글