코사인 유사도란?
코사인 유사도는 두 벡터의 크기가 아니라 두 벡터 사이의 각도를 기준으로 둘이 얼마나 닮았는지를 측정하는 지표입니다. 값은 −1에서 1 사이로 나오는데, 1은 두 벡터가 완전히 같은 방향을 향하는 경우, 0은 서로 직교(즉 아무 관련이 없는 상태)인 경우, −1은 정반대 방향을 향하는 경우를 뜻합니다. 텍스트 마이닝, 추천 시스템, 정보 검색, 머신러닝 등에서 문서·임베딩·특징 벡터를 비교할 때 널리 활용됩니다.
계산기 사용법
벡터 A와 벡터 B의 성분을 쉼표로 구분된 숫자로 입력하세요. 두 벡터는 차원 수(성분 개수)가 같아야 합니다. 만약 길이가 다르면 계산기는 더 짧은 쪽의 길이에 맞춰 계산합니다. 계산 버튼을 누르면 코사인 유사도, 내적, 각 벡터의 크기, 그리고 두 벡터 사이의 각도(도 단위)를 확인할 수 있습니다.
공식 풀이
코사인 유사도는 두 벡터의 내적을 각 벡터의 유클리드 노름(크기)의 곱으로 나눈 값입니다.
$$\cos\theta = \frac{\vec{A} \cdot \vec{B}}{\lVert \vec{A} \rVert \, \lVert \vec{B} \rVert} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^{2}} \; \sqrt{\sum_{i=1}^{n} B_i^{2}}}$$내적 \(\vec{A} \cdot \vec{B}\)는 같은 위치에 있는 성분끼리 곱한 값을 모두 더한 것입니다. 크기 \(\lVert \vec{A} \rVert\)는 각 성분을 제곱해 합한 뒤 제곱근을 취한 값입니다. 크기로 나누어 정규화하기 때문에 결과는 벡터의 길이가 아니라 방향에만 좌우됩니다.
예제로 살펴보기
A = [1, 2, 3], B = [4, 5, 6]이라고 합시다. 내적은 \(1\cdot 4 + 2\cdot 5 + 3\cdot 6 = 4 + 10 + 18 = 32\)입니다. A의 크기는 \(\sqrt{1+4+9} = \sqrt{14} \approx 3.7417\)이고, B의 크기는 \(\sqrt{16+25+36} = \sqrt{77} \approx 8.7750\)입니다. 따라서 \(\cos\theta = 32 / (3.7417 \times 8.7750) \approx 32 / 32.8329 \approx 0.9746\)이 되며, 이는 약 12.93°의 각도에 해당합니다.
자주 묻는 질문
결과가 음수가 될 수도 있나요? 네, 가능합니다. 두 벡터가 대체로 반대 방향을 향하면 코사인 유사도는 음수가 되며, 완전히 정반대일 때는 −1까지 내려갑니다.
두 벡터의 길이가 다르면 어떻게 되나요? 계산기는 겹치는 차원, 즉 더 짧은 벡터의 길이까지만 비교합니다. 의미 있는 결과를 얻으려면 차원이 같은 벡터를 사용하세요.
유클리드 거리와는 어떻게 다른가요? 코사인 유사도는 크기를 무시하고 방향(방향성)에만 집중합니다. 그래서 한 벡터가 다른 벡터보다 훨씬 길더라도 같은 방향을 향하면 완전히 유사한 것으로 봅니다.