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 LSA
fait qu’elle apprend en fait des représentations internes qui tendent à être plus douces et intuitives. En général, les résultats obtenus LDA
sont 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 Vectorizers
et 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 vectors
de "Google", porte sur les représentations vectorielles denses de documents. La gensim
bibliothèque en python a une implémentation word2vec
assez 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.
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.
la source
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.
la source
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.
la source