Similaridade Cosseno: O que é, como usar e exemplos em Python com scikit-learn

A Similaridade Cosseno (Cosine Similarity) é uma técnica popular para avaliar o quanto dois vetores são semelhantes em relação à direção que apontam no espaço multidimensional. É amplamente utilizada na Ciência de Dados, especialmente em aplicações envolvendo textos, sistemas de recomendação, agrupamento de dados (clustering) e diversas outras tarefas relacionadas ao aprendizado de máquina.

Neste artigo, vamos entender detalhadamente como funciona essa técnica, como aplicá-la utilizando a biblioteca scikit-learn do Python e discutir alguns casos práticos em que ela é especialmente útil.


O que é Similaridade Cosseno?

Matematicamente, a similaridade cosseno entre dois vetores \( A \) e \( B \) é dada pelo cosseno do ângulo entre eles. Formalmente, temos:

$$ \text{similaridade cosseno} = \cos(\theta) = \frac{A \cdot B}{\|A\| \|B\|} $$

Onde:

  • \( A \cdot B \) é o produto escalar dos vetores;
  • \( |A| \) e \( |B| \) são as normas (ou magnitudes) dos vetores.

O resultado varia entre -1 e 1. Na prática, especialmente em representações de texto ou características positivas, costuma-se considerar o intervalo [0, 1], onde:

  • 1 indica vetores perfeitamente alinhados (idênticos na direção);
  • 0 indica vetores ortogonais, ou seja, completamente diferentes.

Quando Utilizar a Similaridade Cosseno?

Algumas das aplicações mais comuns incluem:

  • Processamento de Linguagem Natural (PLN):

    • Análise de sentimentos
    • Detecção de plágio
    • Resumo automático
    • Identificação de documentos semelhantes
  • Sistemas de Recomendação:

    • Recomendação de filmes ou séries semelhantes
    • Produtos relacionados em lojas virtuais
    • Sugestões de músicas baseadas em gostos semelhantes
  • Agrupamento (Clustering):

    • Segmentação de clientes por comportamento
    • Organização de documentos por tópicos similares

Exemplo Alternativo (apenas Python e NumPy)

Para entender melhor a operação realizada pela biblioteca scikit-learn, veja o cálculo manual usando apenas Python e NumPy:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import numpy as np

def similaridade_cosseno(vetor_a, vetor_b):
    produto_escalar = np.sum(vetor_a * vetor_b)
    norma_a = np.sqrt(np.sum(vetor_a ** 2))
    norma_b = np.sqrt(np.sum(vetor_b ** 2))
    return produto_escalar / (norma_a * norma_b)

# Vetores de exemplo
vetor_a = np.array([1, 2, 3])
vetor_b = np.array([4, 5, 6])

# Resultado da similaridade
resultado = similaridade_cosseno(vetor_a, vetor_b)

print(f"Similaridade cosseno (sem bibliotecas externas): {resultado:.4f}")

Similaridade cosseno (sem bibliotecas externas): 0.9746

Considerações Técnicas Importantes

  • Normalização dos vetores:
    Embora não seja obrigatório, normalizar previamente os dados pode aumentar a precisão em aplicações específicas, principalmente relacionadas à análise de textos.

  • Interpretação dos resultados:
    A similaridade cosseno foca exclusivamente na orientação dos vetores, não considerando suas magnitudes absolutas. Dois vetores proporcionais terão sempre similaridade igual a 1.

  • Alternativas possíveis:
    Caso a magnitude importe (por exemplo, em análises quantitativas rigorosas), outras métricas como a distância Euclidiana ou a distância Manhattan podem ser mais adequadas.

Exemplo Prático em Python com scikit-learn

Vamos implementar agora um exemplo prático utilizando Python e a biblioteca scikit-learn para calcular a similaridade cosseno.

Instalação das bibliotecas necessárias

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
pip install scikit-learn numpy

# Importação das bibliotecas
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

# Definição dos vetores
vetor_a = np.array([[1, 2, 3]])
vetor_b = np.array([[4, 5, 6]])

# Cálculo da similaridade cosseno
similaridade = cosine_similarity(vetor_a, vetor_b)

print(f"A similaridade cosseno entre os vetores é: {similaridade[0][0]:.4f}")

A similaridade cosseno entre os vetores é: 0.9746

No exemplo acima, utilizamos a função cosine_similarity() do módulo sklearn.metrics.pairwise, que simplifica o cálculo realizando automaticamente todas as operações necessárias.

Conclusão

A Similaridade Cosseno é uma métrica intuitiva e poderosa, especialmente útil na comparação de documentos, textos, produtos ou usuários em sistemas inteligentes. Dominar esta técnica permitirá a você implementar soluções robustas em sistemas de recomendação, análise de agrupamentos e processamento de linguagem natural.

O exemplo apresentado neste artigo permite facilmente replicar e adaptar a técnica em diferentes contextos de análise de dados.


Nível do Artigo:

Este artigo é indicado para leitores de nível iniciante a intermediário, que possuem conhecimentos básicos em Python e desejam explorar técnicas práticas de Ciência de Dados e Machine Learning.