코사인 유사도 정리

vanang7·2021년 1월 29일
0

Cosine Similarity

코사인 유사도는 주어진 두 벡터 사이의 유사도를 의미합니다. 간혹 두 벡터 사이의 거리라고 소개하기도 하지만 엄밀히 말하면 거리는 아니고(삼각부등식 성립이 안됩니다), 방향성이 얼마나 일치하는지를 측정하고 이를 바탕으로 유사도로 해석하는 것으로 생각하면 좋을 것 같습니다.

코사인 유사도의 활용법은 벡터로 표현된 데이터의 유사도를 측정하는데 활용할 수 있을 것 같습니다. 자연어처리에서 Word2vec과 같은 단어 임베딩으로 표현된 단어들 사이의 유사도를 측정하는 것들이 대표적인 사용예가 될 것 같습니다.

코사인 유사도의 공식은 다음과 같습니다.

$\displaystyle similarity = cos(\Theta) = \frac{A \cdot B}{| A | | B |} = \frac{\sum_{i=1}^{n}(A_i \times B_i)}{\sqrt{\sum_{i=1}^{n}(A_i)^2} \times \sqrt{\sum_{i=1}^{n}(B_i)^2}}$

두 벡터가 완전하게 동일하다면 1, 완전하게 반대 방향이라면 -1, 그 사이는 얼마나 유사한지를 나타내게 됩니다.

왜 거리가 아니라 유사도가 정확한 용어일까?

거리라는 용어가 정확히 사용되려면 삼각부등식을 만족해야 한다고 합니다. 삼각부등식은 아래와 같습니다.

$\displaystyle |A | + |B| \geq |A + B|$

두 벡터의 합의 거리(norm)는 각 벡터의 거리(norm)의 합보다 작아야 합니다.

그런데, similarity는 다음의 예와 같이 이 삼각부등식을 만족하지 못한다고 합니다.
다음의 3점 A, B, C를 고려해봅시다.

  • $A = (1,0)$
  • $B = (1,1)$
  • $C = (0,1)$
    삼각부등식에 해당하는 거리를 구해봅시다.
  • $\displaystyle simlilarity(A,B) = 1 - \frac{\sqrt{2}}{2}$
  • $\displaystyle simlilarity(B,C) = 1 - \frac{\sqrt{2}}{2}$
  • $\displaystyle simlilarity(A,C) = 1$

그러면 다음의 식을 얻을 수 있습니다.

  • $similarity(A,B) + similarity(B,C) = 2 - \sqrt{2} < 1 = similarity(A,C)$

위와 같은 이유로 엄밀히 말하면 '거리'보다는 '유사도'가 더 적합한 용어라고 합니다. (그런데, 저도 막 혼용해서 씁니다.)

profile
Unknowns vastly exceeds knowns

0개의 댓글