키워드 검색은 정확한 단어가 겹쳐야 문서를 찾는다. 그래서 의미는 같지만 표현이 다른 문서를 놓친다. 이 한계를 푸는 것이 시맨틱 검색(semantic search) — 공유된 의미를 기준으로 프롬프트와 문서를 매칭한다.
1. 키워드 검색의 한계
키워드 검색은 happy와 glad가 동의어인데도 서로 매칭하지 못하고, 반대로 프로그래밍 언어 Python과 뱀 python처럼 철자는 같지만 뜻이 다른 단어를 잘못 매칭한다. 즉 단어의 존재만 보고 의미를 못 본다.

2. 큰 그림 — 키워드 검색과 같은 골격
높은 수준에서 보면 시맨틱 검색은 키워드 검색과 똑같이 작동한다. 모든 문서를 벡터로 매핑하고, 프롬프트도 벡터로 매핑한 뒤, 프롬프트 벡터와 문서 벡터를 비교해 점수를 내고 가장 잘 맞는 문서를 찾는다. 유일한 차이는 벡터를 부여하는 방식이다.
- 키워드 검색 — 텍스트에 각 단어가 몇 번 나오는지 센다(bag of words).
- 시맨틱 검색 — 텍스트를 embedding model(임베딩 모델)이라는 특수한 수학 모델에 통과시켜 벡터를 생성한다.

3. 임베딩 모델 — 단어를 공간의 점으로
embedding model은 단어를 공간상의 위치에 매핑하고, 그 위치를 벡터로 표현한다. 예컨대 pizza를 [3, 1], bear를 [5, 2]에 매핑하는 식이다. 2차원이라면 이 벡터들을 x-y 평면 위의 점으로 볼 수 있다.

여기서 거의 마법 같은 부분이 나온다 — 임베딩 모델은 의미적으로 비슷한 단어를 공간상 가까운 위치에 매핑한다. food와 cuisine은 가까이, trombone과 cat은 멀리 임베딩된다. 주의할 점은, 이 x축·y축에는 단순한 해석이 없다는 것이다. "food 축"이나 "animal 축"이 있는 게 아니라, 그저 의미가 비슷한 점들이 함께 군집을 이룬다고 생각하면 된다.

4. 차원 — 2D로는 부족함
단어들의 관계는 복잡해서 2차원으로는 의미 있는 군집을 만들기 어렵다. 벡터 구성 요소가 3개면 3차원 공간에 임베딩할 수 있고, 그러면 관련 개념의 군집과 미묘한 관계를 담을 여유 공간이 늘어난다. 실제 대부분의 임베딩 모델은 벡터가 수백~수천 개의 구성 요소를 가진다. 이 고차원 공간은 그리거나 상상하기 어렵지만, 수학적으로는 똑같은 원리가 적용된다 — 벡터는 그 공간 속 좌표이고, 비슷한 개념은 가까이, 다른 개념은 멀리 놓인다.

5. 단어뿐 아니라 문장·문서도
이 예시는 개별 단어에 초점을 맞췄지만, 임베딩 모델은 여러 종류의 입력에 대해 존재한다 — 단어·문장·문서 각각을 위한 모델이 있다. 입력의 종류는 달라도, 각 경우 공간의 한 점을 지정하는 하나의 벡터를 출력한다. 그리고 단어와 마찬가지로, 벡터가 가까울수록 텍스트의 의미가 비슷하다.

예를 들어 "그는 수업 중 조용히 말했다", "그는 수업 중 조용히 속삭였다", "그녀의 딸은 우울한 하루를 밝게 만들었다"라는 세 문장을 벡터 공간에 투영하면, 앞의 두 문장은 서로 가깝고 세 번째 문장은 멀리 떨어진다.

6. 벡터 거리 측정
텍스트의 유사도를 정량화하려면 벡터 간 거리를 측정한다. 대표적으로 세 가지가 있다.
Euclidean distance (유클리드 거리)
두 벡터를 잇는 직선의 길이 — 기하 시간의 피타고라스 정리를 고차원으로 확장한 것이다. 다만 아주 높은 차원에서는 모든 점이 서로 멀어지는 경향이 있어, 단독으로는 잘 쓰이지 않는다.

Cosine similarity (코사인 유사도)
가장 널리 쓰이는 척도다. 두 벡터가 공간상 가까운지와 무관하게 방향의 유사성을 측정한다. 예를 들어 [10,10]과 [100,100]은 서로 멀지만 같은 방향을 향한다. 값의 범위는 같은 방향이면 1, 반대 방향이면 −1이다.

Dot product (내적)
한 벡터를 다른 벡터 위에 투영한 길이를 측정한다. 두 벡터의 길이·방향이 비슷하면 커지고, 직각(90°)이면 0, 반대 방향이면 음수다. 범위는 −∞ ~ +∞다.


7. 시맨틱 검색의 전체 흐름
이제 이 거리 척도로 시맨틱 검색이 완성된다.
- 모든 문서를 임베딩 모델로 벡터 공간에 투영한다(의미가 비슷한 문서는 가까이).
- 프롬프트도 임베딩해 자체 벡터를 얻는다.
- 프롬프트 벡터와 각 문서 벡터의 거리를 측정한다.
- 거리가 가까운 순으로 정렬해 상위 문서를 반환한다 — 곧 프롬프트와 의미가 가장 비슷한 문서다.


여기서 자연스러운 질문 하나 — 임베딩 모델은 어떻게 "비슷한 개념을 가까이 놓는 법"을 알까? 다음 글에서는 임베딩 모델이 어떻게 학습되는지 조금 더 깊이 파고든다.
'AI > RAG' 카테고리의 다른 글
| Hybrid Search & RRF (0) | 2026.07.02 |
|---|---|
| How to train Embedding Model (0) | 2026.07.02 |
| BM25 (키워드 검색) (0) | 2026.07.02 |
| TF-IDF (키워드 검색) (0) | 2026.07.02 |
| Metadata Filtering(메타데이터 필터링) (0) | 2026.07.02 |
