8
votes

Similarité cosinoise des vecteurs, avec une complexité

Ayant regardé autour de ce site pour des questions similaires, j'ai trouvé ceci: http: //math.nist. GOV / Javanumerics / Jama / et ceci: http://sujitpal.blogspot.com/2008/09/ir-math-with-java-similarity-measures.html

Cependant, il semble que ceci est exécuté dans O (n ^ 2). J'ai fait du clustering de documents et j'ai remarqué que ce niveau de complexité n'était pas réalisable lorsqu'il s'agissait de petits ensembles de documents. Donnée, pour le produit DOT, nous n'avons besoin que des termes vectoriels contenus dans les deux vecteurs qu'il devrait être possible de mettre les vecteurs dans un arbre et de calculer ainsi le produit DOT avec N log n complexité, où n est le nombre le plus bas de termes uniques dans 1 des 2 documents.

Est-ce que je manque quelque chose? Y a-t-il une bibliothèque Java qui fait cela?

merci


3 commentaires

Vous n'allez pas avoir beaucoup de chance en attendant que les gens lisent ces deux pages. Peut-être que vous pourriez expliquer votre problème plus clairement - pourquoi multipliez-vous des vecteurs (et que voulez-vous dire, O (n ^ 2)? Calcul du produit de deux vecteurs n-dimensionnels est de trivialité O (n), je doute fortement Le paquet de vecteur pourrait bousiller ça mal)


Il est informatique produit de points pour chaque paire de documents. Cela le rend quadratique complexe.


Blueraja - Danny Pflughoeft, ce problème consiste à multiplier de très grands vecteurs dimensionnels mais très clairsemés; et n n'est pas une dimension mais le nombre d'éléments non nuls.


4 Réponses :




0
votes

Si vous souhaitez uniquement recommander des éléments limités, par exemple M articles, à chaque élément d'un ensemble avec la taille de N, la complexité n'a pas besoin d'être n ^ 2, mais M * n. Puisque m est une constante, la complexité est linéaire.

Vous pouvez vérifier avec le projet Simbase https://github.com/guokr/simbase , il est une base de données NOSQL de similarité de vecteur.

Simbase Utilisez ci-dessous Concepts:

  • Set de vecteur: un ensemble de vecteurs
  • base: la base des vecteurs, des vecteurs dans un ensemble vectoriel ont la même base
  • Recommandation: une relation binaire à une seule direction entre deux ensembles vectoriels ayant la même base

0 commentaires

1
votes

Si vous envisagez d'utiliser la similitude cosinoise comme moyen de trouver des grappes de documents similaires, vous voudrez peut-être envisager de regarder dans hachage sensible à la localité , une approche basée sur un hachage conçue spécifiquement avec cela à l'esprit. Intuitivement, LSH hachait les vecteurs d'une manière dont une probabilité élevée place des éléments similaires dans le même seau et des éléments distants dans différents seaux. Il existe des schémas de LSH qui utilisent la similarité de cosinus comme leur distance sous-jacente, afin de trouver des grappes que vous utilisez LSH pour déposer des objets dans des seaux, puis calculer uniquement les distances paires d'éléments dans le même seau. Dans le pire des cas, ce sera quadratique (si tout tombe dans le même seau), mais il est beaucoup plus probable que vous ayez une densité importante dans le travail.

J'espère que cela vous aide!


0 commentaires