벡터 데이터베이스까지 이해하고 나면 자연스럽게 이런 궁금증이 생긴다. “그래서 도대체 어떻게 ‘비슷한 것’을 찾는 거지?” 나도 처음에는 그냥 단어가 겹치는 걸 기준으로 찾는 줄 알았다. 그런데 임베딩에서는 전혀 다른 방식으로 유사성을 판단한다. 핵심은 단어가 아니라 ‘벡터’다.

Similarity Search는 ‘같은지’가 아니라 ‘얼마나 비슷한지’를 판단한다
기존 검색 방식은 대부분 정확한 일치 여부를 기준으로 한다. 예를 들어 “사과”를 검색하면 ‘사과’라는 단어가 포함된 문서가 나온다. 그런데 이런 방식은 한계가 분명하다. 표현이 조금만 달라져도 검색 결과에서 빠지기 때문이다.
예를 들어 “나는 과일을 좋아한다”와 “나는 사과를 좋아한다”는 문장은 의미적으로는 꽤 가깝지만, 단어만 보면 완전히 다른 문장이다. 그래서 기존 방식으로는 이 둘을 연결하기 어렵다.
반면 Similarity Search는 임베딩된 벡터를 기준으로 비교한다. 즉, 단어가 아니라 “의미의 거리”를 계산한다. 나도 이 개념을 처음 이해했을 때 좀 신기했다. 단어가 달라도 의미가 비슷하면 가까운 것으로 판단한다는 점이 직관적이면서도 강력하게 느껴졌다.
코사인 유사도는 벡터의 ‘각도’를 비교하는 방식이다
Similarity Search에서 가장 많이 사용하는 방식이 바로 코사인 유사도(Cosine Similarity)다. 이름만 보면 어렵게 느껴지지만, 개념은 생각보다 간단하다. 핵심은 벡터의 길이가 아니라 방향이다.
예를 들어 두 벡터가 같은 방향을 향하고 있다면, 그 값은 1에 가까워진다. 반대로 완전히 반대 방향이면 -1에 가까워진다. 그리고 서로 관계가 없는 방향이면 0에 가까워진다.
즉:
- 1에 가까울수록 → 매우 비슷함
- 0에 가까울수록 → 관련 없음
- -1에 가까울수록 → 완전히 반대
나도 처음에는 “왜 길이가 아니라 방향이지?”라는 생각이 들었는데, 조금 생각해보니까 이해가 됐다. 길이는 단순히 값의 크기일 뿐이고, 의미는 방향에 더 많이 담겨 있기 때문이다.
그래서 코사인 유사도는 텍스트 의미를 비교할 때 굉장히 잘 맞는 방식이다.
실제로 Similarity Search를 체감한 순간
이 개념을 제대로 이해하게 된 건 직접 결과를 봤을 때였다. 비슷한 문장을 몇 개 만들어서 비교해봤는데, 단어가 많이 겹치지 않아도 의미가 비슷하면 높은 유사도가 나왔다.
예를 들어:
- “오늘 날씨 좋다”
- “날씨가 맑아서 기분이 좋다”
이 두 문장은 단어는 다르지만 의미는 비슷하다. 실제로 유사도도 꽤 높게 나왔다. 반대로 단어가 일부 겹치더라도 의미가 다르면 유사도가 낮게 나오는 경우도 있었다.
이걸 보고 느낀 게 하나 있다. AI는 우리가 생각하는 방식이 아니라, 완전히 다른 방식으로 ‘이해’를 하고 있다는 점이다. 하지만 그 방식이 오히려 더 유연하게 느껴질 때도 있다.
특히 RAG 구조에서 이 Similarity Search가 얼마나 중요한지 체감됐다. 질문과 가장 관련 있는 문서를 찾는 과정이 정확해야, 이후 답변도 제대로 나오기 때문이다.
한 줄로 정리하면 Similarity Search는 임베딩된 벡터 간의 방향(코사인 유사도)을 비교하여 의미적으로 가장 비슷한 데이터를 찾아내는 방식이다.