검색 엔진을 만들거나 RAG(Retrieval-Augmented Generation)를 공부하다 보면 가장 많이 등장하는 용어 중 하나가 Cosine Similarity(코사인 유사도)이다.
처음에는 이름도 어렵고 수학 공식도 복잡해 보여서 이해하기 어렵다.
하지만 결론부터 말하면 Cosine Similarity는 아주 간단한 질문 하나를 해결하기 위해 만들어졌다.
"두 문장은 얼마나 비슷한 의미를 가지고 있는가?"
이 질문에 답할 수 있어야 검색 엔진도 만들 수 있고, 추천 시스템도 만들 수 있으며, RAG도 구현할 수 있다.
이번 글에서는 수식보다 원리와 실제 AI에서 어떻게 사용하는지를 중심으로 정리해보려고 한다.
컴퓨터는 문장의 의미를 이해하지 못한다
사람에게 아래 두 문장을 보여주면 대부분 비슷한 의미라고 생각한다.
맥북 추천해줘
노트북 추천해줘
왜냐하면 사람은
- 맥북은 노트북이다.
- 두 문장은 노트북을 추천받고 싶다는 의미이다.
라는 것을 자연스럽게 이해하기 때문이다.
하지만 컴퓨터는 다르다.
컴퓨터에게
맥북
은 단순한 문자열이고,
노트북
도 또 다른 문자열일 뿐이다.
컴퓨터는 두 단어가 비슷한지 전혀 알지 못한다.
그래서 AI는 먼저 숫자로 변환한다
컴퓨터는 숫자 계산은 매우 잘한다.
예를 들어
10 + 20
30 × 5
같은 계산은 순식간에 처리한다.
그래서 AI는 먼저 문장을 숫자로 변환한다.
예를 들어
맥북
↓
[0.12,
0.83,
0.54,
...
]
그리고
LG Gram
↓
[0.11,
0.80,
0.57,
...
]
이렇게 각각 수백 개의 숫자로 표현한다.
이 숫자의 집합을 Vector(벡터) 라고 한다.
그리고 문장을 벡터로 변환하는 과정을 Embedding(임베딩) 이라고 한다.
Vector는 좌표라고 생각하면 쉽다
벡터를 처음 배우면 숫자의 나열처럼 보인다.
하지만 AI에서는 조금 다르게 생각하는 것이 좋다.
벡터는
의미를 표현하는 좌표
라고 이해하면 된다.
예를 들어 지도에서
서울
부산
제주
가 서로 다른 위치에 존재하듯,
벡터 공간에서도
맥북
LG Gram
ThinkPad
는 서로 가까운 위치에 존재한다.
반면
바나나
축구
고양이
같은 전혀 다른 의미의 단어들은 멀리 떨어져 있다.
즉,
의미가 비슷할수록 벡터 공간에서도 가까운 위치에 존재한다.
그럼 '가깝다'는 것을 어떻게 계산할까?
이제 가장 중요한 질문이 나온다.
벡터가 있다고 해서
컴퓨터가 자동으로
맥북은 LG Gram과 비슷하다.
를 알 수 있는 것은 아니다.
그래서 필요한 것이
Cosine Similarity(코사인 유사도) 이다.
Cosine Similarity는 무엇을 비교할까?
많은 사람들이
"거리(Distance)를 비교하는 것 아닌가?"
라고 생각한다.
하지만 Cosine Similarity는
거리를 비교하는 것이 아니라
방향(Direction)
을 비교한다.
이것이 가장 중요한 핵심이다.
예를 들어
벡터 A
/
/
/
벡터 B
/
/
/
두 벡터는 거의 같은 방향을 향하고 있다.
따라서
A와 B는 매우 비슷하다.
라고 판단한다.
반대로
벡터 C
→
벡터 D
↓
처럼 방향이 완전히 다르면
두 벡터는 의미가 다르다고 판단한다.
왜 방향을 비교할까?
예를 들어
[1,1]
과
[10,10]
을 생각해 보자.
숫자는 크게 다르다.
하지만 두 벡터는 같은 방향을 향하고 있다.
AI에서는
이 두 벡터가 비슷한 의미를 표현할 가능성이 높다고 본다.
반대로
[10,1]
과
[1,10]
은 숫자의 크기는 비슷하지만 방향이 완전히 다르다.
그래서 의미도 다르다고 판단한다.
이것이 Cosine Similarity가 거리보다 방향을 중요하게 생각하는 이유이다.
Cosine Similarity 값의 의미
Cosine Similarity의 결과는 일반적으로
-1 ~ 1
사이의 값을 가진다.
1에 가까울수록
두 벡터가 거의 같은 방향이다.
즉,
의미가 매우 비슷하다.
예를 들어
맥북
MacBook Pro
애플 노트북
같은 표현들이 여기에 해당할 수 있다.
0에 가까울수록
두 벡터의 관련성이 거의 없다.
예를 들어
노트북
축구
처럼 서로 관련 없는 주제이다.
-1에 가까울수록
방향이 완전히 반대이다.
실제 문장 임베딩에서는 자주 등장하지는 않지만,
수학적으로는 가장 반대되는 방향을 의미한다.
검색 엔진에서는 어떻게 사용할까?
예를 들어 데이터베이스에 아래와 같은 문서가 저장되어 있다고 가정해 보자.
문서1 : MacBook M4 리뷰
문서2 : LG Gram 사용 후기
문서3 : 바나나 효능
검색 전에 모든 문서를 Embedding으로 변환한다.
문서1 → Vector
문서2 → Vector
문서3 → Vector
그리고 이 벡터들을 Vector Database에 저장한다.
사용자가
가벼운 노트북 추천
이라고 검색하면
질문도 동일하게 Embedding으로 변환한다.
질문
↓
Vector
이후
질문 벡터와
모든 문서 벡터의 Cosine Similarity를 계산한다.
예를 들어
MacBook → 0.91
LG Gram → 0.96
바나나 → 0.07
이런 결과가 나온다면
LG Gram이 가장 비슷한 문서라고 판단한다.
즉,
검색 엔진은
문자를 비교하는 것이 아니라 벡터를 비교하는 것이다.
RAG에서도 동일한 원리를 사용한다
RAG는 Retrieval-Augmented Generation의 약자이다.
쉽게 말하면
검색을 통해 관련 정보를 찾은 뒤 LLM에게 전달하는 기술
이다.
동작 과정은 다음과 같다.
PDF
↓
텍스트 추출
↓
문단 단위로 분리(Chunk)
↓
Embedding 생성
↓
Vector Database 저장
사용자가 질문하면
질문
↓
Embedding 생성
↓
Vector Database 검색
↓
Cosine Similarity 계산
↓
가장 관련성이 높은 문서 선택
↓
LLM에게 전달
↓
최종 답변 생성
즉,
RAG의 핵심은 LLM이 아니라
Embedding과 Cosine Similarity를 이용한 의미 기반 검색이다.
핵심 정리
이번 글에서 가장 중요한 내용은 다음과 같다.
- 컴퓨터는 문장의 의미를 이해하지 못한다.
- AI는 문장을 숫자(Vector)로 변환한다.
- 이 과정을 Embedding이라고 한다.
- 의미가 비슷한 문장은 벡터 공간에서도 가까운 위치에 존재한다.
- Cosine Similarity는 두 벡터의 방향을 비교하여 의미가 얼마나 비슷한지 계산한다.
- 검색 엔진, 추천 시스템, RAG, Vector Database는 모두 이 원리를 기반으로 동작한다.
Cosine Similarity는 단순한 수학 공식이 아니라, 현대 AI 검색 시스템의 핵심 개념이다. 앞으로 Sentence Transformer, Vector Database, RAG를 배우게 되면 오늘 배운 내용이 하나의 흐름으로 연결되는 것을 확인할 수 있을 것이다.
'AI' 카테고리의 다른 글
| [AI]NumPy와 PyTorch의 차이 - AI 개발자는 왜 둘 다 배울까? (0) | 2026.07.03 |
|---|---|
| [AI] NumPy reshape() 완벽 이해 - AI에서 왜 중요한가? (0) | 2026.07.03 |
| [AI] NumPy ndarray와 Shape 완벽 이해하기 (Batch, Embedding) (0) | 2026.07.03 |
| [AI] 개발 로드맵 - NumPy 시작 (0) | 2026.07.03 |