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 특화 파라미터


참고자료

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.