Pytorch로 시작하는 딥러닝 입문(11-05. 코사인 유사도를 이용한 추천 시스템)

2024. 4. 17. 21:48딥러닝 모델: 파이토치

♣ 코사인 유사도(Cosine Similarity)

코사인 유사도는 두 벡터 간의 코사인 각도를 이용하여 구할 수 있는 두 벡터의 유사도를 의미한다. 두 벡터의 방향이 완전히 동일한 경우네는 1의 값을, 90도의 각을 이루면 0을, 180도로 반대의 방향을 가지면 -1의 값을 갖는다. 코사인 유사도는 -1 이상 1 이하의 값을 가지며 값이 1에 가까울수록 유사도가 높다고 판단할 수 있다. 즉 두 벡터가 가리키는 방향이 얼마나 유사한가를 의미한다. 

 

두 벡터 A, B에 대해 코사인 유사도는 식으로 표현하면 다음과 같다. 

문서 단어 행렬이나 TF-IDF 행렬을 통해서 문서의 유사도를 구하는 경우, 문서 단어 행렬이나 TF-IDF 행렬이 각각의 특징 벡터 A, B가 된다. 예시를 통해 문서 단어 행렬에 대해서 코사인 유사도를 구해보자. 

 

문서1: 저는 사과 좋아요

문서2: 저는 바나나 좋아요

문서3: 저는 바나나 좋아요 저는 바나나 좋아요

 

띄어쓰기 기준 토큰화를 진행했다고 가정하고, 위의 세 문서에 대해서 문서 단어 행렬을 만들면 아래와 같다. 

 

Numpy를 사용해서 코사인 유사도를 계산하는 함수를 구현하고 각 문서 벡터 간의 코사인 유사도를 계산해보자.