---
tags: [AI-Agent, RAG]
---

# Embedding

> 텍스트(또는 이미지 등)를 의미를 담은 고차원 실수 벡터로 변환하는 표현 기법.

## 핵심 개념

임베딩은 토큰·문장·문서를 **밀집 벡터(dense vector)** 로 사상한다. 예를 들어 한 문장을 768차원 또는 1536차원의 실수 배열로 변환한다. 학습된 임베딩 모델은 **의미가 비슷한 텍스트를 벡터 공간에서 가깝게** 배치하도록 훈련되어, "강아지"와 "반려견"이 가까운 위치에 놓인다.

RAG에서 임베딩은 두 곳에서 쓰인다.
1. **인덱싱 단계**: 청크를 임베딩해 [[Vector Database]]에 저장.
2. **검색 단계**: 사용자 질의를 같은 모델로 임베딩한 뒤, 가장 가까운 청크 벡터를 찾는다.

## Dense vs Sparse

- **Dense vector**: 대부분의 차원이 0이 아닌 실수. 의미적 유사성(semantic)을 잘 잡는다. 임베딩 모델이 생성.
- **Sparse vector**: 대부분이 0이고 어휘 일치에 기반 ([[BM25]], SPLADE 등). 정확한 키워드 매칭에 강하다.
- 둘을 결합하는 것이 [[Hybrid Retrieval]]이다.

## 유사도 측정

벡터 간 거리/유사도로 관련성을 판단한다.

- **코사인 유사도 (Cosine similarity)**: 두 벡터가 이루는 각도의 코사인. 크기(magnitude)를 무시하고 방향만 비교하므로 텍스트 임베딩에서 가장 널리 쓰인다.
  - `cos(A, B) = (A · B) / (‖A‖ · ‖B‖)`, 범위 -1~1 (1에 가까울수록 유사).
- **내적 (Dot product)**: 정규화된 벡터에서는 코사인과 동일. 정규화하지 않으면 크기에 영향받는다.
- **유클리드 거리 (L2)**: 직선 거리. 값이 작을수록 가깝다.

대부분의 임베딩 모델은 벡터를 단위 길이로 정규화하므로, 코사인·내적이 사실상 같아진다.

## 모델 선택과 주의점

- 질의와 문서는 **반드시 같은 임베딩 모델**로 인코딩해야 한다.
- 다국어/한국어 지원 여부, 차원 수(성능 vs 저장 비용), 최대 입력 길이를 고려한다.
- 대표 모델: OpenAI `text-embedding-3`, Cohere Embed, BGE, E5, KURE(한국어) 등.
- 임베딩 차원이 클수록 표현력은 높지만 저장·검색 비용이 늘어난다.

## 관련 노트

- [[Chunking]]
- [[Vector Database]]
- [[BM25]]
- [[Hybrid Retrieval]]
- [[Embedding]] (용어사전)
