Quiero usar la asignación de Dirichlet latente para un proyecto y estoy usando Python con la biblioteca gensim. Después de encontrar los temas, me gustaría agrupar los documentos usando un algoritmo como k-means (Idealmente, me gustaría usar uno bueno para la superposición de grupos, por lo que cualquier recomendación es bienvenida). Logré obtener los temas pero están en forma de:
0.041 * Ministro + 0.041 * Clave + 0.041 * momentos + 0.041 * controvertido + 0.041 * Prime
Para aplicar un algoritmo de agrupamiento y corregirme si me equivoco, creo que debería encontrar una manera de representar cada palabra como un número usando tfidf o word2vec.
¿Tiene alguna idea de cómo podría "quitar" la información textual de, por ejemplo, una lista, para hacerlo y luego volver a colocarla para hacer la multiplicación adecuada?
Por ejemplo, tal como lo veo si la palabra Ministro tiene un peso tfidf de 0.042 y así sucesivamente para cualquier otra palabra dentro del mismo tema, debería calcular algo como:
0.041 * 0.42 + ... + 0.041 * tfidf (Prime) y obtenga un resultado que luego se utilizará para agrupar los resultados.
Gracias por tu tiempo.
fuente
Respuestas:
Suponiendo que LDA produjo una lista de temas y puso una puntuación en cada tema para cada documento, podría representar el documento y sus puntuaciones como un vector:
Para obtener los puntajes de cada documento, puede ejecutar el documento. como una bolsa de palabras, a través de un modelo LDA entrenado. De la documentación de gensim:
Luego, podría ejecutar k-means en esta matriz y debería agrupar documentos que son similares. K-means por defecto es un algoritmo de agrupamiento duro que implica que clasifica cada documento en un clúster. Podría usar mecanismos de agrupación suaves que le darán una puntuación de probabilidad de que un documento se ajuste dentro de un grupo; esto se llama fuzzy k-means . https://gist.github.com/mblondel/1451300 es una esencia de Python que muestra cómo puedes hacerlo con scikit learn.
ps: no puedo publicar más de 2 enlaces
fuente
Como complemento a la respuesta anterior, es mejor que no solo ejecute kmeans directamente en los datos de composición derivados de la distribución lda topic-doc, sino que utilice alguna transformación de datos de composición para proyectarlos en el espacio euclidiano como ilr o clr.
( Ejemplo )
fuente