Semantic Search (의미 기반 검색)
정의
**Semantic Search (의미 기반 검색)**는 사용자 질문의 전체 의미를 파악하고, 문자 그대로의 단어 일치가 아닌 개념적, 의미적 유사성을 기반으로 관련 정보를 검색하는 방식.
사용자가 “대통령”이라고 물어봐도 “국가 원수”라고 쓰인 문서를 찾을 수 있다.
핵심 원칙
| 원칙 | 설명 |
|---|---|
| 의미 우선 | 단어가 아니라 의미에 집중 |
| 문맥 이해 | 맥락과 상황을 파악 |
| 동의어 인식 | 다른 표현도 같은 의미로 인식 |
| 개념 매칭 | 표면적 단어 아닌 근본 개념 연결 |
키워드 검색 vs 의미 검색
키워드 검색 (Lexical/Keyword Search)
질문: "대통령"
검색 방식: "대통령"이라는 단어가 정확히 들어간 문서 찾기
결과:
✅ "한국의 대통령은..."이라는 문서
✅ "대통령 당선인이..."라는 문서
❌ "국가 원수의 역할은..."이라는 문서
❌ "최고 통치자가 하는 일..."이라는 문서
→ 의미는 같은데 단어가 다르면 놓침
장점:
- 매우 빠름 (O(log n))
- 구현이 간단
- 메모리 효율적
단점:
- 동의어 인식 불가
- 의미 변화 미처리
- 문맥 무시
- 문장 구조 무시
의미 검색 (Semantic Search)
질문: "대통령"
검색 방식: "대통령"의 의미를 이해하고,
같은 의미의 모든 표현을 찾기
의미 파악:
"대통령" = 국가의 최고 지도자, 국가 원수, 정치의 최고 권력자...
결과:
✅ "한국의 대통령은..."
✅ "국가 원수의 역할은..."
✅ "최고 통치자가 하는 일..."
✅ "대통령의 권한과 책임..."
→ 의미만 같으면 모두 찾음
장점:
- 의미 깊이 있음
- 동의어 자동 처리
- 문맥 고려
- 사용자 의도 파악
단점:
- 계산량 많음
- 처리 시간 더 걸림 (보통 수백ms)
- 구현 복잡함
구현 기술: 임베딩 (Embedding)
작동 원리
1단계: 텍스트 → 벡터 변환 (Embedding)
"대통령" → [0.2, -0.1, 0.8, 0.5, ..., 0.3] (768차원 벡터)
"국가 원수" → [0.21, -0.09, 0.79, 0.51, ..., 0.29]
"최고 통치자" → [0.19, -0.11, 0.81, 0.49, ..., 0.31]
2단계: 벡터 간 유사도 계산 (Cosine Similarity)
"대통령" 벡터와 "국가 원수" 벡터의 거리: 0.99 (매우 유사)
"대통령" 벡터와 "치과의사" 벡터의 거리: 0.15 (별로 유사하지 않음)
3단계: 유사도순 순위 정렬
1위: "국가 원수의 역할" (유사도 0.98)
2위: "대통령의 권한" (유사도 0.97)
3위: "최고 통치자의..." (유사도 0.96)
임베딩 모델 예시
| 모델 | 차원 | 특징 |
|---|---|---|
| BERT | 768 | 한국어 지원, 문맥 고려 |
| Word2Vec | 300 | 빠름, 경량 |
| Sentence-Transformers | 384-768 | 문장 레벨 임베딩 |
| OpenAI Ada | 1536 | 최고 성능 |
실제 예시: 고객 지원
Before (키워드 검색)
고객 질문: "환불은 어떻게 받는가?"
검색: "환불"이라는 단어 찾기
결과:
- "환불 정책" ✅
- "환불 신청" ✅
- "돈을 돌려받으려면?" ❌ (같은 의미인데 단어 다름)
- "구매 취소 및 환금" ❌ (비슷하지만 단어 다름)
→ 관련 문서를 놓칠 수 있음
After (의미 검색)
고객 질문: "환불은 어떻게 받는가?"
의미 이해: "구매 취소 후 돈을 되돌려받는 과정"
검색: 같은 의미의 모든 표현
결과:
- "환불 정책" (정확히 일치)
- "환불 신청" (정확히 일치)
- "돈을 돌려받으려면?" (의미 일치)
- "구매 취소 및 환금" (의미 일치)
- "상품 반품 후 금액 환수" (의미 일치)
- "거래 취소 방법" (관련 의미)
→ 모든 관련 정보를 찾아옴
→ 고객 만족도 ↑
의미 검색의 응용
1. 검색 엔진 (Search Engine)
Google의 검색이 의미 검색이 된 이유:
- "best pizza in town" 검색
- "맛있는 피자 찾기"와도 관련 결과 제시
- 의도는 같지만 단어가 다른 쿼리도 이해
2. RAG (Retrieval-Augmented Generation)
의미 검색 없이 RAG:
질문: "AI가 뭐예요?"
검색: "AI"라는 단어만 찾음
→ 부정확한 정보 검색 → 나쁜 답변
의미 검색으로 RAG:
질문: "인공지능이란?"
검색: "인공지능", "AI", "Machine Learning", "Deep Learning" 등 모두 찾음
→ 정확한 정보 검색 → 좋은 답변
3. 추천 시스템 (Recommendation)
사용자가 "액션 영화"를 검색
→ "스릴 넘치는 영화", "격투 장면이 많은 영화" 등도 추천
4. 질의응답 (Q&A)
FAQ 검색:
사용자: "물건 못받았어요"
의미 검색이 찾는 것:
- "배송 미흡"
- "상품 미수령"
- "배송 지연"
- "물품 분실"
의미 검색의 한계
❌ 의미적 모호성
"은행"
→ 금융기관? 강 옆 흙더미?
의미 검색도 맥락에 따라 실수할 수 있음
→ 더 정교한 맥락 처리 필요
❌ 문화적 차이
문화마다 다른 의미:
"White" = 색깔? 인종? 음악 장르?
언어별, 문화별 의미 차이 처리 어려움
❌ 계산 비용
키워드 검색: 100만 문서 중 찾기 → 0.01초
의미 검색: 100만 문서의 임베딩 모두 비교 → 수초~수십초
대규모 데이터에서는 속도 문제
→ Vector Database 필요
의미 검색과 Vector Search의 관계
의미 검색: 개념적 접근 (사용자 입장)
↓
Vector Search: 기술적 구현 (엔지니어 입장)
↓
Embedding: 의미를 숫자로 변환하는 방법
의미 검색 = Vector Search 기반 구현
RAG에서의 의미 검색
RAG의 검색 단계
사용자 질문: "AI가 인간을 대체할까?"
1단계: 질문의 의미 파악
의미: "인공지능의 발전이 인간의 역할 축소 가능성"
2단계: 의미 검색 수행
찾아오는 자료:
- "AI의 일자리 영향"
- "인간-AI 협업"
- "기술 발전이 고용에 미치는 영향"
- "자동화와 인간의 미래"
3단계: LLM이 찾아온 자료로 답변 생성
의미 검색이 없을 때
키워드 검색만 있을 때:
"AI"라는 단어가 없는 관련 자료를 놓침
→ 부정확한 답변
의미 검색이 있을 때:
모든 관련 자료를 찾음
→ 정확하고 근거있는 답변
관련 개념
- Vector Search — 의미 검색의 기술적 구현
- Embedding — 의미를 벡터로 변환
- RAG — 의미 검색을 활용하는 기술
- Similarity Measurement — 의미 유사도 계산
- — 자연어 이해의 기반
출처: AI인터시스브랜드 - Retrieval Augmented Generation of Ontologies from Relational Data (2025-12-16)
관련 영상: rag-ontologies-relational