Algoritmos para agrupamiento de texto


17

Tengo el problema de agrupar una gran cantidad de oraciones en grupos por sus significados. Esto es similar a un problema cuando tienes muchas oraciones y quieres agruparlas por sus significados.

¿Qué algoritmos se sugieren para hacer esto? No sé la cantidad de clústeres de antemano (y a medida que llegan más datos, los clústeres también pueden cambiar), ¿qué características se usan normalmente para representar cada oración?

Estoy probando ahora las características más simples con solo una lista de palabras y la distancia entre oraciones definidas como:

ingrese la descripción de la imagen aquí

(A y B son conjuntos de palabras correspondientes en la oración A y B)

¿Tiene sentido?

Estoy tratando de aplicar el algoritmo Mean-Shift de la biblioteca scikit a esta distancia, ya que no requiere una cantidad de grupos por adelantado.

Si alguien aconseja mejores métodos / enfoques para el problema, será muy apreciado ya que todavía soy nuevo en el tema.

Respuestas:


13

Consulte el software de código abierto del grupo Stanford NLP ( http://www-nlp.stanford.edu/software ), en particular, Stanford Classifier ( http://www-nlp.stanford.edu/software/classifier.shtml ) . El software está escrito Java, lo que probablemente lo deleitará, pero también tiene enlaces para algunos otros idiomas. Tenga en cuenta la licencia : si planea usar su código en productos comerciales, debe adquirir una licencia comercial.

Otro conjunto interesante de bibliotecas de código abierto, en mi humilde opinión, adecuado para esta tarea y mucho más, es el marco paralelo para el aprendizaje automático GraphLab ( http://select.cs.cmu.edu/code/graphlab ), que incluye la biblioteca de agrupamiento , implementando varios agrupamientos algoritmos ( http://select.cs.cmu.edu/code/graphlab/clustering.html ). Es especialmente adecuado para un gran volumen de datos (como el que tiene), ya que implementa el MapReducemodelo y, por lo tanto, admite el procesamiento paralelo multinúcleo y multiprocesador .

Lo más probable es que sepa lo siguiente, pero lo mencionaré por si acaso. Natural Language Toolkit (NLTK) para Python( http://www.nltk.org ) contiene módulos para agrupar / clasificar / categorizar texto. Consulte el capítulo correspondiente en NLTK Book: http://www.nltk.org/book/ch06.html .

ACTUALIZAR:

Hablando de algoritmos , parece que ha intentado la mayoría de los scikit-learn, como se ilustra en este ejemplo de extracción de tema: http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf.html . Sin embargo, puede encontrar otras bibliotecas útiles, que implementan una amplia variedad de algoritmos de agrupación , incluida la factorización de matriz no negativa (NMF) . Una de esas bibliotecas es Python Matrix Factorization (PyMF) con página de inicio en https://code.google.com/p/pymf y código fuente en https://github.com/nils-werner/pymf . Otra biblioteca, aún más interesante, también basada en Python, es NIMFA, que implementa varios algoritmos NMF : http://nimfa.biolab.si . Aquí hay un trabajo de investigación que describe NIMFA: http://jmlr.org/papers/volume13/zitnik12a/zitnik12a.pdf . Aquí hay un ejemplo de su documentación, que presenta la solución para un problema de procesamiento de texto muy similar de agrupación de temas : http://nimfa.biolab.si/nimfa.examples.documents.html .


1
Muchas gracias por una respuesta tan detallada. Revisaré todas sus sugerencias, ¡mucho trabajo para probar! También he descubierto que la herramienta carrot2 realmente está haciendo un gran trabajo en la agrupación no supervisada de datos textuales. Enlace de publicación para referencia futura http://project.carrot2.org/
Maxim Galushka

@MaximGalushka: ¡De nada! Tengo curiosidad por conocer sus hallazgos y el progreso que logrará eventualmente. Siéntase libre de publicar aquí o conectarse directamente conmigo.
Aleksandr Blekh
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.