Langchain RAG 프로세스에서 retriever 에 설정할 수 있는 파라미터
LangChain 에서 벡터 DB를 생성하고 retriever 를 설정할 때 아래와 같이 사용합니다.
# 벡터 저장소 구축 (Vector Database) vector_store = FAISS.from_documents(documents=splits, embedding=embeddings) # 쿼리 저장소 검색을 위한 retriever 생성 retriever = vector_store.as_retriever( search_type='mmr', search_kwargs={'k': 5, 'fetch_k': 50} )
vector_store.as_retriever() 함수는 벡터 데이터베이스를 검색할 수 있도록 retriever 를 반환합니다. 이때 함수에 다양한 파라미터를 제공하여 검색 동작을 세밀하게 조절할 수 있습니다.
search_type
- “similarity” (default)
- 쿼리 벡터와 가장 유사한 문서를 검색
- 코사인 유사도나 유클리드 거리 등을 사용
- 일반적인 정보 검색에 적합
- “mmr”
- Maximum Marginal Relevance
- 관련성과 다양성의 균형을 맞춰 문서를 검색
- 쿼리와 유사한 문서를 선택하면서 선택된 문서와는 다른 문서도 선별
- “similarity_score_threshold”
- 지정된 유사도 점수 이상의 문서만 반환
- 높은 정확도가 요구되는 검색에 적합
- “euclidean_distance”
- 유클리드 거리를 사용하여 가장 가까운 벡터를 선택
- “sep”
- Semantic Ever-Pushing
- 뉴런 검색 알고리즘의 일종으로, 더 정확한 검색 결과를 제공
- 쿼리와 문서 간의 의미적 관계를 고려하여 검색
search_kwargs 에 입력할 수 있는 파라미터는 아래와 같습니다.
- fetch_k
- 후보 집합으로 선택되는 문서의 수 (Default: 20)
- top_k
- 검색 결과 상위 몇 개를 반환할지 지정 (Default: 4)
- 검색 결과 상위 3개를 반환하려면 top_k=3으로 설정
- score_threshold
- 최소 유사도 점수를 설정하여, 이 값보다 낮은 점수를 가진 결과는 제외 (Default: 0.5, 0~1)
- 유사도 점수가 0.8 이상인 결과만 반환하려면 score_threshold=0.8로 설정
- lambda_mult
- MMR 타입을 사용한 경우 관련성과 다양성의 정도를 조정 (Default: 0.5, 0~1)
- filter
- 검색 결과를 필터링하기 위한 함수를 제공
- 특정 조건을 만족하는 문서만 반환하도록 설정
- return_embedding
- 검색 결과와 함께 임베딩 벡터를 함께 반환할지 여부를 지정
- use_embeddings
- 검색 시 임베딩을 사용할지 여부를 지정
이 중 filter 파라미터는 아래처럼 사용합니다.
# 메타데이터 기반 필터링 filter={"category": "science", "date": {"$gte": "2023-01-01"}} # 논리 연산자를 사용한 복합 필터 filter={"$and": [{"category": "tech"}, {"$or": [{"author": "John"}, {"author": "Jane"}]}]} # 범위 기반 필터링 filter={"rating": {"$gte": 4, "$lte": 5}} # 정규 표현식 필터 filter={"title": {"$regex": "^Machine Learning"}} # 존재 여부 필터 filter={"summary": {"$exists": True}}
각각의 파라미터를 아래처럼 변경해가며 테스트할 수 있습니다.
- 정확도 vs. 속도
- fetch_k, top_k를 줄이고 score_threshold를 높이면 검색 속도는 빨라지지만, 정확도는 낮아질 수 있습니다.
- 특정 문서 필터링
- filter 함수를 사용하여 원하는 조건에 맞는 문서만 검색할 수 있습니다.
- 임베딩 활용
- return_embedding=True를 설정하여 임베딩 벡터를 활용한 추가적인 분석을 수행할 수 있습니다.
벡터 데이터베이스 종류에 따라 추가적인 파라미터를 제공하기도 합니다.
- Faiss: nprobe, metric_type 등 Faiss 특화 파라미터
- Pinecone: include_metadata 등 Pinecone 특화 파라미터