# 코사인 유사도
## 수식
$
\text{Retrieval}(q) = \text{argsort}_{\text{desc}} \left( \text{sim}(q, d_i) \right) [1:K]
$
## 표기법
| 기호 | 의미 |
|------|------|
| $q$ | 질의 벡터 |
| $d$ | 문서 벡터 |
| $q \cdot d$ | 두 벡터의 내적 |
| $\|q\|$ | 질의 벡터의 크기 |
| $\|d\|$ | 문서 벡터의 크기 |
| $\cos(q,d)$ | 코사인 유사도 점수 |
| $E(q)$ | 쿼리의 임베딩 표현 |
| $E(d)$ | 문서의 임베딩 표현 |
## 직관적 설명
검색 방식 및 평가 지표
Vector-based Retrieval (가장 일반적)
텍스트를 고차원 벡터로 임베딩한 뒤 쿼리와의 코사인 유사도로 관련도 측정:
$f(q_i, d)$: 쿼리 항 $q_i$가 문서 $d$에서 출현 빈도
전통적 정보 검색 (BM25 등):
Keyword-based Retrieval
## 구체적 예시
$q=(1,2)$, $d=(2,4)$라면 두 벡터 방향이 같으므로 코사인 유사도는 1에 가깝다.
반면 $d'=(2,-4)$라면 방향이 다르므로 유사도는 낮거나 음수가 된다.
RAG에서는 query와 chunk 임베딩의 코사인 유사도를 계산해 상위 K개 문서를 고른다.
벡터 크기보다 방향 유사성에 집중하는 점이 핵심이다.
## 응용 & 실제 구현
벡터 DB 검색, semantic search, 문서 추천에서 가장 널리 쓰인다.
실무에서는 임베딩을 미리 정규화한 뒤 dot product만으로 계산 비용을 줄이기도 한다.
FAISS, Pinecone, Weaviate 같은 저장소가 기본 지원한다.
문서 chunking 전략과 임베딩 모델 선택이 유사도 품질에 직접 영향을 준다.
## 관련 개념
- [[ai/llm/concepts/rag/retrieval]]
## 참고 자료
정보검색 및 임베딩 기반 검색의 기본 거리 척도.
[[ai/llm/concepts/rag/retrieval]]