Python의 코사인 유사성
Shivam Arora
2023년1월30일
-
scipy
모듈을 사용하여 Python에서 두 목록 간의 코사인 유사성 계산 -
NumPy
모듈을 사용하여 Python에서 두 목록 간의 코사인 유사도 계산 -
sklearn
모듈을 사용하여 Python에서 두 목록 간의 코사인 유사도 계산 -
torch
모듈을 사용하여 Python에서 두 목록 간의 코사인 유사성 계산
코사인 유사성은 두 벡터 목록 간의 코사인 각도를 계산하여 벡터 목록 간의 유사성을 측정합니다. 코사인 함수를 고려하면 0도에서의 값은 1이고 180도에서는 -1입니다. 즉, 두 개의 겹치는 벡터에 대해 코사인 값은 정확히 반대되는 두 벡터의 최대 값과 최소값이됩니다.
이 기사에서는 크기가 같은 두 목록 간의 코사인 유사성을 계산합니다.
scipy
모듈을 사용하여 Python에서 두 목록 간의 코사인 유사성 계산
scipy
모듈의spatial.cosine.distance()
함수는 코사인 유사성 대신 거리를 계산하지만이를 달성하기 위해 거리 값을 1에서 뺄 수 있습니다.
예를 들면
from scipy import spatial
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine(List1, List2)
print(result)
출력:
0.9720951480078084
NumPy
모듈을 사용하여 Python에서 두 목록 간의 코사인 유사도 계산
numpy.dot()
함수는 매개 변수로 전달 된 두 벡터의 내적을 계산합니다. numpy.norm()
함수는 벡터 노름을 반환합니다.
이 함수를 올바른 공식과 함께 사용하여 코사인 유사성을 계산할 수 있습니다.
예를 들면
from numpy import dot
from numpy.linalg import norm
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = dot(List1, List2) / (norm(List1) * norm(List2))
print(result)
출력:
0.9720951480078084
코사인 유사성을 계산하기위한 벡터 목록과 쿼리 벡터가 여러 개 있거나 목록이있는 경우 다음 코드를 사용할 수 있습니다.
import numpy as np
List1 = np.array([[4, 45, 8, 4], [2, 23, 6, 4]])
List2 = np.array([2, 54, 13, 15])
similarity_scores = List1.dot(List2) / (
np.linalg.norm(List1, axis=1) * np.linalg.norm(List2)
)
print(similarity_scores)
출력:
[0.98143311 0.99398975]
sklearn
모듈을 사용하여 Python에서 두 목록 간의 코사인 유사도 계산
sklearn
모듈에는 코사인 유사성을 계산하기위한cosine_similarity()
라는 내장 함수가 있습니다.
아래 코드를 참조하십시오.
from sklearn.metrics.pairwise import cosine_similarity, cosine_distances
A = np.array([10, 3])
B = np.array([8, 7])
result = cosine_similarity(A.reshape(1, -1), B.reshape(1, -1))
print(result)
출력:
[[0.91005765]]
torch
모듈을 사용하여 Python에서 두 목록 간의 코사인 유사성 계산
모양 (m, n)을 갖는 N 차원 텐서를 다룰 때torch
모듈에서consine_similarity()
함수를 사용하여 코사인 유사성을 찾을 수 있습니다.
예를 들면
import torch
import torch.nn.functional as F
t1 = [3, 45, 6, 8]
a = torch.FloatTensor(t1)
t2 = [4, 54, 3, 7]
b = torch.FloatTensor(t2)
result = F.cosine_similarity(a, b, dim=0)
print(result)
출력:
tensor(0.9960)
목록은torch.FloatTensor()
모듈을 사용하여 텐서로 변환됩니다.