inflearn logo
강의

講義

知識共有

RAGマスター:基礎から上級技法まで(feat. LangChain)

検索器 (Retrievers)

vectorstore의 as_retriever와 similarity_search는 같은 로직인가요?, 사용되는 검색 알고리즘은 뭔가요?

88

aytekin827

投稿した質問数 9

0

안녕하세요. 강의 잘 듣고 있습니다.

 

제목이 곧 질문인데요.

Chroma로 생성한 vectorstore객체의 as_retriever매서드와 similarity_search는 내부적으로 같은 알고리즘 혹은 로직을 사용하나요?

 

그렇다면 이 두가지 매서드의 차이점은 langchain을 사용할 때 편의성 차원에서 as_retriever가 더 좋다 이렇게 알고있으면 되는걸까요?

 

또한 내부에서 사용되는 검색 알고리즘은 어떤건지 알 수 있을까요?

 

감사합니다.

python 챗봇 llm langchain rag vectorstore as_retriever similarity_search

回答 2

0

pdstudio

안녕하세요. 판다스 스튜디오입니다.

 

먼저 as_retriever()similarity_search()는 같은 내부 로직을 사용합니다. as_retriever() 메서드는 vectorstore를 retriever 인터페이스로 변환하는 역할을 하며, 내부적으로는 여전히 vectorstore의 similarity_search 메서드를 호출합니다. 따라서 두 방법 모두 동일한 검색 알고리즘과 유사도 측정 방식을 사용한다고 보시면 됩니다.

차이점은 사용 방식과 편의성에 있습니다. similarity_search()는 vectorstore의 기본 검색 메서드로 직접적인 접근을 제공하는 반면, as_retriever()는 LangChain 에서 다른 컴포넌트와 통합 사용할 수 있는 표준화된 retriever 인터페이스를 제공합니다.

따라서, 편의성 차원에서는 as_retriever()가 더 유리합니다. RAG 파이프라인이나 체인 구성에서 다른 retriever들과 동일한 방식으로 사용할 수 있습니다.

 

검색 알고리즘의 경우 Chroma를 포함해서 많은 vectorstore들이 HNSW(Hierarchical Navigable Small World)라는 그래프 기반 인덱스 구조를 구현합니다. 구체적인 내부 구현은 각 vectorstore 제공업체에 따라 다를 수 있지만, 기본적인 원리는 같다고 보시면 됩니다.

 

감사합니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 아이테킨님.

LangChain의 vectorstore와 검색 방법에 관한 질문 주셨네요. 여기서 Chroma를 통한 vectorstore 객체의 as_retriever 메서드와 similarity_search 메서드는 내부적으로 유사한 로직을 사용하지만, 약간의 차이가 있습니다.

  1. as_retriever vs similarity_search:

    • similarity_search: 특정 쿼리 벡터와 데이터셋 내의 벡터 간의 유사도를 계산하여 가장 유사한 결과를 반환하는 방법입니다. 이는 주로 벡터 간 거리 혹은 유사도 점수를 계산하여 결과를 제공합니다.
    • as_retriever: 이는 similarity_search 기능을 포함할 수 있는 더 상위 레벨의 기능입니다. as_retriever는 사용자 인터페이스의 관점에서 데이터를 검색하기 위한 더 높은 수준의 편의성을 제공합니다. as_retriever는 검색 및 일치 항목을 보다 쉽게 사용할 수 있도록 해주는 래퍼입니다.
  2. 사용되는 검색 알고리즘:

    • 일반적으로 이런 검색에서는 코사인 유사도(Cosine Similarity), L2 거리(Euclidean Distance) 등의 벡터 유사도 측정 방법이 사용됩니다. 어떤 알고리즘이 선택될지는 벡터라이제이션 방식과 데이터셋의 특성에 따라 다를 수 있습니다.

기본적으로 이러한 메서드들은 검색의 편리함과 유연성을 제공하기 위해 설계되었습니다. as_retriever는 LangChain 내에서 API와 유사하게 사용할 수 있도록 지원하여 개발편의성을 높입니다.

관련 질문들에 대해서는 인프런의 LangChain을 활용한 검색기능에 대한 토론 게시물에서도 비슷한 내용을 다루고 있으니 참고해 보시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

테스트데이터셋 평가지표 값 문제

0

47

1

언어 감지 및 검색 라우팅

0

48

2

동영상이 검은 화면으로 나옵니다.

0

62

2

강의가 진행되지 않습니다.

0

61

2

'팀 단위 AI 업무 혁신' 자문 관련하여 문의드리고자 합니다. (연락처 요청)

0

51

1

Rerank에 대해 질문드립니다.

0

64

2

Cross Encoder Reranker 임포트 에러 관련 내용입니다.

0

97

2

HuggingFaceCrossEncoder 임포트 에러

0

80

2

아나콘다랑 pytry없이. 단순 파이참에서 venv 설정해서 설치하는건 불가능하나요?

0

78

1

2.7 전체 RAG파이프라인 구성에서 4번째 줄 오류

0

77

1

rag 와 랭체인

0

108

2

score 기반 서치

0

48

2

KR.txt파일이 없습니다.

0

76

2

krag를 이용한 검색기법 평가관련 질문

0

74

2

MMR 관련 질문입니다.

0

83

1

Text_splitter관련 질문입니다.

0

58

2

오픈api key는 따로 구매해야되는 걸까요?

0

246

2

과거 채팅이력을 LLM에 줄때 포멧

0

71

1

OpenAIEmbeddings모델이 사용하는 토크나이저는 뭘까요?

0

170

2

ChatPromptTemplate의 from_messages로 메세지를 구성할 때 system은 어떻게 설정해야하나요?

0

93

2

create_retrieval_chain에서 context는 지정된 인자인가요?

0

60

1

evaluate_retrieval_at_K 함수 문의드립니다.

0

64

2

검색기 관련 질문드립니다.

0

86

2

2-3 임베딩모델 에러

0

166

2