| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- XML
- architecture
- python
- Algorithm
- mysql
- web
- DS
- DB
- computer
- openai
- Java
- AI
- MIPS
- Rag
- system
- data structure
- instruction
- function
- html
- Pipelining
- javascript
- php
- CSS
- control
- Linux
- DATAPATH
- react
- github
- Class
- for
- Today
- Total
YYYEJI
[MAC] 하이브리드 검색(Hybrid Search)을 기반으로 한 RAG 살펴보기 본문
RAG는 사용자의 질문을 검색기로 찾은 문서를 LLM이 답변을 생성해서 유저에게 보여줍니다.
이때 사용하는 검색기!!에 다양한 종류가 있습니다!
1) 의미론적 검색(Semantic Search)
[MAC] 의미론적 검색(Semantic Search)을 기반으로 한 RAG 살펴보기
RAG는 사용자의 질문을 검색기로 찾은 문서를 LLM이 답변을 생성해서 유저에게 보여줍니다.이때 사용하는 검색기!!에 다양한 종류가 있습니다! 1) 의미론적 검색(Semantic Search)2) 키워드 검색 (Keyword
yyyeji.tistory.com
2) 키워드 검색 (Keyword Search)
[MAC] 키워드 검색(Keyword Search)을 기반으로 한 RAG 살펴보기
RAG는 사용자의 질문을 검색기로 찾은 문서를 LLM이 답변을 생성해서 유저에게 보여줍니다.이때 사용하는 검색기!!에 다양한 종류가 있습니다! 1) 의미론적 검색(Semantic Search) [MAC] 의미론적 검색(Se
yyyeji.tistory.com
3) 하이브리드 검색 (Hybrid Search)
지금 이 글에서는 하이브리드 검색을 기반으로 한 RAG 검색기 코드를 살펴볼 예정입니다!
하이브리드 검색 (Hybrid Search)은
* 하이브리드 검색은 커워드 검색과 의미론적 검색을 통합한 검색이고,
* 정확한 키워드 매칭과 의미적 유사성을 동시에 고려하여 검색을 수행합니다.
* 두 검색 방식의 장점을 결합하여 더 포괄적이고 정확한 결과를 도출하며(각 방식의 가중치 조정 가능),
* 키워드와 의미 기반 검색의 시너지 효과로 더 향상된 검색 성능 실현이 가능합니다!!
앙상블 검색기를 생성합시다!
from langchain.retrievers import EnsembleRetriever # 2개를 하나로 합쳐주는 기능
# 앙상블 검색기 생성
emsemble_retrievers = [chroma_k_retriever, bm25_retriever] # 검색기 2개를 리스트로 묶어버림
emsembel_retriever = EnsembleRetriever( # 검색기 합쳐주는 function
retrievers = emsemble_retrievers,
weights = [0.5, 0.5] # 각각 검색기에 무게를 줌 (Vector search 50%, Keyword search 50%)
)
[chroma_k_retriever, bm25_retriever] 검색기 리스트를 만드는데
첫 번째는 벡터 검색기(임베딩 기반 의미 검색), 두 번째는 BM25 검색기(키워드 기반 정확 검색)입니다!
EnsembleRetriever()를 통해 백터 검색기(의미론적 검색기)와 BM25 검색기(키워드 검색기)를 하나도 합쳐서
검색 점수를 섞어주는 하이브리는 검색기를 만들어요!!
retrievers → 합칠 검색기 리스트
weights → 각 검색기의 점수를 얼마나 반영할지 비율 조정
결과를 확인해 볼까요???
# 검색기를 사용하여 검색
query = "리비안이 설립된 연도는?"
retrieved_docs = emsembel_retriever.invoke(query)
print("Query:", query)
for doc in retrieved_docs:
print(doc.page_content)
print("="*200)

이러한 결과를 볼 수 있습니다!!
하이브리스 검색기 굉장히 흥미로웠는데요

벡터 검색을 통해 유사 표현을 찾고,
BM25 검색을 통해 정확한 키워드 매칭을 해서,
의미+정확성 둘 다 챙겨갈 수 있는 검색기를 만들어봤습니다!!

'인공지능 챗봇' 카테고리의 다른 글
| [MAC] Tool calling(@tool) 알아보기 (4) | 2025.08.07 |
|---|---|
| [MAC] 재순위화(Re-rank) 기법 Cross-Encoder 모델과 LLMListwise 모델 비교하기 (4) | 2025.08.07 |
| [MAC] 키워드 검색(Keyword Search)을 기반으로 한 RAG 살펴보기 (4) | 2025.08.06 |
| [MAC] 의미론적 검색(Semantic Search)을 기반으로 한 RAG 살펴보기 (4) | 2025.08.06 |
| [MAC] Naive RAG 구현 코드 구현하기 (13) | 2025.08.05 |