Interpréter la similitude cosinus négative

17

Ma question peut être stupide. Je m'excuse donc à l'avance.

J'essayais d'utiliser le modèle GLOVE pré-formé par Stanford NLP group ( lien ). Cependant, j'ai remarqué que mes résultats de similitude montraient des chiffres négatifs.

Cela m'a immédiatement incité à regarder le fichier de données mot-vecteur. Apparemment, les valeurs dans les vecteurs de mots pouvaient être négatives. Cela explique pourquoi j'ai vu des similitudes de cosinus négatives.

Je suis habitué au concept de similitude en cosinus des vecteurs de fréquence, dont les valeurs sont limitées dans [0, 1]. Je sais pertinemment que le produit scalaire et la fonction cosinus peuvent être positifs ou négatifs, selon l'angle entre le vecteur. Mais j'ai vraiment du mal à comprendre et à interpréter cette similitude cosinus négative.

Par exemple, si j'ai une paire de mots donnant une similitude de -0,1, sont-ils moins similaires qu'une autre paire dont la similitude est de 0,05? Que diriez-vous de comparer la similitude de -0,9 à 0,8?

Ou devrais-je simplement regarder la valeur absolue de la différence d'angle minimale par rapport à ? Valeur absolue des scores?nπ

Merci beaucoup.

Mai
la source
1
La balise de similitude du cosinus dit: An angular-type similarity coefficient between two vectors. It is like correlation, only without centering the vectors.La seule différence entre les deux est que dans la corrélation, les écarts (moments) - qui sont multipliés croisés - sont de la moyenne, tandis que dans le cosinus les écarts sont du 0 d'origine - c'est-à-dire qu'ils sont les valeurs telles qu'elles sont .
ttnphns
2
(suite) La compréhension du coefficient positif ou négatif est la même dans les deux cas. Coef négatif. signifie que les écarts / valeurs positifs d'un vecteur ont tendance à s'apparier avec les écarts / valeurs négatifs de l'autre. Que cela signifie que les vecteurs sont "similaires" ou au contraire "très différents" dépend de la signification des écarts / valeurs positifs et négatifs dans les données, pour vous.
ttnphns
@ttnphns Merci beaucoup pour votre commentaire! Cela m'inspire à penser la similitude des cosinus d'une nouvelle manière. Dans mon cas d'utilisation, je peux peut-être considérer cela comme une différence dans les résultats finaux: si la corrélation de Doc A et B est négative, et qu'un journal unipolitique X inclut le Doc A, alors il est moins probable que X inclut B comme bien, d'une certaine probabilité moyenne. Cette interprétation vous semble-t-elle valable?
Mai
Je n'ose pas le dire parce que je ne connais pas vos données, la signification des valeurs qu'elles contiennent et votre étude.
ttnphns

Réponses:

2

Soit deux vecteurs et , l'angle est obtenu par le produit scalaire et la norme des vecteurs:abθ

cos(θ)=ab||a||||b||

Étant donné que la valeur situe dans la plage :cos(θ)[1,1]

  • 1 valeur indiquera des vecteurs fortement opposés
  • 0 vecteurs indépendants (orthogonaux)
  • 1 vecteurs similaires (colinéaires positifs). Des valeurs intermédiaires sont utilisées pour évaluer le degré de similitude.

Exemple : Soit deux utilisateurs et , et la similitude entre ces deux utilisateurs selon leur goût pour les films:U1U2sim(U1,U2)

  • sim(U1,U2)=1 si les deux utilisateurs ont exactement le même goût (ou si )U1=U2
  • sim(U1,U2)=0 si nous ne trouvons aucune corrélation entre les deux utilisateurs, par exemple s'ils n'ont pas vu de films communs
  • sim(U1,U2)=1 si les utilisateurs ont des goûts opposés, par exemple s'ils ont évalué les mêmes films de manière opposée
Thomas FEL
la source
0

N'utilisez pas les valeurs absolues, car le signe négatif n'est pas arbitraire. Pour acquérir une valeur cosinus entre 0 et 1, vous devez utiliser la fonction cosinus suivante:

(Code R)

cos.sim <- function(a,b) 
{
  dot_product = sum(a*b)
  anorm = sqrt(sum((a)^2))
  bnorm = sqrt(sum((b)^2))
  minx =-1
  maxx = 1
  return(((dot_product/anorm*bnorm)-minx)/(maxx-minx))
} 

(Code Python)

def cos_sim(a, b):
    """Takes 2 vectors a, b and returns the cosine similarity according 
to the definition of the dot product"""
    dot_product = np.dot(a, b)
    norm_a = np.linalg.norm(a)
    norm_b = np.linalg.norm(b)
    return dot_product / (norm_a * norm_b)

minx = -1 
maxx = 1

cos_sim(row1, row2)- minx)/(maxx-minx)
```
unicoder
la source
Où définissez-vous minx et maxx? Vous pouvez appliquer cette normalisation min-max aux dimensions vectorielles, au lieu de la distance calculée.
emre peut
0

La similitude des cosinus est similaire à la corrélation de Pearson, mais sans soustraire les moyennes. Vous pouvez donc comparer la force relative de 2 similitudes de cosinus en examinant les valeurs absolues, tout comme vous compareriez les valeurs absolues de 2 corrélations de Pearson.

Dave
la source
0

Il est vrai que la similitude en cosinus entre les vecteurs de fréquence ne peut pas être négative car le nombre de mots ne peut pas être négatif, mais avec des incorporations de mots (comme un gant), vous pouvez avoir des valeurs négatives.

Une vue simplifiée de la construction d'incorporation de mots est la suivante: vous affectez chaque mot à un vecteur aléatoire dans R ^ d. Exécutez ensuite un optimiseur qui essaie de rapprocher deux vecteurs similaires v1 et v2 l'un de l'autre ou de séparer deux vecteurs différents v3 et v4 (selon une certaine distance, disons cosinus). Vous exécutez cette optimisation pour suffisamment d'itérations et à la fin, vous avez des incorporations de mots avec le seul critère que les mots similaires ont des vecteurs plus proches et des vecteurs différents sont plus éloignés. Le résultat final peut vous laisser avec certaines valeurs de dimension négatives et certaines paires ayant une similitude cosinus négative - simplement parce que le processus d'optimisation ne s'est pas soucié de ce critère. Il peut avoir poussé certains vecteurs bien dans les valeurs négatives. Les dimensions des vecteurs ne correspondent pas au nombre de mots,

courrier npcmail
la source