두 벡터의 성분으로부터 코사인 유사도와 사이각을 구합니다. 두 텍스트 임베딩이 얼마나 비슷한지를 재는 표준적인 방법입니다.
입력
벡터 A
벡터 A의 첫 번째 성분입니다. 성분은 음수일 수 있으며, 임베딩에는 음수 값이 흔히 들어 있습니다.
벡터 A의 두 번째 성분입니다.
벡터 A의 세 번째 성분입니다.
벡터 B
벡터 B의 첫 번째 성분이며, 벡터 A의 대응하는 성분과 비교됩니다.
벡터 B의 두 번째 성분입니다.
벡터 B의 세 번째 성분입니다.
결과
값을 입력하면 계산 결과가 표시됩니다.
내적을 두 크기로 나눈 값입니다(...). 방향이 반대일 때 −1, 서로 무관할 때 0, 방향이 같을 때 +1 사이의 값을 가집니다.
세부 정보
두 벡터 사이의 각도로, 유사도의 역코사인입니다(...). 각이 작을수록 두 벡터가 더 같은 방향을 가리킵니다.
대응하는 성분끼리 곱한 값을 모두 더한 결과입니다(...). 코사인 공식의 분자이며, 두 벡터가 같은 쪽으로 기울어 있으면 양수가 됩니다.
벡터 A의 길이로, 각 성분을 제곱해 더한 값의 제곱근입니다(...). 이 값으로 나누면 비교에서 A의 크기가 사라집니다.
벡터 B의 길이입니다(...). A의 길이와 함께 내적을 정규화하는 데 쓰입니다.
코사인 유사도
코사인 유사도는 두 벡터가 같은 방향을 얼마나 가깝게 가리키는지를 재는 척도입니다. 두 벡터
사이 각도의 코사인 값이므로, 벡터의 방향에만 의존하고 길이에는 의존하지 않습니다. 점수는
정반대 방향을 가리키는 벡터의 경우 −1에서, 직각을 이루는 벡터의 경우 0을 거쳐, 같은
방향으로 정렬된 벡터의 경우 +1까지의 값을 가집니다. 텍스트 임베딩을 비교하는 기본적인
방법으로, 임베딩에서는 벡터의 방향이 의미를 부호화하고 길이는 대체로 부수적입니다. 이
계산기는 산술이 따라가기 쉽도록 3차원에서 동작하지만, 공식과 그 해석은 실제 임베딩이
차지하는 수백 또는 수천 차원에서도 동일합니다.
계산 방법
점수를 얻는 데에는 두 가지 재료가 결합됩니다. 내적은 두 벡터가 성분별로 얼마나 일치하는지를
재고, 크기는 각 벡터의 길이를 잽니다. 벡터 와 에 대해 내적은 다음과 같습니다.
a⋅b=a1b1+a2b2+a3b3
그리고 벡터의 크기는 성분을 제곱해 더한 값의 제곱근입니다.
∥a∥=a12+a22+a32
내적을 두 크기로 나누면 길이의 영향이 상쇄되고 각도만 남습니다.
cosθ=∥a∥∥b∥a⋅b
각도 자체는 코사인을 역으로 취해 구합니다. 로, 원시 점수보다
다루기 더 쉬울 때가 있습니다. 0.92라는 유사도는 약 23도라는 각도보다 머릿속에 그리기가
어렵기 때문입니다.
이는 의 각도에 해당합니다. 두 벡터는 가깝지만 동일하지는
않습니다. 약 20도가 조금 넘는 간격을 두고 같은 방향으로 강하게 기울어 있습니다. 임베딩
검색에서 이 정도로 높은 점수는 두 항목을 강한 일치로 표시할 것입니다.
참고와 변형
벡터를 미리 단위 길이로 정규화하면 두 크기가 모두 1이 되고, 코사인 유사도는 내적만으로
줄어듭니다. 벡터 데이터베이스가 정규화된 임베딩을 저장하고 한 번의 곱셈과 덧셈으로 결과의
순위를 매기는 이유가 바로 이것입니다. 코사인 유사도는 단위 구면 위의 유클리드 거리와도 밀접한
관계가 있습니다. 단위 벡터에서는 코사인 유사도가 높을수록 직선 거리가 항상 더 작아지므로, 두
순위는 서로 일치합니다. 점수는 하나의 임베딩 모델 안에서만 비교할 수 있습니다. 한 모델의 0.8은
다른 모델의 0.8과 같은 것을 뜻하지 않습니다.
활용
코사인 유사도는 임베딩 검색의 점수 산출 단계로, 검색 증강 생성의 토대가 됩니다. 비교 대상이
되는 구절은 청킹 단계에서 만들어지며 — RAG 청킹 계산기을 참고하시기
바랍니다 — 그 비용은 임베딩 비용 계산기로 추정하는 벡터로 임베딩됩니다.
시스템이 비교해야 하는 그러한 벡터의 수는 벡터 데이터베이스 용량 계산기가 계산하는
인덱스 크기를 좌우합니다.
자주 묻는 질문 (FAQ)
코사인 유사도는 유클리드 거리와 어떻게 다릅니까?
유클리드 거리는 두 벡터의 끝점 사이를 잇는 직선 거리를 재며, 벡터의 길이에 민감합니다. 코사인 유사도는 두 벡터 사이의 각도만 재고 길이는 전혀 고려하지 않습니다.
같은 방향을 가리키지만 크기가 다른 두 임베딩은 유클리드 거리는 크지만 코사인 유사도는 1에 가깝습니다. 텍스트 임베딩에서는 방향이 의미를 담고 크기는 대체로 부수적이므로, 보통 각도가 더 유용한 비교 기준이 됩니다.
코사인 유사도는 어떤 범위의 값을 가집니까?
−1에서 +1까지의 값을 가집니다. +1은 두 벡터가 정확히 같은 방향을 가리킴을, 0은 서로 직교하여 공통 방향이 없음을, −1은 정반대 방향을 가리킴을 뜻합니다. 임베딩 모델은 흔히 무관한 텍스트가 0 부근에 오고 관련된 텍스트가 그보다 훨씬 높은 점수를 받도록 학습되지만, 정확한 척도는 모델마다 다르며 많은 모델은 강한 음수 값을 거의 내지 않습니다.
임베딩 검색은 왜 코사인 유사도를 사용합니까?
임베딩은 고차원 공간에서 의미를 방향으로 부호화하며, 두 구절의 벡터가 비슷한 방향을 가리킬 때 그 구절들은 비슷한 뜻을 가집니다. 이는 구절의 길이와 무관합니다. 코사인 유사도는 바로 이 방향만을 비교하는 척도입니다.
또한 대규모로 계산하기에도 저렴합니다. 벡터를 단위 길이로 정규화해 두면 코사인 유사도는 단 한 번의 내적으로 줄어들며, 벡터 데이터베이스는 이를 수백만 개의 항목에 대해 빠르게 계산할 수 있습니다.
면책조항
코사인 유사도 점수는 같은 임베딩 모델에서 나온 다른 점수와 비교할 때에만 의미가 있습니다. 두 항목을 “유사하다”고 표시하는 보편적인 임계값은 없으므로, 결론을 내리기 전에 자신의 데이터에서 얻은 예시로 기준을 보정하시기 바랍니다.