임베딩(Embedding)은 RAG 시스템에서 검색 및 정보 검색 성능에 큰 영향을 미치는 요소입니다.
임베딩의 품질이 낮으면 검색 결과가 부정확해지고, 반대로 최적화된 임베딩을 사용하면 검색 정확도와 효율성이 크게 향상됩니다.
설명:
Sentence Transformers, BGE, OpenAI, Cohere, Hugging Face 모델 등이 존재함.예시:
all-MiniLM-L6-v2 (빠르고 가볍지만 정확도는 중간) nomic-ai/nomic-embed-text-v1 (높은 정확도) LegalBERT, BioBERT 같은 특화된 모델 사용 설명:
예시:
768 ~ 1024 차원 384 ~ 512 차원 256 차원 이하 (모바일 최적화) 설명:
예시:
import numpy as np
def normalize_vector(vec):
return vec / np.linalg.norm(vec)
original_vector = np.array([3, 4])
normalized_vector = normalize_vector(original_vector)
print(normalized_vector) # [0.6, 0.8]
설명:
예시:
"AI is transforming the world"
→ ['AI', 'is', 'transform', '##ing', 'the', 'world']
"AI is transforming the world"
→ ['AI', 'is', 'trans', 'form', 'ing', 'the', 'world']
설명:
예시:
위 두 문장은 의미가 유사하므로, 학습을 통해 유사도를 높이면 검색 성능이 개선됨.
설명:
예시:
text-embedding-ada-002 → 최대 8,192 토큰 all-MiniLM-L6-v2 → 256 토큰 설명:
예시:
"이 문서 전체를 하나의 벡터로 변환"
"이 문서의 1번 섹션 → 벡터1"
"이 문서의 2번 섹션 → 벡터2"
설명:
예시:
1. "임베딩 모델 추천"이라는 검색어 입력
2. BM25 → "임베딩 모델 성능 비교"라는 문서 추천
3. 벡터 검색 → "최고의 문서 임베딩 모델" 문서 추천
4. 두 결과를 결합하여 더 정확한 결과 제공
| 추가 요인 | 설명 | 예시 |
|---|---|---|
| 임베딩 모델 선택 | 도메인에 맞는 모델 선택 | all-MiniLM-L6-v2, BioBERT |
| 차원 수 | 차원이 높으면 정확도 증가, 낮으면 속도 증가 | 512 ~ 1024 차원 |
| 정규화 (Normalization) | L2 정규화 적용하여 유사도 계산 최적화 | np.linalg.norm() 사용 |
| 토크나이제이션 | 모델마다 다르게 적용됨 | WordPiece vs BPE |
| Contrastive Learning | 의미가 유사한 문장을 학습하여 검색 성능 향상 | "벡터 표현" ↔ "임베딩" |
| Context Window | 모델이 처리할 수 있는 최대 문맥 크기 | 256 ~ 8192 토큰 |
| Multi-Vector 방식 | 단일 벡터보다 문서의 일부를 나눠 저장 | 문서 섹션별 임베딩 생성 |
| Hybrid Search | 키워드 검색 + 벡터 검색 혼합 | BM25 + Vector Search |
이러한 요소들을 최적화하면 RAG 시스템의 검색 정확도를 극대화할 수 있습니다! 🚀