Elasticsearch 기반 Hybrid Search + Vector Search + RAG 구조를 활용한
주식 종목 AI 분석 플랫폼입니다.
BM25 기반 키워드 검색과 Dense Vector 기반 Semantic Search를 결합하여
자연어 질문에 대한 기업 분석 결과를 제공합니다.
- 회사명 / 업종 / 주요제품 기반 검색
- BM25 (Lexical Search)
- Dense Vector 기반 Semantic Search
- Hybrid 검색 지원
- 검색 결과 개수 표시
- Streamlit
st.chat_input기반 대화형 UI - 사용자 질문 → Elasticsearch 검색
- 검색된 Context 기반 RAG 응답 생성
- 검색 방식 표시 (lexical / semantic)
User Query
↓
Streamlit UI
↓
Elasticsearch
├─ BM25 (Lexical Search)
└─ Dense Vector (Semantic Search)
↓
Context 추출
↓
LLM (RAG)
↓
AI 응답 반환
- 정확한 키워드 기반 검색
- 회사명 검색에 적합
- 의미 기반 유사도 검색
- 산업군 / 테마 검색에 적합
- Lexical + Vector 점수 결합
- Python
- Streamlit
- Elasticsearch 8.x
- Dense Vector
- OpenAI API
- Pandas / Numpy
- SentenceTransformers (Embedding)
|-- .env
|-- .gitignore
|-- 100_elk_vectorize.py
|-- app.py
|-- elk_utils.py
|-- pages/
| |-- 1-주식_종목_탐색기.py
| |-- 2-AI_챗봇.py
| |-- 3-하이브리드_탐색기.py
| |-- 4-주식_데이터_정보.py
| |-- 200_관리자_ELK_대시보드.py
|-- requirements.txt
1. 이슈 (Issue): - 시맨틱 검색(Semantic Search) 모드에서 "소부장" 같은 한국 주식 시장의 특정 테마 약어를 입력 시 연관된 주식 데이터가 전혀 검색되지 않는 현상(Recall 저하) 발생.
2. 원인 분석 (Root Cause Analysis):
- 임베딩 모델의 도메인 지식 한계: 사용 중인 범용 벡터 임베딩 모델이 해당 신조어/약어가 내포한 실질적인 비즈니스 의미("소재", "부품", "장비")와의 벡터 공간상 거리(Cosine Similarity)를 좁히지 못함.
- 데이터 희소성(Sparsity): 타겟 문서(주식 정보) 내에 "소부장"이라는 단어 자체가 직접적으로 존재하지 않아, 렉시컬(키워드) 검색으로도 Fallback 되지 않는 구조적 문제 확인.
3. 해결 방안 (Resolution):
-
Query Expansion 로직 도입: 사용자 입력(Input)을 DB에 바로 던지지 않고, 중간에 LLM(
gpt-4o-mini)을 거쳐 검색에 유리한 단답형 키워드 목록으로 번역/확장하는 미들웨어 로직 추가. -
결과: 도메인 용어 검색 시 내부적으로 정확한 산업군 풀네임으로 치환되어 검색 엔진에 전달됨으로써, 검색 성공률 및 정확도가 대폭 상승함.
docker run -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.11.0(선택) Kibana 실행
docker run -p 5601:5601 --link elasticsearch kibana:8.11.0python -m venv myenv
myenv\Scripts\activate # Windowspip install -r requirements.txtOPENAI_API_KEY=your_openai_key
python 100_elk_vectorize.pystreamlit run app.py기업 정보 데이터를 아래와 같이 통합하여 벡터화:
df['context'] = (
"회사명: " + df['회사명'].fillna('') + " | "
"업종: " + df['업종'].fillna('') + " | "
"주요제품: " + df['주요제품'].fillna('')
)- RAG 구조 직접 설계 및 구현
- Elasticsearch Dense Vector 활용
- Hybrid Search 전략 설계
- Streamlit 멀티페이지 구조 구성
- 대량 데이터 벡터화 및 인덱싱 경험
- 검색 결과 리랭킹 추가
- 산업군 통계 시각화
- 기업 비교 분석 기능
- 투자 리포트 자동 생성
- Elastic Cloud 배포