코사인 유사도와 내적의 차이점

텍스트 임베딩에서 두 벡터의 유사도를 측정할 때 코사인 유사도(Cosine Similarity)와 내적(Dot-Product)은 비슷해 보이지만 중요한 차이점이 있습니다.

가장 핵심적인 차이는 벡터의 '크기(magnitude)'를 고려하는지 여부입니다.

특징 코사인 유사도 (Cosine Similarity) 내적 (Dot-Product)
측정 대상 두 벡터 사이의 방향(각도) 한 벡터를 다른 벡터에 투영한 크기
크기 민감도 영향 없음 (크기 정규화) 영향 있음
값의 범위 -1 ~ 1 (보통 임베딩에서는 0 ~ 1) 제한 없음 (-∞ ~ +∞)
의미 벡터의 크기와 상관없이 의미론적 방향성이 얼마나 유사한지를 나타냅니다. 방향성과 함께 벡터의 크기(중요도, 빈도 등)까지 반영하여 유사도를 계산합니다.

상세 설명

  1. 코사인 유사도 (Cosine Similarity)

    • 두 벡터가 가리키는 방향이 얼마나 비슷한지에만 집중합니다. 벡터의 길이(크기)는 계산 과정에서 정규화되어 사라집니다.
    • 예시: "사과"라는 짧은 문서와 "사과는 비타민이 풍부한 과일이다"라는 긴 문서가 있다고 가정해 봅시다. 두 문서 모두 '사과'를 핵심 주제로 다루므로, 임베딩 벡터의 방향은 매우 유사할 것입니다. 코사인 유사도는 이 방향성만 보기 때문에 높은 유사도 점수를 반환합니다. 문서의 길이에 영향을 받지 않습니다.
    • 주요 용도: 대부분의 의미 검색(Semantic Search), RAG 등에서 표준으로 사용됩니다. 내용의 핵심 의미가 얼마나 비슷한지가 중요할 때 적합합니다.
  2. 내적 (Dot-Product)

    • 두 벡터의 방향과 크기를 모두 반영합니다. 같은 방향을 가리키더라도, 벡터의 크기(길이)가 길수록 내적 값은 커집니다.
    • 예시: 위와 같은 예시에서, 긴 문서의 임베딩 벡터는 짧은 문서의 벡터보다 더 큰 크기(magnitude)를 가질 수 있습니다. 만약 모델이 '정보량이 많음'이나 '중요함'을 벡터의 크기로 표현하도록 학습되었다면, 내적은 이러한 정보까지 유사도에 반영하게 됩니다.
    • 주요 용도: 벡터의 크기 자체가 특별한 의미(예: 단어의 중요도, 인기도 등)를 갖도록 설계된 모델에서 유용할 수 있습니다.

가장 중요한 점: 정규화(Normalization)

만약 임베딩 벡터들을 미리 정규화(Normalization)하여 모두 크기(길이)가 1이 되도록 만들면, 코사인 유사도와 내적의 계산 결과는 완전히 같아집니다.

코사인 유사도 = (A · B) / (||A|| * ||B||)

여기서 벡터 크기 ||A||||B||가 모두 1이라면, 분모가 1이 되므로 결국 A · B, 즉 내적과 같아집니다.

최신 임베딩 모델들은 종종 결과 벡터를 정규화해서 제공하므로, 이런 경우에는 계산이 더 빠른 내적을 사용해도 코사인 유사도와 동일한 결과를 얻을 수 있습니다.

내적

$$
A \cdot B = 1×10 + 1×10 = 20
$$

코사인 유사도

$$
|A| = \sqrt{2}, \quad |B| = \sqrt{200}
$$

$$
\cos(\theta) = \frac{20}{\sqrt{2} \times \sqrt{200}} = 1
$$

댓글 쓰기

다음 이전