해결된 질문
작성
·
805
·
수정됨
0
RAG시스템 구축 시 pdf파일을 불러와 청크단위로 나누고 embedding 모델을 이용해 embedding한 후 chromadb에 저장했습니다. 그후 ensemble retriever을 쓰려고 하는데 대부분 vectorstore에서 제공하는 retriever을 사용을 하던데 왜 embedding 모델의 retriever을 사용하지않는지 궁금합니다
from langchain.retrievers import BM25Retriever, EnsembleRetriever
from langchain_community.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddings
bm25_retriever = BM25Retriever.from_documents(texts)
bm25_retriever.k = 2
embedding = ko_embedding
faiss_vectorstore = FAISS.from_documents(texts, ko_embedding)
faiss_retriever = faiss_vectorstore.as_retriever(search_kwargs={"k": 2})
<vectorstore의 리트리버를 쓰는 랭체인>
https://python.langchain.com/docs/modules/data_connection/retrievers/vectorstore
<ensemble 리트리버>
https://python.langchain.com/docs/modules/data_connection/retrievers/ensemble
답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
성윤재님, 벡터DB 기반 리트리버와 임베딩 모델 리트리버에 대해 궁금해하시는군요.
벡터DB 기반 리트리버는 주로 FAISS와 같은 효율적인 인덱싱 메커니즘을 사용하여 대량의 데이터로부터 빠르게 유사한 항목을 검색할 수 있습니다. 이는 대규모 데이터를 다룰 때 검색 속도와 메모리 사용의 효율을 위해 사용됩니다.
임베딩 모델 기반 리트리버는 데이터의 임베딩을 직접 계산하여 유사도를 평가합니다. 이는 좀 더 정확한 결과를 얻을 수 있지만, 대량의 데이터에서 모든 임베딩을 실시간으로 계산하는 것은 비효율적일 수 있습니다.
파이썬의 langchain 라이브러리에서는 BM25 같은 통계 기반의 리트리버와 임베딩 기반의 리트리버를 통합한 앙상블 리트리버를 제공하고 있습니다. 이는 임베딩 기반의 정확성과 벡터DB 기반의 효율성을 모두 이용하고자 할 때 유용합니다. 하지만, 프로젝트의 요구 사항이나 데이터의 특성에 따라 최적의 리트리버 선택은 달라질 수 있습니다.
벡터스토어 리트리버와 앙상블 리트리버에 대한 더 자세한 정보는 제공해주신 링크를 참조하시기 바랍니다.
벡터스토어 리트리버 관련 문서:
https://python.langchain.com/docs/modules/data_connection/retrievers/vectorstore
앙상블 리트리버 관련 문서:
https://python.langchain.com/docs/modules/data_connection/retrievers/ensemble
도움이 되었기를 바랍니다.