A similaridade cosseno possui diversas aplicações no mundo real, e ao utilizar vetores de incorporação, podemos comparar significados do mundo real de maneira programática. Python é uma das linguagens mais populares para ciência de dados e oferece várias bibliotecas para calcular a similaridade cosseno com facilidade. Neste artigo, discutiremos como você pode implementar a similaridade cosseno em Python com a ajuda das bibliotecas Scikit-Learn e NumPy.
O que é Similaridade Cosseno?
Similaridade cosseno é uma medida de similaridade entre dois vetores não nulos em um espaço n-dimensional. É utilizada em várias aplicações, como análise de texto e sistemas de recomendação, para determinar o quão similares são dois vetores em termos de direção no espaço vetorial.
Fórmula da Similaridade Cosseno
A similaridade cosseno entre dois vetores, A e B, é calculada usando a seguinte fórmula:
Similaridade Cosseno (A, B) = (A · B) / (||A|| * ||B||)
Nesta fórmula, A · B representa o produto escalar dos vetores A e B. Isso é calculado multiplicando os componentes correspondentes dos dois vetores e somando os resultados. ||A|| representa a norma euclidiana (magnitude) do vetor A, que é a raiz quadrada da soma dos quadrados de seus componentes. É calculado como ||A|| = √(A₁² + A₂² + … + Aₙ²). ||B|| representa a norma euclidiana (magnitude) do vetor B, calculada da mesma forma que ||A||.
Como Calcular a Similaridade do Cosseno
Para calcular a similaridade do cosseno, primeiro completa-se o cálculo para o produto escalar dos dois vetores. Em seguida, divida-o pelo produto de suas magnitudes. O valor resultante estará no intervalo de -1 a 1, onde:
- Se a similaridade do cosseno for 1, significa que os vetores têm a mesma direção e são perfeitamente similares.
- Se a similaridade do cosseno for 0, significa que os vetores são perpendiculares um ao outro e não têm similaridade.
- Se a similaridade do cosseno for -1, significa que os vetores têm direções opostas e são perfeitamente dissimilares.
Na análise de texto, a similaridade do cosseno é usada para medir a similaridade entre vetores de documentos, onde cada documento é representado como um vetor em um espaço de alta dimensão, com cada dimensão correspondendo a um termo ou palavra no corpus. Ao calcular a similaridade do cosseno entre vetores de documentos, você pode determinar o quão similares ou dissimilares dois documentos são um em relação ao outro.
Bibliotecas para Cálculo de Similaridade do Cosseno
NumPy
: Excelente para operações numéricas e é otimizada para velocidade.scikit-learn
: Oferece vários algoritmos de aprendizado de máquina e inclui um método para similaridade cosseno em seu pacote de métricas.
Os exemplos a seguir mostram como a similaridade cosseno pode ser calculada usando Python. Usaremos nossos dois vetores de revisão de livros agora familiares [5,3,4] e [4,2,4].
Python Puro
Embora já tenhamos calculado isso à mão, é claro, um computador pode fazê-lo! Veja como você pode calcular a similaridade cosseno usando Python sem bibliotecas adicionais:
A = [5, 3, 4]
B = [4, 2, 4]
# Calculate dot product
dot_product = sum(a*b for a, b in zip(A, B))
# Calculate the magnitude of each vector
magnitude_A = sum(a*a for a in A)**0.5
magnitude_B = sum(b*b for b in B)**0.5
# Compute cosine similarity
cosine_similarity = dot_product / (magnitude_A * magnitude_B)
print(f"Cosine Similarity using standard Python: {cosine_similarity}")
NumPy
Vetores de incorporação geralmente terão muitas dimensões — centenas, milhares, até milhões, ou mais! Com NumPy, você pode calcular a similaridade cosseno usando operações de array, que são altamente otimizadas.
import numpy as np
A = np.array([5, 3, 4])
B = np.array([4, 2, 4])
dot_product = np.dot(A, B)
magnitude_A = np.linalg.norm(A)
magnitude_B = np.linalg.norm(B)
cosine_similarity = dot_product / (magnitude_A * magnitude_B)
print(f"Cosine Similarity using NumPy: {cosine_similarity}")
Scikit-Learn
A função cosine_similarity
do scikit-learn facilita ainda mais o cálculo de operações de similaridade cosseno altamente otimizadas:
from sklearn.metrics.pairwise import cosine_similarity
A = np.array([[5, 3, 4]])
B = np.array([[4, 2, 4]])
cosine_similarity_result = cosine_similarity(A, B)
print(f"Cosine Similarity using scikit-learn: {cosine_similarity_result[0][0]}")
Dicas para Otimizar Cálculos de Similaridade Cosseno em Python
Se você vai usar Python para calcular diretamente a similaridade cosseno, há algumas coisas a considerar:
- Use bibliotecas otimizadas como NumPy ou scikit-learn: Essas bibliotecas são otimizadas para desempenho e geralmente são mais rápidas que o Python puro.
- Use Numba: Numba é um compilador JIT de código aberto para Python e código NumPy, construído especificamente para otimizar funções de computação científica.
- Usar GPUs: Se você tem acesso a uma GPU, utilize bibliotecas Python como o Tensorflow que foram otimizadas para uso em uma GPU.
- Paralelizar Cálculos: Se você tem as capacidades de hardware, considere paralelizar seus cálculos para acelerá-los.
Buscar Grandes Números de Vetores com Pesquisa de Vetores no AstraDB
Se você precisa pesquisar grandes números de vetores, pode achar mais eficiente e escalável usar um banco de dados de vetores como a capacidade de Pesquisa de Vetores da DataStax Astra. A Pesquisa de Vetores no Astra DB oferece uma plataforma poderosa para ajudá-lo a executar pesquisas de vetores com cálculos de similaridade cosseno integrados, para que você possa obter mais insights de seus dados.
Source:
https://dzone.com/articles/how-to-implement-cosine-similarity-in-python