비전공 개발자를 위한 벡터 임베딩과 코사인 유사도 쉽게 이해하기
도서관 지도 비유로 벡터 임베딩과 코사인 유사도의 핵심 원리를 이해하는 방법
AI 기반 의미 검색이나 RAG(검색 증강 생성) 시스템을 공부하다 보면 벡터 임베딩, 벡터 공간, 코사인 유사도 같은 낯선 용어와 곧바로 마주치게 된다. 선형대수학을 따로 배우지 않은 개발자에게 이 용어들은 복잡한 수학 공식처럼 느껴지기 쉽고, 그 자체가 AI 기술을 이해하는 데 진입 장벽으로 작용하기도 한다. 하지만 두 개념의 핵심 아이디어는 생각보다 단순하다. 비유를 통해 이 개념을 정리해 보면 실무에서 훨씬 편하게 활용할 수 있다.
핵심 설명
벡터 임베딩이란 모든 것에 의미 좌표를 부여하는 과정이다
벡터 임베딩은 단어, 문장, 이미지 같은 복잡한 데이터를 숫자의 배열, 즉 벡터로 변환하는 과정이다. 세상의 모든 책을 내용에 따라 정리하는 거대한 도서관의 사서를 상상해 보면 이해하기 쉽다. 단순히 책을 가나다순으로 꽂는 대신, 책의 주제를 분석해서 지도 위의 특정 좌표에 배치한다고 생각해 보자. 과학 소설은 지도의 한쪽 구역에, 역사서는 다른 구역에 모이게 된다. 벡터 임베딩은 바로 이 좌표를 찾는 과정이며, 이렇게 찾은 좌표가 벡터이고 그 좌표들이 모인 거대한 지도가 벡터 공간이다. 내용이 비슷한 데이터는 이 지도 위에서 서로 가까운 곳에 위치하게 되고, 컴퓨터는 이 숫자 좌표를 통해 단어나 문장의 의미를 비교할 수 있게 된다.
코사인 유사도는 거리가 아니라 방향을 측정하는 방법이다
지도 위에 데이터가 좌표로 배치되었다면, 두 데이터가 얼마나 비슷한지 측정할 방법이 필요하다. 도서관 중앙에서 두 책의 좌표를 향해 각각 레이저를 쏜다고 생각해 보면, 코사인 유사도는 그 두 레이저 빔이 이루는 각도를 재는 것과 같다. 두 데이터의 주제가 매우 비슷하다면 두 빔은 거의 같은 방향을 향하고 각도는 매우 작아지며, 이때 유사도 점수는 1에 가까워진다. 반대로 주제가 전혀 다르다면 빔이 서로 다른 방향을 향하고 각도가 커지며 유사도 점수는 0에 가까워진다. 거리 대신 각도를 재는 이유는 문장의 길이 차이 때문이다. 짧은 문장과 같은 주제를 길게 설명한 문단은 벡터의 길이는 다르지만 방향은 비슷할 수 있는데, 방향을 기준으로 판단하면 이런 경우에도 정확하게 유사하다고 볼 수 있다.
실제 팁
임베딩 모델을 직접 만들 필요는 없다
다행히 임베딩 모델을 처음부터 직접 학습시킬 필요는 없다. 이미 잘 훈련된 상용 API나 오픈소스 임베딩 모델을 가져다 쓰는 것만으로도 충분한 경우가 대부분이다. 프로젝트의 목적과 예산에 맞는 모델을 고르는 것이 직접 모델을 만드는 것보다 훨씬 현실적인 접근이다.
개념을 코드로 확인해 보기
아래는 실제로 동작하는 코드가 아니라 개념을 보여주기 위한 예시다. 문장을 벡터로 변환한 뒤 코사인 유사도를 계산하면, 의미가 비슷한 문장은 높은 값을, 관련 없는 문장은 낮은 값을 얻게 된다는 흐름을 보여준다.
from embedding_service import get_embedding
from math_library import cosine_similarity
# 1. 문장을 벡터(숫자 배열)로 변환한다
embedding_cat1 = get_embedding("고양이가 매트 위에 앉아있다.")
embedding_cat2 = get_embedding("한 고양이과 동물이 양탄자 위에서 쉬고 있었다.")
embedding_stock = get_embedding("오늘 주식 시장이 상승 마감했다.")
# 2. 코사인 유사도로 의미적 유사도를 측정한다
similarity_cats = cosine_similarity(embedding_cat1, embedding_cat2)
# 결과는 1에 가까운 값이 나온다 (예: 0.89)
similarity_cat_stock = cosine_similarity(embedding_cat1, embedding_stock)
# 결과는 0에 가까운 값이 나온다 (예: 0.08)벡터 데이터베이스를 함께 고려하기
수백만, 수십억 개의 벡터 중에서 질문과 가장 유사한 벡터를 빠르게 찾으려면 일반적인 데이터베이스만으로는 한계가 있다. 이런 상황에서는 벡터 검색에 특화된 벡터 데이터베이스를 함께 사용하는 것이 일반적이다. 데이터 규모가 커질수록 검색 속도와 정확도를 함께 관리해 줄 수 있는 도구를 선택하는 것이 중요해진다.
주의사항
임베딩의 품질은 어떤 모델을 사용했는지에 따라 크게 좌우된다. 일반적인 웹 텍스트로 학습된 모델은 법률이나 의료처럼 전문성이 높은 분야의 문서를 다루는 데는 적합하지 않을 수 있으므로, 데이터의 특성에 맞는 모델을 선택하는 과정이 필요하다.
임베딩이 만능은 아니라는 점도 함께 기억해야 한다. 임베딩은 통계적 패턴을 학습한 결과일 뿐, 사람처럼 문맥을 완전히 이해하는 것은 아니다. 미묘한 문맥 차이나 반어법을 놓칠 수 있고, 학습 데이터에 담긴 편향을 그대로 반영할 수도 있다. 또한 실제 임베딩 벡터는 수백에서 수천 개의 차원을 가지는데, 이해를 돕기 위해 2차원 지도로 비유했을 뿐 실제로는 사람이 직관적으로 상상하기 어려운 고차원 공간이라는 점도 함께 인지할 필요가 있다.
정리
벡터 임베딩은 데이터에 의미 좌표를 부여하는 과정이고, 코사인 유사도는 그 좌표들이 얼마나 같은 방향을 바라보는지 측정하는 방법이다. 이 두 가지 개념을 직관적으로 이해하는 것만으로도 RAG를 비롯한 여러 AI 검색·추천 시스템이 어떻게 동작하는지 파악하는 데 큰 도움이 된다. 복잡한 수식을 몰라도 비유를 통해 핵심 아이디어를 먼저 붙잡는 것이 실무에 적용하는 가장 빠른 길이다.
핵심 요약
- 벡터 임베딩은 데이터에 의미상 좌표를 부여해 숫자 배열로 바꾸는 과정이다.
- 코사인 유사도는 두 벡터가 얼마나 같은 방향을 향하는지 각도로 측정하는 방법이다.
- 문장의 길이가 달라도 방향이 비슷하면 코사인 유사도는 높게 나올 수 있다.
- 임베딩 모델과 벡터 데이터베이스는 대부분 이미 만들어진 것을 가져다 쓰면 된다.
초보자가 자주 실수하는 포인트
- 코사인 유사도를 단순한 거리 개념과 혼동하는 경우
- 임베딩 모델이 모든 분야에 똑같이 잘 맞는다고 가정하는 경우
- 임베딩이 사람처럼 문맥을 완전히 이해한다고 오해하는 경우
체크리스트
- 벡터 임베딩과 벡터 공간의 관계를 설명할 수 있는가
- 코사인 유사도가 거리 대신 각도를 재는 이유를 이해했는가
- 데이터 특성에 맞는 임베딩 모델을 검토했는가
- 벡터 검색 규모에 맞는 벡터 데이터베이스를 고려했는가
이 글은 초보자 기준으로 이해하기 쉽게 정리되었으며, 내용은 운영 과정에서 순차적으로 보완될 수 있습니다.