O que é similaridade de cosseno?

Vista aérea de pedestres na Paternoster Square, Londres, Reino Unido

Autores

Tom Krantz

Staff Writer

IBM Think

Alexandra Jonker

Staff Editor

IBM Think

O que é similaridade de cosseno?

A similaridade de cosseno é uma métrica de similaridade amplamente utilizada que determina o quanto dois pontos de dados são similares com base na direção em que estão apontando, em vez de seu comprimento ou tamanho. É especialmente eficaz em espaços de alta dimensão, onde as métricas tradicionais baseadas na distância podem ter dificuldades.

 

O cálculo da similaridade de cosseno exige a medição do cosseno do ângulo (teta) entre dois vetores diferentes de zero em um espaço de produtos internos. Essa medição produz uma pontuação de similaridade de cosseno. Os valores da similaridade de cosseno variam de -1 a 1:

  • Uma pontuação de similaridade de cosseno de 1 indica que os vetores estão apontando exatamente na mesma direção.
  • Uma pontuação de similaridade de cosseno de 0 indica que os vetores são ortogonais, o que significa que eles não têm similaridade direcional.
  • Uma pontuação de similaridade de cosseno de -1 indica que os vetores apontam em direções exatamente opostas.

Pense nisso como uma comparação de setas: se elas estiverem apontando na mesma direção, são altamente semelhantes. As que estão em ângulos retos não estão relacionadas, e as setas que apontam em direções opostas são diferentes.

Essa abordagem angular é fundamental para muitos sistemas de aprendizado de máquina (ML), processamento de linguagem natural (NLP) e inteligência artificial (IA). Essas tecnologias dependem de representações de dados baseadas em vetores, o que significa que os dados foram convertidos em uma forma numérica para capturar seu significado e semelhança com outros dados.

Por exemplo, um chatbot pode usar técnicas de embedding de palavras para converter texto em formato vetorial, modelos de deep learning para entender a intenção e algoritmos de busca por similaridade para recuperar a resposta mais relevante de um banco de dados. A similaridade de cosseno possibilita cada uma dessas etapas.

As mais recentes notícias de tecnologia, corroboradas por insights de especialistas.

Mantenha-se atualizado sobre as tendências mais importantes e fascinantes do setor em IA, automação, dados e muito mais com o boletim informativo da Think. Consulte a declaração de privacidade da IBM.

Agradecemos a você! Você se inscreveu.

Sua inscrição será entregue em inglês. Você pode encontrar um link para cancelar a inscrição em todos os boletins informativos. Você pode gerenciar suas inscrições ou cancelar a inscrição aqui. Consulte nossa declaração de privacidade da IBM para obter mais informações.

Por que a similaridade de cosseno é importante?

Quer seja para prever a próxima palavra em uma frase ou sugerir um lugar próximo para comer, muitos dos sistemas que moldam nossa vida digital dependem da medição da similaridade. Tecnologias como mecanismos de recomendação e grandes modelos de linguagem (LLMs) utilizam a similaridade de cosseno para identificar qual conteúdo é mais relevante e quais respostas fazem mais "sentido".

Essas decisões são tomadas analisando as relações entre pontos de dados em conjuntos de dados de alta dimensão ou esparsos. Na análise de texto clássica, os documentos são frequentemente convertidos em representações numéricas usando técnicas como frequência do termo-inverso da frequência nos documentos (tf-idf), uma forma avançada de bag of words (BoW). Enquanto o BoW pontua a frequência com que um termo aparece em um documento, a tf-idf ajusta essa pontuação com base na frequência com que a palavra é comum ou rara em um conjunto de dados maior.

Sistemas mais avançados usam redes neurais para gerar embeddings vetoriais — representações numéricas de pontos de dados que expressam diferentes tipos de dados como uma matriz de números. Por exemplo, palavras como "médico" e "enfermeiro" podem aparecer próximas umas da outras no espaço vetorial, o que significa que o modelo as vê como relacionadas. Essas embeddings geralmente passam por etapas adicionais, como análise de componentes principais (PCA), para tornar as comparações em grande escala mais rápidas e eficientes.

Em ambas as abordagens, a similaridade de cosseno mede o quanto está próximo o alinhamento dos vetores resultantes, ajudando os sistemas a identificar padrões e relacionamentos em conjunto de dados complexos. Em NLP, IA e ciência de dados, a similaridade de cosseno desempenha um papel central na:

Classificação de relevância

Os mecanismos de pesquisa usam a similaridade de cosseno para combinar as consultas dos usuários com documentos relevantes, melhorando a precisão e a qualidade da classificação.

Comparação semântica

As redes neurais e os LLMs comparam as embeddings vetoriais usando a similaridade de cosseno para avaliar a proximidade semântica entre as entradas.

Recomendações personalizadas

Os sistemas de recomendação aplicam técnicas de pesquisa de similaridade para sugerir produtos, mídia ou conteúdo que se alinham ao comportamento e às preferências do usuário.

Modelagem de tópicos

A similaridade de cosseno é compatível com a modelagem de tópicos ao agrupar documentos com temas semelhantes. Essas distribuições de tópicos geralmente são geradas usando métodos como a alocação latente de Dirichlet (LDA).

Além dos casos de uso de texto, a similaridade de cosseno também é compatível com qualquer cenário em que padrões multidimensionais devem ser comparados de forma rápida e precisa, como reconhecimento de imagens, detecção de fraude e segmentação de clientes.

Mixture of Experts | 28 de agosto, episódio 70

Decodificando a IA: resumo semanal das notícias

Participe do nosso renomado painel de engenheiros, pesquisadores, líderes de produtos e outros enquanto filtram as informações sobre IA para trazerem a você as mais recentes notícias e insights sobre IA.

Como funciona a similaridade de cosseno?

Em sua essência, a similaridade de cosseno mede o alinhamento de dois vetores calculando o cosseno do ângulo entre eles.

Em aplicações do mundo real, como comparar documentos, os dados são representados como vetores no espaço multidimensional. Cada dimensão pode representar uma palavra, um atributo ou uma ação específico, e o valor nessa dimensão reflete o quanto esse item é proeminente ou importante.

Para calcular a similaridade de cosseno:

  1. Encontre o produto escalar: multiplique os valores correspondentes em cada vetor e some os resultados. Isso captura o quanto os vetores estão direcionalmente alinhados.

  2. Determine a magnitude: a magnitude (ou comprimento) de cada vetor é calculada usando a raiz quadrada da soma do quadrado de seus componentes.

  3. Calcule a similaridade de cosseno: a similaridade de cosseno é encontrada dividindo o produto escalar (etapa 1) pelo produto das magnitudes dos vetores (etapa 2). O resultado é uma pontuação de similaridade do cosseno entre -1 e 1.

A fórmula pode ser representada como:

Similaridade de cosseno = (A · B) / (||A|| × ||B||)

Onde:

  • A · B é o produto escalar dos vetores A e B
  • ||A|| é a magnitude (comprimento) do vetor A
  • ||B|| é a magnitude do vetor B

A pontuação resultante varia de -1 a 1.

Para ilustrar melhor, imagine duas palavras: "rei" e "rainha".

Ambas são usadas em contextos semelhantes. Quando processada por um LLM, cada palavra é traduzida em uma embedding que captura o significado semântico de um termo com base em seu uso em milhões de frases. Como "rei" e "rainha" frequentemente aparecem perto de palavras como "real", "trono" e "monarca", as embeddings resultantes apontarão quase na mesma direção.

Agora, considere uma terceira palavra: "maçã". Embora possa aparecer em alguns dos mesmos documentos, é mais frequentemente associada a termos como "frutas", "pomar" ou "crocante". Seu vetor aponta em uma direção quase oposta, resultando em uma similaridade de cosseno menor. Quando plotadas em um gráfico, as setas "rei" e "rainha" se deslocariam quase lado a lado, enquanto a seta "maçã" se afastaria em um ângulo perceptível.

Para otimizar o desempenho e auxiliar na recuperação mais rápida de correspondências relevantes, muitas organizações armazenam essas embeddings em bancos de dados de vetores especializados — ferramentas projetadas para indexar vetores de alta dimensão para melhorar a pesquisa e retornar os resultados mais semelhantes.

Similaridade de cosseno versus outras métricas de similaridade

A similaridade de cosseno é apenas uma abordagem em um ecossistema mais amplo de métricas de similaridade. Cada métrica é projetada para avaliar a similaridade de diferentes maneiras e é mais adequada para tipos específicos de dados dentro de um espaço multidimensional. Alguns exemplos:

Distância euclidiana

Essa métrica calcula a distância em linha reta entre dois pontos em um espaço vetorial. É intuitiva e comumente usada na análise de dados, especialmente para comparar dados numéricos ou funcionalidades físicas. Entretanto, em espaços de alta dimensão, onde os vetores tendem a convergir à distância, a distância euclidiana se torna menos confiável para tarefas como agrupamento ou recuperação de informações.

Similaridade de Jaccard

A similaridade de Jaccard mede a sobreposição entre dois conjuntos de dados ao dividir o tamanho da interseção pelo tamanho da união. É comumente aplicada a conjuntos de dados que envolvem dados categóricos ou binários (como tags, cliques ou visualizações de produtos), e é particularmente útil para sistemas de recomendação. Embora Jaccard se concentre na presença ou ausência, não leva em conta a frequência ou magnitude.

Produto escalar

O produto escalar dos vetores A e B reflete o quanto eles apontam na mesma direção, mas sem normalizar magnitudes. Esse fator o torna sensível para escalar: vetores com valores grandes podem parecer mais semelhantes mesmo que suas direções sejam diferentes.

A similaridade de cosseno melhora essa métrica ao dividir o produto escalar dos vetores pelo produto das magnitudes dos vetores (a fórmula de similaridade de cosseno). A similaridade de cosseno é, portanto, mais estável para comparar vetores diferentes de zero de comprimentos variados, especialmente em conjuntos de dados de alta dimensão.

Na prática, as organizações costumam usar medidas de similaridade de cosseno juntamente com outras métricas, dependendo da estrutura do conjunto de dados e do tipo de disparidade que desejam evitar.

Por exemplo, a pesquisa de similaridade em aplicações de NLP ou LLM frequentemente combina a distância de cosseno com a embedding de modelos treinados em algoritmos de deep learning . Os cálculos de similaridade de cosseno também são integrados a ferramentas de código aberto, como Scikit-learn, TensorFlow e PyTorch, facilitando para os cientistas de dados o cálculo da similaridade de cosseno em conjuntos de dados de grande escala.

Benefícios da similaridade de cosseno

Dado seu papel em uma miríade de sistemas, a similaridade de cosseno oferece várias vantagens sobre as métricas de similaridade tradicionais:

  • Robusta em espaços de alta dimensão: a similaridade de cosseno funciona de forma confiável em ambientes de alta dimensão, onde outras métricas baseadas em distância podem se degradar.
  • Insensível à magnitude: a similaridade de cosseno ignora a magnitude dos vetores, tornando-a especialmente útil quando documentos ou pontos de dados variam em escala ou comprimento.
  • Implementação eficiente: a similaridade de cosseno é computacionalmente leve e pode ser implementada usando bibliotecas de linguagens de programação populares, como NumPy e SciPy.
  • Aplicável entre domínios: a similaridade de cosseno é flexível o suficiente para ser compatível com uma ampla gama de casos de uso, incluindo mineração de texto, recuperação de informações, pesquisa de similaridade e recomendações em tempo real.

Desafios com o uso da similaridade de cosseno

Apesar de suas vantagens, a similaridade de cosseno não está isenta de limitações, incluindo:

  • Limitação do vetor zero: a similaridade do cosseno é indefinida quando um ou ambos os vetores têm magnitude zero, o que torna essencial o pré-processamento para eliminar os vetores zero.
  • Risco de falsa similaridade: a similaridade de cosseno pode produzir altas pontuações para vetores que estão alinhados direcionalmente, mas semanticamente não relacionados, especialmente em modelos de embedding mal treinados. Se os dados de treinamento subjacentes não tiverem diversidade ou nuances contextuais, isso poderá levar a resultados com viés ou enganosos.
  • Dependência da normalização: requer que todos os vetores de entrada sejam normalizados, e dados escalados inadequadamente podem distorcer os resultados.
  • Ambiguidade na ortogonalidade: uma pontuação de similaridade de 0 nem sempre significa uma desigualdade completa em um contexto do mundo real. Esse é especialmente o caso em domínios com nuances como a linguagem.

Dicas práticas para usar a similaridade de cosseno

Para aproveitar ao máximo a similaridade de cosseno, as organizações podem considerar o seguinte:

Pré-processe os dados

As organizações podem normalizar os vetores antes da computação para garantir a consistência da escala e resultados válidos, especialmente ao usar entradas de alta dimensão.

Remova vetores zero

As empresas devem limpar os conjuntos de dados para remover ou sinalizar vetores zero, pois causarão erros de "divisão por zero" durante os cálculos de similaridade de cosseno.

Combine com outras métricas

As organizações podem complementar a similaridade de cosseno com métricas adicionais, como a similaridade de Jaccard ou a distância euclidiana, quando múltiplas dimensões de similaridade forem necessárias.

Teste em ambientes semelhantes aos de produção

Antes da implementação, as empresas devem avaliar o desempenho da similaridade de cosseno em ambientes que reflitam condições do mundo real, especialmente quando usada em sistemas em tempo real, como interfaces de programação de aplicativos (APIs).

As organizações podem aproveitar bibliotecas de código aberto maduras para executar cálculos de similaridade de cosseno em escala com eficiência. Por exemplo, o Scikit-learn fornece uma função de similaridade de cosseno pronta para uso por meio do caminho do módulo Python: sklearn.metrics.pairwise.

Ou então, a fórmula pode ser codificada diretamente em Python usando o NumPy:

“cosine_similarity = np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))”

Assim como as setas, a similaridade cosseno ajuda as organizações a se alinhar direcionalmente. Quer seja combinando resultados de pesquisa ou informando a tomada de decisão baseada em dados, a similaridade de cosseno pode fornecer insights poderosos e ajudar a personalizar experiências em vários casos de uso.

Soluções relacionadas
Ferramentas e soluções de análise de dados

Para prosperar, as empresas devem utilizar os dados para conquistar a fidelidade do cliente, automatizar processos de negócios e inovar com soluções orientadas por IA.

Explore soluções de análise de dados
Serviços de consultoria de dados e análise de dados

Libere o valor dos dados empresariais com a IBM® Consulting, construindo uma organização orientada por insights, que proporciona vantagem comercial.

Conheça os serviços de análise de dados
Análise de dados do IBM Cognos

Apresentamos o Cognos Analytics 12.0, insights impulsionados por IA para maior eficiácia na tomada de decisão.

Explore o IBM Cognos Analytics
Dê o próximo passo

Para prosperar, as empresas devem utilizar os dados para conquistar a fidelidade do cliente, automatizar processos de negócios e inovar com soluções orientadas por IA.

Explore soluções de análise de dados Conheça os serviços de análise de dados