Semelhança de cosseno em Python

Shivam Arora 30 janeiro 2023
  1. Use o módulo scipy para calcular a semelhança de cossenos entre duas listas em Python
  2. Use o módulo NumPy para calcular a semelhança de cossenos entre duas listas em Python
  3. Use o módulo sklearn para calcular a semelhança de cossenos entre duas listas em Python
  4. Use o módulo torch para calcular a semelhança de cossenos entre duas listas em Python
Semelhança de cosseno em Python

A similaridade de cosseno mede a similaridade entre listas de vetores calculando o ângulo de cosseno entre as duas listas de vetores. Se você considerar a função cosseno, seu valor em 0 graus é 1 e -1 em 180 graus. Isso significa que para dois vetores sobrepostos, o valor do cosseno será máximo e mínimo para dois vetores precisamente opostos.

Neste artigo, calcularemos a semelhança do cosseno entre duas listas de tamanhos iguais.

Use o módulo scipy para calcular a semelhança de cossenos entre duas listas em Python

A função spatial.cosine.distance() do módulo scipy calcula a distância em vez da semelhança do cosseno, mas para isso, podemos subtrair o valor da distância de 1.

Por exemplo,

from scipy import spatial

List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine(List1, List2)
print(result)

Resultado:

0.9720951480078084

Use o módulo NumPy para calcular a semelhança de cossenos entre duas listas em Python

A função numpy.dot() calcula o produto escalar dos dois vetores passados ​​como parâmetros. A função numpy.norm() retorna a norma do vetor.

Podemos usar essas funções com a fórmula correta para calcular a similaridade do cosseno.

Por exemplo,

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)

Resultado:

0.9720951480078084

Se houver vários ou uma lista de vetores e um vetor de consulta para calcular as semelhanças de cossenos, podemos usar o código a seguir.

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)

Resultado:

[0.98143311 0.99398975]

Use o módulo sklearn para calcular a semelhança de cossenos entre duas listas em Python

No módulo sklearn, existe uma função incorporada chamada cosine_similarity() para calcular a semelhança do cosseno.

Veja o código abaixo.

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)

Resultado:

[[0.91005765]]

Use o módulo torch para calcular a semelhança de cossenos entre duas listas em Python

Quando lidamos com tensores N-dimensionais com formas (m, n), podemos usar a função consine_similarity() do módulo torch para encontrar a similaridade do cosseno.

Por exemplo,

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)

Resultado:

tensor(0.9960)

As listas são convertidas em tensores usando o módulo torch.FloatTensor().

Artigo relacionado - Python Math