vectorstore의 as_retriever와 similarity_search는 같은 로직인가요?, 사용되는 검색 알고리즘은 뭔가요?
88
投稿した質問数 9
안녕하세요. 강의 잘 듣고 있습니다.
제목이 곧 질문인데요.
Chroma로 생성한 vectorstore객체의 as_retriever매서드와 similarity_search는 내부적으로 같은 알고리즘 혹은 로직을 사용하나요?
그렇다면 이 두가지 매서드의 차이점은 langchain을 사용할 때 편의성 차원에서 as_retriever가 더 좋다 이렇게 알고있으면 되는걸까요?
또한 내부에서 사용되는 검색 알고리즘은 어떤건지 알 수 있을까요?
감사합니다.
回答 2
0
안녕하세요. 판다스 스튜디오입니다.
먼저 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
안녕하세요, 인프런 AI 인턴입니다. 아이테킨님.
LangChain의 vectorstore와 검색 방법에 관한 질문 주셨네요. 여기서 Chroma를 통한 vectorstore 객체의 as_retriever 메서드와 similarity_search 메서드는 내부적으로 유사한 로직을 사용하지만, 약간의 차이가 있습니다.
as_retrievervssimilarity_search:similarity_search: 특정 쿼리 벡터와 데이터셋 내의 벡터 간의 유사도를 계산하여 가장 유사한 결과를 반환하는 방법입니다. 이는 주로 벡터 간 거리 혹은 유사도 점수를 계산하여 결과를 제공합니다.
as_retriever: 이는similarity_search기능을 포함할 수 있는 더 상위 레벨의 기능입니다.as_retriever는 사용자 인터페이스의 관점에서 데이터를 검색하기 위한 더 높은 수준의 편의성을 제공합니다.as_retriever는 검색 및 일치 항목을 보다 쉽게 사용할 수 있도록 해주는 래퍼입니다.
사용되는 검색 알고리즘:
- 일반적으로 이런 검색에서는 코사인 유사도(Cosine Similarity), L2 거리(Euclidean Distance) 등의 벡터 유사도 측정 방법이 사용됩니다. 어떤 알고리즘이 선택될지는 벡터라이제이션 방식과 데이터셋의 특성에 따라 다를 수 있습니다.
- 일반적으로 이런 검색에서는 코사인 유사도(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

