반응형
단어 기반 검색 알고리즘(BM25)과 OpenAI API Embedding(FAISS)를 활용하여 동일한 데이터에 대해 검색 성능과 특징을 비교해 보았습니다.
실습에 사용한 알고리즘
- BM25: 단어 기반 검색 알고리즘으로, 텍스트 데이터의 단어 빈도와 검색어와의 겹치는 정도를 바탕으로 유사도를 측정합니다.
- FAISS: OpenAI API의 임베딩을 활용하여 문서를 벡터화하고, 의미적으로 유사한 문서를 검색합니다.
BM25와 FAISS 검색기를 설정하고 동일한 문서 리스트를 각각의 알고리즘에 입력하였습니다.
- BM25Retriever: 단어 빈도를 기반으로 검색
- FAISS: OpenAI API 임베딩을 활용하여 문서를 벡터화
from langchain_community.retrievers import BM25Retriever
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
import config
docs = [
"우리나라는 2022년에 코로나가 유행했다.",
"우리나라 2024년 GDP 전망은 3.0%이다.",
"우리나라는 2022년 국내총생산 중 연구개발 예산은 약 5%이다."
]
# BM25 설정
bm25_retriever = BM25Retriever.from_texts(
docs, metadatas=[{"source": 1}] * len(docs)
)
bm25_retriever.k = 1
# FAISS 설정
embedding = OpenAIEmbeddings(api_key=config.OPENAI_API_KEY)
faiss_vectorstore = FAISS.from_texts(
docs, embedding, metadatas=[{"source": 1}] * len(docs)
)
faiss_retriever = faiss_vectorstore.as_retriever(search_kwargs={"k": 1})
# 검색 테스트
query = "2022년 우리나라 GDP대비 R&D 규모는?"
bm25_docs = bm25_retriever.invoke(query)
faiss_docs = faiss_retriever.invoke(query)
print(bm25_docs) # BM25 결과
print('-----------')
print(faiss_docs) # FAISS 결과
BM25 결과: "우리나라 2024년 GDP 전망은 3.0%이다."
FAISS 결과: "우리나라는 2022년 국내총생산 중 연구개발 예산은 약 5%이다."
BM25와 FAISS의 특징
- BM25:
- 장점: 단어 기반의 유사도를 빠르게 계산.
- 특징: 검색어와 문서의 단어가 많이 겹칠수록 높은 점수를 부여.
- 결과: 문서의 표면적인 단어와 일치한 내용을 반환.
- FAISS:
- 장점: 단어의 의미적 유사성을 반영하여 검색.
- 특징: 임베딩을 활용하여 단어 간 의미를 고려한 결과 제공.
- 결과: 의미적으로 가장 유사한 문서를 반환.
결론
- BM25는 단어 기반으로 빠른 속도를 제공하며, 간단한 검색 시 유용합니다.
- FAISS는 단어 간 의미적 유사성을 반영하므로, 의미 기반 검색에 적합합니다.
반응형
'Investment-Assistant' 카테고리의 다른 글
문서 검색 성능 평가: BM25와 FAISS를 활용한 Hybrid Search 분석 [12] (0) | 2024.11.26 |
---|---|
LangChain으로 BM25와 FAISS를 활용한 Ensemble Retriever 실습 [11] (1) | 2024.11.26 |
LangChain으로 PDF 기반 검색기 구현하기: OpenAI Embeddings와 FAISS 활용 [9] (0) | 2024.11.22 |
LangChain으로 문서를 쪼개는 방법: Splitter 실습 가이드 [8] (0) | 2024.11.22 |
LangChain의 PyPDF로 PDF 텍스트 추출하기: 간단한 실습 가이드 [7] (0) | 2024.11.22 |