벡터 사이의 가까움을 재는 세 가지 방법
텍스트를 벡터로 바꾸면 "뜻이 얼마나 비슷하지?"라는 질문은 "두 점의 거리를 어떻게 잴까?"로 바뀌어. 실전에서 주로 쓰는 답은 세 가지야. 모델과 저장소의 성질을 모르고 고르면 검색 품질이 조용히 떨어질 수 있어.
Cosine similarity: 텍스트의 기본 선택
두 벡터가 이루는 각도를 재. 같은 방향은 1, 반대 방향은 -1, 직각은 0이야. 벡터의 크기는 무시하므로 문서 길이가 유사도에 영향을 주면 안 될 때 잘 맞아.
Euclidean distance (L2)
고차원 공간에서 두 점 사이의 직선 거리를 재. 값이 작을수록 가까워. 단어 빈도로 가중한 벡터나 정규화하지 않은 이미지 임베딩처럼 벡터 크기 자체에도 뜻이 있을 때 유용해.
Dot product: 내적
방향과 크기를 한 숫자에 함께 담아. 단위 벡터에서는 cosine과 같고 별도의 정규화 계산이 없어 GPU에서 빠르기도 해. 추천 시스템에서는 벡터 크기에 인기도나 중요도를 일부러 담아 dot product를 쓰기도 하지.
대부분의 텍스트 임베딩은 이미 단위 벡터야
OpenAI, Voyage, Cohere, BGE와 대부분의 sentence-transformers 모델은 L2 정규화된 벡터를 내놔. 이 경우 cosine과 dot product가 같고, Euclidean 거리는 cosine에 따라 한 방향으로 변하므로 셋이 같은 검색 순위를 만들어. 벡터 저장소가 가장 효율적으로 처리하는 척도를 고르면 돼. 다만 넘겨짚지 말고 모델 카드를 먼저 확인해.