Algoritmi per il clustering di testo


17

Ho un problema nel raggruppare una grande quantità di frasi in gruppi in base al loro significato. Questo è simile a un problema quando hai molte frasi e vuoi raggrupparle in base al loro significato.

Quali algoritmi sono suggeriti per fare questo? Non conosco il numero di cluster in anticipo (e poiché anche i dati in arrivo possono cambiare anche i cluster), quali funzionalità vengono normalmente utilizzate per rappresentare ogni frase?

Sto provando ora le funzionalità più semplici con solo un elenco di parole e la distanza tra le frasi definite come:

inserisci qui la descrizione dell'immagine

(A e B sono insiemi di parole corrispondenti nella frase A e B)

Ha assolutamente senso?

Sto cercando di applicare l' algoritmo Mean-Shift dalla libreria scikit a questa distanza, poiché non richiede il numero di cluster in anticipo.

Se qualcuno consiglierà metodi / approcci migliori per il problema, sarà molto apprezzato dato che sono ancora nuovo sull'argomento.

Risposte:


13

Controllare il software open source del gruppo NLP di Stanford ( http://www-nlp.stanford.edu/software ), in particolare, Stanford Classifier ( http://www-nlp.stanford.edu/software/classifier.shtml ) . Il software è scritto Java, il che probabilmente ti delizierà, ma ha anche collegamenti per alcune altre lingue. Nota, le licenze : se prevedi di utilizzare il loro codice in prodotti commerciali, devi acquisire una licenza commerciale.

Un altro insieme interessante di librerie open source, IMHO adatto a questo compito e molto altro, è il framework parallelo per l'apprendimento automatico GraphLab ( http://select.cs.cmu.edu/code/graphlab ), che include una libreria di clustering , implementando vari clustering algoritmi ( http://select.cs.cmu.edu/code/graphlab/clustering.html ). È particolarmente adatto per volumi di dati molto grandi (come quelli che hai), in quanto implementa il MapReducemodello e, quindi, supporta l' elaborazione parallela multicore e multiprocessore .

Molto probabilmente siete a conoscenza di quanto segue, ma lo citerò per ogni evenienza. Natural Language Toolkit (NLTK) per Python( http://www.nltk.org ) contiene moduli per raggruppare / classificare / classificare il testo. Controllare il capitolo pertinente in NLTK Book: http://www.nltk.org/book/ch06.html .

AGGIORNARE:

Parlando di algoritmi , sembra che tu abbia provato la maggior parte di quelli scikit-learn, come illustrato nell'esempio di estrazione di questo argomento: http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf.html . Tuttavia, potresti trovare utili altre librerie che implementano una vasta gamma di algoritmi di clustering , tra cui la non fattorizzazione a matrice negativa (NMF) . Una di queste librerie è Python Matrix Factorization (PyMF) con home page su https://code.google.com/p/pymf e codice sorgente su https://github.com/nils-werner/pymf . Un'altra libreria ancora più interessante, anch'essa basata su Python, è NIMFA, che implementa vari algoritmi NMF : http://nimfa.biolab.si . Ecco un documento di ricerca che descrive NIMFA: http://jmlr.org/papers/volume13/zitnik12a/zitnik12a.pdf . Ecco un esempio dalla sua documentazione, che presenta la soluzione per un problema di elaborazione del testo molto simile del clustering di argomenti : http://nimfa.biolab.si/nimfa.examples.documents.html .


1
Grazie mille per una risposta così dettagliata. Esaminerò tutti i tuoi suggerimenti, molto lavoro da provare e testare! Inoltre ho scoperto che lo strumento carrot2 sta davvero facendo un ottimo lavoro sul clustering non supervisionato di dati testuali. Link alla pubblicazione per riferimento futuro http://project.carrot2.org/
Maxim Galushka,

@MaximGalushka: Prego! Sono curioso di conoscere le tue scoperte e i progressi che otterrai alla fine. Sentiti libero di postare qui o connettiti direttamente con me.
Aleksandr Blekh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.