Avançar para o conteúdo principal

Similaridade de Cosseno

Similaridade de Cosseno

A similaridade de cosseno é uma métrica que mede a similaridade entre dois vetores em um espaço de n-dimensões. No contexto do Twitter, esses vetores representam tweets ou embeddings de tweets e usuários.

Fórmula da Similaridade de Cosseno

Para dois vetores A e B, a similaridade de cosseno é definida como:

similaridade = cos(θ) = (A ⋅ B) / (∥A∥ ∥B∥) 

             = (Σ (i=1 to n) Ai Bi) / (sqrt(Σ (i=1 to n) Ai^2) * sqrt(Σ (i=1 to n) Bi^2))

Isso representa a fórmula do cosseno da similaridade em texto plano, onde Σ representa a soma, Ai e Bi são os componentes dos vetores A e B, e ∥A∥ e ∥B∥ representam as normas dos vetores A e B, respectivamente.

  • A⋅B é o produto escalar dos vetores A e B.
  • ∥A∥ e ∥B∥ são as normas (comprimentos) dos vetores A e B.
  • θ (Theta): É um símbolo frequentemente usado para representar um ângulo em matemática e trigonometria. No contexto da similaridade do cosseno, θ é o ângulo entre os dois vetores A e B.
  • sqrt: É a abreviação de "square root", que significa raiz quadrada. Por exemplo, sqrt(x) representa a raiz quadrada de x.

Explicação:

  • cos(θ): O cosseno do ângulo θ entre os dois vetores A e B.
  • A ⋅ B: O produto escalar (ou produto ponto) dos vetores A e B.
  • ∥A∥ e ∥B∥: As normas (ou magnitudes) dos vetores A e B.
  • Σ (i=1 to n) Ai Bi: A soma dos produtos dos componentes correspondentes dos vetores A e B.
  • sqrt(Σ (i=1 to n) Ai^2): A raiz quadrada da soma dos quadrados dos componentes do vetor A.
  • sqrt(Σ (i=1 to n) Bi^2): A raiz quadrada da soma dos quadrados dos componentes do vetor B.

Implementação de Similaridade de Cosseno em Python

Aqui está um exemplo de como calcular a similaridade de cosseno entre dois vetores em Python:

import numpy as np

def cosine_similarity(vec1, vec2):
    dot_product = np.dot(vec1, vec2)
    norm_vec1 = np.linalg.norm(vec1)
    norm_vec2 = np.linalg.norm(vec2)
    similarity = dot_product / (norm_vec1 * norm_vec2)
    return similarity

# Exemplo de vetores
tweet_embedding_1 = np.array([4, 1])
tweet_embedding_2 = np.array([1, 3])

similarity = cosine_similarity(tweet_embedding_1, tweet_embedding_2)
print(f"Similaridade de Cosseno: {similarity}")

SimClusters

Os SimClusters agrupam tweets e usuários em comunidades baseadas em seus interesses. Os embeddings dos tweets e usuários são mapeados para essas comunidades. A similaridade entre tweets é calculada com base nesses embeddings.

Exemplo de Embedding e Similaridade

Para calcular a similaridade entre embeddings de tweets, podemos usar a mesma função de similaridade de cosseno mostrada anteriormente. Aqui está um exemplo de como usar embeddings de tweets para calcular a similaridade:

# Exemplo de embeddings
tweet_embedding_1 = np.array([0.1, 0.3, 0.5])
tweet_embedding_2 = np.array([0.2, 0.1, 0.7])

similarity = cosine_similarity(tweet_embedding_1, tweet_embedding_2)
print(f"Similaridade de Cosseno entre os Tweets: {similarity}")

Similaridade de cossenos

A similaridade de cossenos é uma medida usada para determinar quão semelhantes são dois vetores direcionais no espaço vetorial. Ela é frequentemente empregada em campos como processamento de linguagem natural, recuperação de informação, mineração de texto e recomendação de conteúdo. Vamos explorar o conceito com um exemplo prático.

Conceito de Similaridade de Cossenos

A similaridade de cossenos mede o coseno do ângulo entre dois vetores no espaço vetorial. Quanto menor o ângulo entre eles, maior será a similaridade, indicando que os vetores apontam em direções semelhantes. A fórmula para calcular a similaridade de cossenos entre dois vetores A e B é:

Similaridade(A, B) = (A ⋅ B) / (∥A∥ × ∥B∥)

Onde:

  • Similaridade(A, B): A medida de similaridade entre os vetores A e B.
  • A ⋅ B: O produto escalar (ou produto ponto) dos vetores A e B.
  • ∥A∥: A norma euclidiana do vetor A.
  • ∥B∥: A norma euclidiana do vetor B.

Exemplo em Python

Vamos usar um exemplo simples para calcular a similaridade de cossenos entre dois vetores numéricos usando Python e a biblioteca NumPy.

import numpy as np
from numpy.linalg import norm

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

# Cálculo do produto escalar entre A e B
dot_product = np.dot(A, B)

# Cálculo das normas euclidianas de A e B
norm_A = norm(A)
norm_B = norm(B)

# Cálculo da similaridade de cossenos
cosine_similarity = dot_product / (norm_A * norm_B)

print(f"Vetor A: {A}")
print(f"Vetor B: {B}")
print(f"Produto Escalar A.B: {dot_product}")
print(f"Norma de A: {norm_A}")
print(f"Norma de B: {norm_B}")
print(f"Similaridade de Cossenos: {cosine_similarity}")

Saída:

Vetor A: [1 2 3]
Vetor B: [4 5 6]
Produto Escalar A.B: 32
Norma de A: 3.7416573867739413
Norma de B: 8.774964387392123
Similaridade de Cossenos: 0.9746318461970762

Neste exemplo:

  • O vetor A possui os componentes [1, 2, 3].
  • O vetor B possui os componentes [4, 5, 6].
  • O produto escalar A⋅B é calculado como 1×4+2×5+3×6=32
  • As normas euclidianas de A e B são aproximadamente 3.74 e 8.77, respectivamente.
  • A similaridade de cossenos entre A e B é aproximadamente 0.975.

Aplicações

A similaridade de cossenos é amplamente utilizada em:

  • Recuperação de Informação: Para encontrar documentos semelhantes com base em seus vetores de termos.
  • Recomendação de Conteúdo: Para recomendar itens ou conteúdo com base nas preferências do usuário.
  • Agrupamento de Texto: Para agrupar documentos ou textos semelhantes.

Ela é eficaz quando a magnitude dos vetores não é tão importante quanto a direção ou o padrão de ocorrência dos elementos, como em análise de texto onde os vetores representam a frequência das palavras.

Comentários

Mensagens populares deste blogue

Sistema de Recomendação do Twitter

Sistema de Recomendação do Twitter O sistema de recomendação complexo do Twitter, onde múltiplos componentes trabalham em conjunto para selecionar e classificar os tweets que são exibidos para os usuários na aba "Para você". Vamos descrever cada componente e fase do processo, ilustrando com diagramas e exemplos de código onde aplicável. Fases do Sistema de Recomendação Candidate Sourcing Esta fase é responsável por selecionar os tweets candidatos que podem ser recomendados ao usuário. Os candidatos são coletados de diferentes fontes e algoritmos, como RealGraph, TweepCred, Trust & Safety, GraphJets, etc. Light Ranker (Earlybird) Depois de obter os candidatos, um modelo de machine learning leve (light ranker) faz uma primeira classificação desses tweets. Heavy Ranker Os tweets classificados pelo light ranker são então processados por um modelo mais pesado e complexo (heavy ranker) para uma classificação mais precisa. Heurísticas e Filtros Após o ranqueamento dos tweets, el...

REPL (Read-Eval-Print Loop)

REPL (Read-Eval-Print Loop) O termo "REPL" se refere a "Read-Eval-Print Loop", que é um ambiente interativo usado em muitas linguagens de programação e sistemas. Aqui está uma explicação detalhada: O REPL é um ciclo de interação que permite aos desenvolvedores escrever comandos ou expressões, avaliá-los imediatamente, obter os resultados dessa avaliação e, em seguida, repetir o processo. É uma ferramenta poderosa para explorar e experimentar com uma linguagem de programação de forma interativa. Componentes do REPL: Read (Ler) : O REPL lê (ou recebe) a entrada do usuário, que pode ser uma expressão, um comando ou uma linha de código. Eval (Avaliar) : Após ler a entrada do usuário, o REPL avalia (executa) a expressão ou comando fornecido. Isso envolve interpretar a sintaxe da entrada e calcular o resultado correspondente. Print (Imprimir) : Após avaliar a expressão, o REPL imprime o resultado dessa avaliação na tela para que o usuário possa ver. Loop (Laço) : Após im...

Binary Tree e BST Explained

Árvore binária e BST explicada Na computação, a árvore binária (ou binary tree, em inglês) é uma estrutura de dados hierárquica composta por nós, onde cada nó tem no máximo dois filhos: um filho à esquerda e um filho à direita. Esta estrutura é amplamente utilizada em várias áreas da ciência da computação, como organização de dados, algoritmos de busca, compressão de dados, entre outros. Estrutura da Árvore Binária Componentes da Árvore Binária Nó (Node) : Cada elemento da árvore é chamado de nó. Ele contém um valor ou dado e referências (ponteiros) para seus filhos. Raiz (Root) : O nó superior da árvore. É o ponto de entrada e não tem pai. Filhos (Children) : Nós que descendem de um outro nó. Cada nó pode ter até dois filhos. Folhas (Leaves) : Nós que não têm filhos. Subárvore (Subtree) : Qualquer nó com todos os seus descendentes forma uma subárvore. Tipos de Árvores Binárias Árvore Binária Completa : Todos os níveis, exceto possivelmente o último, estão completamente preenchidos, e ...