코사인 유사도 정리

Taek goo Kim·2021년 1월 29일
0

Cosine Similarity

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

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

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

similarity=cos(Θ)=ABAB=i=1n(Ai×Bi)i=1n(Ai)2×i=1n(Bi)2\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, 그 사이는 얼마나 유사한지를 나타내게 됩니다.

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

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

A+BA+B\displaystyle \|A \| + \|B\| \geq \|A + B\|

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

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

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

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

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

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

profile
Unknowns vastly exceeds knowns

0개의 댓글