Python의 코사인 유사성

Shivam Arora 2023년1월30일
  1. scipy모듈을 사용하여 Python에서 두 목록 간의 코사인 유사성 계산
  2. NumPy모듈을 사용하여 Python에서 두 목록 간의 코사인 유사도 계산
  3. sklearn모듈을 사용하여 Python에서 두 목록 간의 코사인 유사도 계산
  4. torch모듈을 사용하여 Python에서 두 목록 간의 코사인 유사성 계산
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()모듈을 사용하여 텐서로 변환됩니다.

관련 문장 - Python Math