P1-13.2 유사도 검색(similarity search)의 직관¶
Section ID:
P1-13.2Version:v2026.07.20
P1-13.1에서는 텍스트(text)를 벡터(vector)로 표현한다는 뜻을 봤습니다. 텍스트를 벡터로 바꾸면 문장, 문단, 문서를 계산 가능한 위치로 놓을 수 있습니다.
이제 벡터로 바꾼 텍스트 중에서 무엇을 찾을 것인가?라는 다음 질문으로 넘어갑니다. 유사도 검색(similarity search)은 이 질문에 답하는 방법입니다.
유사도 검색은 질문 벡터(query vector)와 가까운 문서 벡터(document vector)를 찾아, 관련 있을 가능성이 높은 후보를 고르는 과정이다.
여기서 핵심은 정답을 찾는다가 아니라 관련 후보를 찾는다입니다.
Part 1에서 유사도 검색(similarity search), 유사도(similarity), 거리(distance), 코사인 유사도(cosine similarity), 최근접 이웃(nearest neighbor), 상위 k개(top-k)의 기본 구분은 여기서 잡습니다. 13.1에서는 텍스트를 벡터로 바꾸는 이유를 먼저 봤고, 여기서는 그 벡터들을 어떻게 비교해 후보를 고르는가를 다룹니다. RAG로의 연결은 13.3에서 다시 이어집니다.
여기서는 유사도 검색의 직관을 다룹니다. 벡터 데이터베이스(vector database), 인덱스(index), 근사 최근접 이웃(approximate nearest neighbor, ANN) 같은 구현 구조는 여기서 자세히 다루지 않고, P1-13.4에서 왜 빠른 검색을 위해 별도 구조가 필요한가라는 구현 직관으로 다시 연결합니다.
유사도, 거리, 코사인 유사도, 최근접 이웃, top-k는 서로 다른 비교 기준과 결과 선택 방식입니다. 여기서는 각 용어의 역할을 먼저 다음처럼 구분합니다.
| 용어 | 아주 짧은 뜻 | 이 절에서의 역할 |
|---|---|---|
| 유사도 검색 | 질문과 가까운 벡터 후보를 찾는 과정 | Chapter 13의 두 번째 단계 |
| 유사도 | 얼마나 비슷한지 보는 기준 | 비교 기준의 한 축 |
| 거리 | 얼마나 떨어져 있는지 보는 기준 | 비교 기준의 다른 축 |
| 코사인 유사도 | 방향이 얼마나 비슷한지 보는 기준 | 텍스트 검색에서 자주 쓰이는 직관 |
| 최근접 이웃 | 가장 가까운 후보 | 검색 결과 선정의 기본 개념 |
| 상위 k개 | 가까운 후보 여러 개를 가져오는 방식 | RAG 입력 후보 수를 정하는 방법 |
여기서는 유사도는 비슷함, 거리는 가까움, top-k는 후보 여러 개라는 구분을 기준선으로 둡니다.
그래프(graph) 자료구조도 이 구현 단계에서 다시 등장할 수 있습니다. 하지만 P1-13.2를 이해하기 위해 그래프를 먼저 알아야 하는 것은 아닙니다. 그래프는 Part 2의 기초 복구에서 짧게 다루고, 벡터 검색 구현을 설명하는 후속 절에서 다시 연결하는 편이 자연스럽습니다.
RAG(retrieval-augmented generation)는 P1-13.3에서 다룹니다. P1-13.2에서는 검색 결과를 LLM에 넣기 전, “가까운 벡터를 찾는다”는 단계에 집중합니다.
또한 여기서는 검색 결과를 어떻게 프롬프트에 넣는지까지 설명하지 않습니다. 그 연결은 다음 절의 RAG에서 다루고, 여기서는 후보 검색은 정답 판정과 다르다는 점을 분명히 하는 데 집중합니다.
| 주제 | 이 절에서 볼 질문 |
|---|---|
| 유사도(similarity) | 두 벡터가 얼마나 비슷하다고 볼 것인가? |
| 거리(distance) | 두 벡터가 얼마나 떨어져 있다고 볼 것인가? |
| 최근접 이웃(nearest neighbor) | 가장 가까운 후보를 어떻게 고를 것인가? |
| 한계(limit) | 가까운 벡터가 왜 항상 좋은 답은 아닌가? |
가까운 벡터를 찾는 검색 기준¶
- 유사도 검색(similarity search)을 가까운 벡터 후보를 찾는 과정으로 이해합니다.
- 유사도(similarity)와 거리(distance)를 비교 기준으로 이해합니다.
- 코사인 유사도(cosine similarity)를 수식보다 방향의 비슷함으로 이해합니다.
- 검색 결과가 정답이 아니라 후보(candidate)임을 구분합니다.
- P1-13.3의 RAG 흐름으로 넘어갈 준비를 합니다.
세 가지 기준¶
여기서는 유사도 공식을 외우기보다, 벡터 검색이 무엇을 비교하는지 이해하는 데 집중합니다. 본문을 읽을 때 기준이 되는 세 가지 관점은 다음과 같습니다.
| 기준 | 왜 중요한가 | 이 절에서 필요한 이해 수준 |
|---|---|---|
| 유사도(similarity)는 완전히 같은지보다 얼마나 가까운지를 묻는다는 점 | 키워드 일치와 벡터 검색의 차이를 보여 줍니다. | 비슷한 표현을 가까운 이웃으로 찾는 과정으로 이해합니다. |
| 거리(distance)와 방향(direction) 같은 관점이 함께 쓰일 수 있다는 점 | 벡터 비교가 단순 문자열 비교와 다르다는 점을 보여 줍니다. | 숫자 공간에서 가까움과 방향 유사성을 함께 본다고 이해합니다. |
| 유사도가 높아도 항상 정답은 아니라는 점 | 검색 결과를 과신하지 않게 해 줍니다. | 비슷한 문서를 찾는 것과 정확한 답을 보장하는 것은 다르다고 이해합니다. |
검색은 질문과 가까운 후보를 찾는 일이다¶
P1-13.1에서 본 흐름을 다시 가져오겠습니다.
질문 텍스트 -> 질문 임베딩 -> 문서 조각 임베딩들과 비교 -> 가까운 조각을 후보로 선택
예를 들어 사용자가 이렇게 묻는다고 합시다.
프롬프트는 왜 사실성을 보장하지 못하는가?
문서 저장소에는 여러 조각이 있을 수 있습니다.
| 문서 조각 | 주제 |
|---|---|
| P1-12.1 프롬프트는 무엇을 지정하는가 | 프롬프트의 역할 |
| P1-12.3 프롬프트의 한계와 평가 | 사실성, 근거성, 평가 |
| P1-13.1 텍스트를 벡터로 표현한다는 것 | 임베딩 |
| P1-9.1 이미지 인식과 표현 학습 | 딥러닝 확산 |
유사도 검색은 질문과 각 문서 조각을 벡터로 바꾼 뒤, 질문 벡터와 가까운 조각을 찾습니다. 이 경우 P1-12.3 조각이 가장 가까운 후보로 나오는 것이 자연스럽습니다.
하지만 이것은 정답 판정이 아닙니다. 검색은 “이 조각이 관련 있을 가능성이 높다”는 후보를 고르는 단계입니다.
유사도와 거리는 비교 기준이다¶
유사도(similarity)는 두 벡터가 얼마나 비슷한지 보는 기준입니다. 거리(distance)는 두 벡터가 얼마나 떨어져 있는지 보는 기준입니다.
여기서는 다음처럼 생각하면 됩니다.
유사도 높음: 서로 비슷한 위치 또는 방향에 있다.
거리 짧음: 서로 가깝다.
유사도 낮음 또는 거리 김: 서로 덜 관련된 위치에 있다.
같은 목적을 다르게 표현하는 경우가 많습니다.
| 표현 | 직관 |
|---|---|
| 유사도가 높다 | 비슷하다 |
| 거리가 짧다 | 가깝다 |
| 최근접 이웃(nearest neighbor) | 가장 가까운 후보 |
수식을 몰라도 P1-13.2의 핵심은 이해할 수 있습니다. 검색 시스템은 질문 벡터와 문서 벡터들을 비교하고, 가까운 순서대로 후보를 정렬합니다.
코사인 유사도(cosine similarity)는 방향의 비슷함을 본다¶
텍스트 임베딩 검색에서 자주 나오는 표현이 코사인 유사도(cosine similarity)입니다. 여기서도 수식을 먼저 외울 필요는 없습니다.
여기서는 이렇게 이해하면 됩니다.
코사인 유사도(cosine similarity): 두 벡터가 같은 방향을 향하는 정도를 보는 기준
벡터를 화살표처럼 생각해 봅니다.
비슷한 방향: 질문과 문서가 비슷한 주제를 가리킬 가능성이 큼
다른 방향: 질문과 문서가 다른 주제를 가리킬 가능성이 큼
Mikolov 등의 word2vec 연구에서도 벡터 공간에서 가까운 단어를 찾을 때 코사인 거리(cosine distance)를 사용한 사례가 나옵니다. 여기서는 수식보다 “벡터 공간에서 가까운 표현을 찾는다”는 직관만 사용합니다.
코사인 유사도는 유용하지만 절대 기준은 아닙니다. 어떤 임베딩 모델을 쓰는지, 텍스트를 어떻게 나누었는지, 검색할 데이터가 어떤 도메인인지에 따라 결과가 달라질 수 있습니다.
상위 k개(top-k)는 후보 개수를 정하는 방법이다¶
검색 시스템은 보통 가장 가까운 후보 하나만 고르지 않습니다. 여러 후보를 순서대로 가져옵니다. 이를 상위 k개(top-k) 검색이라고 부를 수 있습니다.
상위 1개(top-1): 가장 가까운 후보 1개
상위 3개(top-3): 가까운 후보 3개
상위 k개(top-k): 가까운 후보 k개
예를 들어 질문이 다음과 같다고 합시다.
임베딩은 수학을 많이 알아야 이해할 수 있는가?
검색 결과 후보가 다음처럼 나올 수 있습니다.
| 순위 | 후보 | 이유 |
|---|---|---|
| 1 | P1-13.1 텍스트를 벡터로 표현한다는 것 | 임베딩과 수학 부담을 직접 다룸 |
| 2 | P1-11.1 통계적 언어 모델과 임베딩 | 임베딩의 역사적 배경 |
| 3 | P1-13.2 유사도 검색의 직관 | 벡터 비교와 유사도 설명 |
상위 k개 값을 크게 잡으면 관련 후보를 놓칠 가능성은 줄어들 수 있습니다. 하지만 관련 없는 후보도 함께 들어올 수 있습니다. 상위 k개 값을 작게 잡으면 입력이 간결해지지만, 필요한 근거를 놓칠 수 있습니다.
상위 k개가 너무 작음: 필요한 문서를 놓칠 수 있다.
상위 k개가 너무 큼: 관련 없는 문서가 섞일 수 있다.
가까운 벡터가 항상 좋은 답은 아니다¶
유사도 검색의 가장 중요한 한계는 이것입니다.
가까운 벡터는 관련 후보일 뿐, 정답이나 근거의 품질을 보장하지 않는다.
다음과 같은 문제가 생길 수 있습니다.
| 문제 | 설명 |
|---|---|
| 표현은 비슷하지만 답이 아님 | 같은 단어를 쓰지만 질문 의도와 다를 수 있음 |
| 오래된 정보 | 벡터가 가까워도 최신성이 부족할 수 있음 |
| 잘못된 문서 | 검색된 문서 자체가 틀렸을 수 있음 |
| 조각 나누기 문제 | 필요한 맥락이 앞뒤 조각에 흩어져 있을 수 있음 |
| 도메인 차이 | 일반 임베딩이 전문 분야 구분에 약할 수 있음 |
예를 들어 프롬프트 평가라는 질문에 모델 평가, 시험 평가, 교육 평가 문서가 모두 가까운 후보로 나올 수 있습니다. 단어가 비슷하기 때문입니다. 하지만 현재 맥락에서 필요한 것은 LLM 프롬프트의 한계와 검토 기준입니다.
그래서 유사도 검색 뒤에는 다시 검토가 필요합니다.
검색 결과가 질문과 맞는가? 출처가 신뢰 가능한가? 문서가 최신인가? 문서 조각이 충분한 맥락을 담고 있는가?
검색 품질은 입력 설계의 영향을 받는다¶
유사도 검색은 임베딩 모델만의 문제가 아닙니다. 검색할 문서를 어떻게 준비했는지도 중요합니다.
| 준비 요소 | 영향 |
|---|---|
| 조각(chunk) 크기 | 너무 작으면 맥락 부족, 너무 크면 잡음 증가 |
| 제목과 메타데이터(metadata) | 검색 후보의 주제를 더 잘 드러낼 수 있음 |
| 중복 문서 | 비슷한 후보가 반복될 수 있음 |
| 오래된 문서 | 검색은 되지만 현재 답에는 부적절할 수 있음 |
| 언어 혼합 | 한국어와 영어 표현 차이가 검색 품질에 영향을 줄 수 있음 |
중심 질문별로 나뉜 학습 문서를 예로 들면, 이런 구조는 검색에 유리합니다. 각 문서 조각이 하나의 질문에 비교적 선명하게 답하도록 정리되어 있기 때문입니다. 반대로 하나의 파일에 여러 장의 내용이 섞이면, 질문과 가까운 부분만 골라내기가 어려워질 수 있습니다.
유사도 검색과 키워드 검색은 다르다¶
유사도 검색은 키워드 검색(keyword search)과 다릅니다.
| 검색 방식 | 보는 것 |
|---|---|
| 키워드 검색(keyword search) | 같은 단어나 구문이 있는가? |
| 유사도 검색(similarity search) | 벡터 표현이 가까운가? |
예를 들어 환각이라는 단어가 없는 문서라도 근거 없는 생성, 그럴듯한 오류, confabulation을 설명하고 있다면 유사도 검색에서 후보가 될 수 있습니다. 반대로 같은 단어가 있어도 질문과 다른 맥락이면 좋은 후보가 아닐 수 있습니다.
실제 시스템에서는 키워드 검색과 유사도 검색을 함께 쓰기도 합니다. 하지만 여기서는 두 방식을 자세히 비교하지 않습니다. 중요한 것은 벡터 검색이 단순 문자열 일치와 다른 기준으로 후보를 찾는다는 점입니다.
체크리스트¶
- 유사도 검색(similarity search)을 가까운 벡터 후보를 찾는 과정으로 설명할 수 있다.
- 유사도(similarity)와 거리(distance)를 비교 기준으로 설명할 수 있다.
- 코사인 유사도(cosine similarity)를 방향의 비슷함으로 설명할 수 있다.
- 상위 k개(top-k) 검색을 가까운 후보 여러 개를 가져오는 방식으로 설명할 수 있다.
- 가까운 벡터가 정답이나 근거 품질을 보장하지 않는다고 설명할 수 있다.
- 조각(chunk) 크기와 메타데이터(metadata)가 검색 품질에 영향을 줄 수 있음을 설명할 수 있다.
- 키워드 검색(keyword search)과 유사도 검색(similarity search)의 차이를 말할 수 있다.
- 질문과 문서를 비교할 때 무엇이
가깝다는 뜻인지 설명할 수 있다. - 검색된 문서가 관련 후보일 뿐 정답 보장은 아니라는 점을 설명할 수 있다.
출처와 참고 자료¶
- Yoshua Bengio, Rejean Ducharme, Pascal Vincent, Christian Jauvin, A Neural Probabilistic Language Model, Journal of Machine Learning Research, 2003, 확인 날짜: 2026-06-23.
- Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze, Introduction to Information Retrieval, Chapter 6: Dot products, Cambridge University Press, 2008, 확인 날짜: 2026-07-19.
- Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean, Efficient Estimation of Word Representations in Vector Space, arXiv, 2013, 확인 날짜: 2026-06-23.
- Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, Jeffrey Dean, Distributed Representations of Words and Phrases and their Compositionality, arXiv, 2013, 확인 날짜: 2026-06-23.