Algorithmes pour le clustering de texte

17

J'ai un problème de regrouper une énorme quantité de phrases en groupes par leur signification. Ceci est similaire à un problème lorsque vous avez beaucoup de phrases et que vous souhaitez les regrouper par leur signification.

Quels algorithmes sont suggérés pour ce faire? Je ne connais pas le nombre de clusters à l'avance (et comme de plus en plus de données arrivent, les clusters peuvent également changer), quelles fonctionnalités sont normalement utilisées pour représenter chaque phrase?

J'essaie maintenant les fonctionnalités les plus simples avec juste une liste de mots et la distance entre les phrases définies comme:

entrez la description de l'image ici

(A et B sont des ensembles de mots correspondants dans les phrases A et B)

Est-ce que cela a du sens?

J'essaie d'appliquer l' algorithme Mean-Shift de la bibliothèque scikit à cette distance, car il ne nécessite pas de nombre de clusters à l'avance.

Si quelqu'un conseille de meilleures méthodes / approches pour le problème - il sera très apprécié car je suis encore nouveau sur le sujet.

Maxim Galushka
la source

Réponses:

13

Consultez le logiciel open source du Stanford NLP Group ( http://www-nlp.stanford.edu/software ), en particulier Stanford Classifier ( http://www-nlp.stanford.edu/software/classifier.shtml ) . Le logiciel est écrit Java, ce qui vous ravira probablement, mais a également des liaisons pour d'autres langues. Remarque, la licence - si vous prévoyez d'utiliser leur code dans des produits commerciaux, vous devez acquérir une licence commerciale.

Un autre ensemble intéressant de bibliothèques open source, à mon humble avis adapté à cette tâche et bien plus encore, est le cadre parallèle pour l'apprentissage automatique GraphLab ( http://select.cs.cmu.edu/code/graphlab ), qui comprend une bibliothèque de clustering , implémentant divers clustering algorithmes ( http://select.cs.cmu.edu/code/graphlab/clustering.html ). Il est particulièrement adapté à un très grand volume de données (comme vous l'avez), car il implémente un MapReducemodèle et prend donc en charge le traitement parallèle multicœur et multiprocesseur .

Vous êtes probablement au courant de ce qui suit, mais je le mentionnerai juste au cas où. La boîte à outils du langage naturel (NLTK) pour Python( http://www.nltk.org ) contient des modules pour regrouper / classer / catégoriser le texte. Consultez le chapitre correspondant dans NLTK Book: http://www.nltk.org/book/ch06.html .

MISE À JOUR:

En parlant d' algorithmes , il semble que vous ayez essayé la plupart d'entre eux scikit-learn, comme illustré dans cet exemple d'extraction de rubrique: http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf.html . Cependant, vous pouvez trouver d'autres bibliothèques utiles, qui implémentent une grande variété d' algorithmes de clustering , y compris la factorisation matricielle non négative (NMF) . L'une de ces bibliothèques est Python Matrix Factorization (PyMF) avec la page d'accueil à https://code.google.com/p/pymf et le code source à https://github.com/nils-werner/pymf . Une autre bibliothèque, encore plus intéressante, également basée sur Python, est NIMFA, qui implémente différents algorithmes NMF : http://nimfa.biolab.si . Voici un document de recherche décrivant NIMFA: http://jmlr.org/papers/volume13/zitnik12a/zitnik12a.pdf . Voici un exemple tiré de sa documentation, qui présente la solution à un problème de traitement de texte très similaire du clustering de rubriques : http://nimfa.biolab.si/nimfa.examples.documents.html .

Aleksandr Blekh
la source
1
Merci beaucoup pour cette réponse détaillée. Je vais passer en revue toutes vos suggestions, beaucoup de travail pour essayer et tester! J'ai également constaté que l'outil carrot2 fait vraiment du bon travail sur le clustering non supervisé de données textuelles. Lien de publication pour référence future http://project.carrot2.org/
Maxim Galushka
@MaximGalushka: Vous êtes les bienvenus! Je suis curieux de connaître vos découvertes et les progrès que vous réaliserez éventuellement. N'hésitez pas à poster ici ou à vous connecter directement avec moi.
Aleksandr Blekh