Como funciona

A similaridade de cosseno calcula o cosseno do ângulo entre dois vetores. O resultado varia de -1 a 1. Valor 1 significa vetores idênticos em direção. Valor 0 significa ortogonais, sem relação. Valor -1 significa direções opostas.

Na prática, textos viram vetores (embeddings) e a similaridade mede quão próximos dois textos estão em significado, não em palavras exatas. Diferente da distância euclidiana, a similaridade de cosseno ignora a magnitude dos vetores e foca apenas na direção, o que a torna robusta a textos de tamanhos diferentes.

A fórmula: cos(θ) = (A·B)/(|A||B|), onde A·B é o produto escalar e |A|, |B| as normas. Antes do cálculo, os vetores costumam ser normalizados para ter norma unitária, simplificando a fórmula para o produto escalar.

Exemplo prático

Duas frases: "gato no telhado" e "felino sobre a casa". Após embedding, os vetores podem ter similaridade 0,85, indicando alto significado compartilhado, mesmo com palavras diferentes. Já "gato no telhado" e "carro na garagem" podem ter similaridade 0,12, indicando baixa relação semântica.

Python
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

a = np.array([[1, 2, 3]])
b = np.array([[2, 4, 6]])
print(cosine_similarity(a, b))  # [[1.0]]

c = np.array([[1, 0, 0]])
d = np.array([[0, 1, 0]])
print(cosine_similarity(c, d))  # [[0.0]]

Para que serve

Busca semântica, sistemas de recomendação e RAG. Permite encontrar documentos relevantes mesmo quando o usuário usa palavras diferentes daquelas do texto. É a base de muitos motores de busca com IA.

Em sistemas RAG, a similaridade de cosseno seleciona os trechos de documento mais relevantes para a pergunta do usuário, que são então enviados ao modelo de linguagem como contexto. Quanto mais precisa a busca, melhor a resposta final.