Quelles sont les méthodes standard de calcul de la distance entre les documents?

34

Lorsque je parle de "document", je pense à des pages Web telles que des articles de Wikipédia et des reportages. Je préfère les réponses donnant soit des métriques de distance lexicale vanille, soit des métriques de distance sémantiques de pointe, avec une préférence plus forte pour ces dernières.

Mat
la source

Réponses:

48

Il existe différentes manières de procéder, en fonction de la quantité d'informations sémantiques que vous souhaitez conserver et de la facilité avec laquelle vos documents sont segmentés (les documents HTML seraient probablement assez difficiles à segmenter, mais vous pourriez peut-être faire quelque chose avec les balises et le contexte. .)

Certains d'entre eux ont été mentionnés par ffriend, et les vecteurs de paragraphe par user1133029 sont vraiment solides, mais je me suis dit que j'entrerais dans les détails sur les avantages et inconvénients de différentes approches.

  • Distance du cosinus - Une vraie distance en cosinus est probablement la métrique de distance la plus courante utilisée de manière générique sur plusieurs domaines. Cela dit, il y a très peu d'informations en distance cosinus qui peuvent en réalité être reliées à quelque chose de sémantique, ce qui semble ne pas être idéal pour cette situation.
  • Distance de Levenshtein - Également connue sous le nom edit distance, elle est généralement utilisée uniquement au niveau des jetons individuels (mots, bigrames, etc.). En général, je ne recommanderais pas cette métrique car non seulement elle supprime toute information sémantique, mais elle a aussi tendance à traiter des altérations de mots très différentes de manière très similaire, mais c'est une métrique extrêmement courante pour ce genre de chose.
  • LSA - Fait partie d’un vaste arsenal de techniques pour évaluer la similarité de documents topic modeling. LSA s'est démodé assez récemment et, selon mon expérience, ce n'est pas l'approche de modélisation de sujet la plus puissante, mais elle est relativement simple à mettre en œuvre et comporte quelques implémentations open source.
  • LDA - C’est aussi une technique utilisée pour topic modeling, mais elle diffère du LSAfait qu’elle apprend en fait des représentations internes qui tendent à être plus douces et intuitives. En général, les résultats obtenus LDAsont meilleurs pour la modélisation de la similarité de documents que pour les autres LSA, mais pas tout à fait aussi bons pour apprendre à distinguer fortement les sujets.
  • Allocation Pachinko - Est une extension vraiment soignée au-dessus de LDA. En général, il ne s’agit que d’une version considérablement améliorée de LDA, le seul inconvénient étant qu’il faut un peu plus de temps pour s’entraîner et que les implémentations à source ouverte sont un peu plus difficiles à trouver.
  • word2vec - Google travaille sur une série de techniques permettant de réduire intelligemment les mots et les documents à des vecteurs plus raisonnables que les vecteurs clairsemés générés par des techniques telles que Count Vectorizerset TF-IDF. Word2vec est génial car il comporte un certain nombre d'implémentations open source. Une fois que vous avez le vecteur, vous pouvez utiliser dessus toute autre métrique de similarité (telle que la distance cosinus) avec beaucoup plus d'efficacité.
  • doc2vec - Cet article , également connu sous le nom paragraph vectorsde "Google", porte sur les représentations vectorielles denses de documents. La gensimbibliothèque en python a une implémentation word2vecassez simple pour qu’elle puisse être raisonnablement exploitée doc2vec, mais assurez-vous de garder la licence à l’esprit si vous souhaitez suivre cette voie.

J'espère que cela vous aidera, dites-moi si vous avez des questions.

indico
la source
6

Il existe un certain nombre de mesures de distance sémantique, chacune avec ses avantages et ses inconvénients. Voici quelques-uns d'entre eux:

  • cosinus distance , produit intérieur entre vecteurs de caractéristiques de document;
  • LSA , un autre modèle vectoriel, mais utilisant la SVD pour atténuer le bruit de la matrice terme-document d'origine;
  • Basé sur WordNet , vérifié par l'homme, bien que difficilement extensible.

Commencez par une approche la plus simple, puis déplacez-vous davantage en fonction des problèmes spécifiques à votre cas.

petit ami
la source
1
Notez que lorsque vous utilisez LSA, vous utilisez généralement la distance en cosinus sur les projections LSA du jeu de données d'origine. Juste pour clarifier.
Simon
6

De manière empirique, j'ai trouvé que LSA était considérablement supérieur à LDA à chaque fois et sur tous les ensembles de données que j'ai essayés. J'ai parlé à d'autres personnes qui ont dit la même chose. Il a également été utilisé pour gagner un certain nombre de concours de SemEval pour mesurer la similarité sémantique entre documents, souvent en combinaison avec une mesure basée sur wordnet. Je ne dirais donc pas que cela passe de la mode ou est nettement inférieur à LDA, qui est meilleur pour la modélisation du sujet et non la similitude sémantique dans mon expérience, contrairement à ce que certains répondants ont déclaré.

Si vous utilisez gensim (une bibliothèque python), il contient LSA, LDA et word2vec, de sorte que vous pouvez facilement comparer 3. doc2vec est une bonne idée, mais ne s'adapte pas très bien et vous devrez probablement le mettre en œuvre tel que je suis. pas au courant de toute implémentation open source. Il ne s’adapte pas bien car pour chaque document, un nouveau modèle séparé doit être construit en utilisant SGD, un algorithme d’apprentissage lent. Mais cela vous donnera probablement les résultats les plus précis. LSA et LDA ne s’échelonnent pas non plus bien (Word2vec le fait cependant), les échelles LDA sont pires en général. Les implémentations de Gensim sont toutefois très rapides, car elles utilisent une SVD itérative.

Une autre remarque, si vous utilisez word2vec, vous devrez toujours déterminer un moyen de composer des vecteurs à partir de documents, car cela vous donne un vecteur différent par mot. Le moyen le plus simple consiste à normaliser chaque vecteur et à attribuer la moyenne à tous les vecteurs de mots du document ou à une moyenne pondérée par pondération idf de chaque mot. Donc, ce n'est pas aussi simple que 'use word2vec', vous devrez faire quelque chose de plus pour calculer la similarité des documents.

Personnellement, je choisirais LSA, vu que cela fonctionnait bien sur le plan empirique, et que la bibliothèque de gensim évolue très bien. Cependant, il n'y a pas de repas gratuit, essayez de préférence chaque méthode pour voir celle qui convient le mieux à vos données.

Simon
la source
Comment avez-vous utilisé LSA? Il est intéressant de noter que LDA est en fait une enveloppe assez mince autour de LSA (c'est pLSA avec un dirichlet avant) qui a été empiriquement prouvée pour augmenter considérablement la généralisation. Vous constaterez presque certainement de meilleures précisions avec le LSA, mais cela est généralement le résultat d'un surajustement, qui est un problème très notable avec le LSA. En outre, qu'entendez-vous exactement par dimensionnement ici? doc2vec ne nécessite pas réellement de nouveau modèle pour chaque document, et pour le calcul, il n'y a pas de différence notable entre LSA et LDA, les deux étant très évolutifs.
Slater Victoroff
Je n'ai pas observé de sur-ajustement avec LSA et, comme je l'ai dit, j'ai rencontré de nombreuses autres personnes qui ont vu de meilleures performances que LDA. De plus, j'ai vu LSA utilisé dans de nombreuses participations gagnantes dans des compétitions semi-finales, je n'ai jamais vu LDA utilisé dans une inscription gagnante. C’est la conférence universitaire pour comparer la similarité sémantique entre les documents, alors je suppose qu’ils savent ce qu’ils font. Doc2vec, si vous faites référence à la mise en œuvre du vecteur de paragraphe de Mikolov, effectue SGD séparément sur chaque document. Donc c'est très lent.
Simon
@ SlaterVictoroff Je pense que c'est trop énoncer des choses pour dire que c'est surapprentissage. On sait que LDA est médiocre pour les cas de recherche / recherche d’information et de recommandation. De manière empirique, il a été démontré que la LSA fonctionnait beaucoup mieux et cela correspond aussi à ma propre expérience car j’aime valider ces résultats avec nos propres données. Les versions de Doc2Vec effectuent une descente de gradient par document, cela dépend de l'algorithme utilisé dans Doc2Vec, car il fait généralement référence à de nombreux algorithmes différents.
Simon
3

L'état de la technique semble être un "vecteur de paragraphe" introduit dans un article récent: http://cs.stanford.edu/~quocle/ paragraph_vector.pdf . La distance cosinus / euclidienne entre les vecteurs de paragraphe fonctionnerait probablement mieux que toute autre approche. Ce n'est probablement pas encore faisable à cause du manque d'implémentations open source.

La meilleure chose à faire est la distance en cosinus entre les vecteurs LSA ou en cosinus entre les vecteurs BOW bruts. Parfois, il est préférable de choisir différents systèmes de pondération, tels que TF-IDF.

utilisateur1133029
la source
Notez mes commentaires ci-dessous sur l’évolutivité des vecteurs de paragraphe. Cette technique semble très prometteuse, mais elle est difficile à mettre en œuvre et ne s’adapte pas du tout, car vous créez un SGD distinct pour chaque document, ce qui est très coûteux, si je me souviens bien du document.
Simon
1

Il est utile d’avoir dans votre sac d’outils la famille des algorithmes de hachage sensibles à la localité . Cette famille n'est pas du tout sémantique. En fait, considérez le texte comme une séquence de bits. Je trouve cela utile dans les ensembles de données altérés lorsque le même texte apparaît plusieurs fois avec de légères différences.

Vous pouvez utiliser ssdeep (basé sur Nilsimsa hash ) pour identifier ces documents. Ssdeep était initialement prévu pour le domaine du spam. Les spammeurs apportent souvent de petites modifications au message (ajout d’un espace) afin d’empêcher toute détection par une signature exacte (par exemple, md5 ).

Étant donné que de nombreuses versions d'un document presque identique dans le même ensemble de données vont causer des dégâts considérables aux méthodes statistiques qui y seront appliquées, effectuer un tel nettoyage peut s'avérer très bénéfique.

DaL
la source