코사인 유사도(cosine similarity)

샘2·2023년 1월 13일
0

최근 면접에서 추천시스템의 코사인유사도를 관한 질문을 받았고 개념 정리가 부족한 것을 느껴 내용을 정리하려고 한다.

코사인 유사도란(cosine similarity)?

코사인 유사도는 유사도를 측정하는 기법중의 하나로, 벡터간의 사잇각을 구하는 방법이다. 각도가 0도일 때 코사인 유사도는 1이고, 각도가 90도일 땐 0이 된다. 코사인유사도의 범위 0~1이 되며 벡터간의 각도를 기반으로 유사도를 측정하기 때문에 각각의 스케일의 영향을 받지 않는 것이 특징이다.

코사인 유사도의 수식

코사인 유사도의 수식은 다음과 같다.
풀이를 하면 분자부분에는 벡터의 내적을 구하고, 분모부분에는 벡터들의 크기의 곱이 들어갑니다.

  • 분자부분의 벡터의 내적은 벡터의 각 원소들을 짝맞춰 곱한 다음 모두 더하면 됩니다.
  • 분모부분의 벡터들의 크기는 원점을 기준으로 벡터간의 거리를 뜻하며, 피타고라스의 정리에 따라 직각삼각형의 빗변을 구하면 됩니다. 각 원소들을 루트씌우고 제곱하여 더한다. 그리고 곱해주면 된다.

코드로 구현

a = np.dot(v1, v2)
b = (np.sqrt(sum(np.square(v1))) * np.sqrt(sum(np.square(v2))))
a / b

추천시스템에서의 활용

추천시스템에서 코사인 유사도를 사용하는 이유는 단어 빈도 기반으로 유사도를 측정하기 때문이다. 사용자가 각각의 아이템을 중첩하여 선택하는 경우가 많을수록 유사하다고 판단할 수 있고, 아이템과 사용자들은 주로 텍스트 데이터로 존재하기 때문이다.
코사인 유사도를 활용하여 유사도를 구할 때 각도를 초점으로 판단하기 때문에 각각의 텍스트를 비교하기 위해 생기는 많은 차원속에서 스케일의 영향을 받지않는 다는 점이 중요하다.

profile
부지런한 개발자가 되고싶은

0개의 댓글