5

mi tema es la similitud y la agrupación de (un grupo de) texto (s). En pocas palabras: quiero agrupar los textos recopilados y deben aparecer en grupos significativos al final. Para hacer esto, mi enfoque hasta ahora es el siguiente, mi problema está en la agrupación. El software actual está escrito en php.Agrupación efectiva de una matriz de similitud

1) Similitud: Trato cada documento como una "bolsa de palabras" y convierto palabras en vectores. Yo uso

  • filtrado (sólo palabras "reales")
  • tokenización (oraciones divididos en palabras)
  • derivados (reducir palabras a su forma de base; despalilladora de Porter)
  • poda (corte de las palabras con demasiado alto & baja frecuencia)

como métodos para la reducción de la dimensionalidad. . Después de eso, estoy usando similitud del coseno (como se sugiere/ha descrito en varios sitios en la web and here

El resultado es, pues, una matriz de similitud de esta manera:

 A B C D E 
    A 0 30 51 75 80 
    B X 0 21 55 70 
    C X X 0 25 10 
    D X X X 0 15 
    E X X X X 0 

A ... E son mis textos y el número es la similitud en porcentaje; cuanto más alto, más similares son los textos. Debido a que sim (A, B) == sim (B, A) solo se llena la mitad de la matriz. Entonces, la similitud del Texto A con el Texto D es 71%

Quiero generar a priori un número desconocido (!) De clústeres fuera de esta matriz. Los clústeres deberían representar elementos similares (hasta cierta parada) p criterio) juntos.

que intentaron una implementación básica a mí mismo, que era básicamente como esto (el 60% como umbral de similitud fija)

foreach article 
     get similar entries where sim > 60 
       foreach similar entry 
       check if one of the entries already has a cluster number 
       if no: assign new cluster number to all similar entries 
       if yes: use that number 

Se trabajó (de alguna manera), pero no era bueno en absoluto y los resultados eran a menudo cúmulos de monstruos. Por lo tanto, quiero volver a hacer esto y ya he echado un vistazo a todo tipo de algoritmos de clúster, pero todavía no estoy seguro de cuál funcionará mejor. Creo que debería ser un algoritmo aglomerativo, porque cada par de textos se puede ver como un clúster al principio. Pero aún así las preguntas son qué es el criterio stopp y si el algoritmo debe dividir y/o fusionar los clústeres existentes.

Disculpe si algunas de las cosas parecen básicas, pero soy relativamente nuevo en este campo. Gracias por la ayuda.

+0

¿Recibió alguna buena respuesta? Ni siquiera está claro para mí cuántas dimensiones debería funcionar la agrupación en ... – Jim

Respuesta

1

Solo prueba algunos. Hay tantos algoritmos de agrupamiento, nadie los conocerá a todos. Además, también depende mucho de su conjunto de datos y la estructura de clúster que está allí. Al final, también puede haber solo este grupo de monstruos con respecto a la distancia del coseno y las características de BofW.

2

Como ambos son nuevos en el campo, tienen un número desconocido de conglomerados y ya están utilizando la distancia del coseno, les recomendaría el algoritmo de agrupación FLAME.

Es intuitivo, fácil de implementar y tiene implementaciones en una gran cantidad de idiomas (aunque no PHP, en gran parte porque muy pocas personas usan PHP para la ciencia de datos).

Sin mencionar, en realidad es lo suficientemente bueno para ser utilizado en investigación por un gran número de personas.Si nada más puede hacerse una idea de cuáles son exactamente las deficiencias en este algoritmo de agrupamiento que desea abordar al pasar a otro.

1

Tal vez pueda transformar su matriz de similitud en una matriz de disimilitud como transformar x en 1/x, entonces su problema es agrupar una matriz de disimilitud. Creo que el clúster jerárquico puede funcionar. Estos pueden ayudarlo: hierarchical clustering y Clustering a dissimilarity matrix

Cuestiones relacionadas