He utilizado LDA en un corpus de documentos y he encontrado algunos temas. El resultado de mi código son dos matrices que contienen probabilidades; una de probabilidades de temas de documentos y otra de probabilidades de temas de palabras. Pero en realidad no sé cómo utilizar estos resultados para predecir el tema de un nuevo documento. Estoy utilizando el muestreo de Gibbs. ¿Alguien sabe cómo hacerlo? Gracias
Respuesta
¿Demasiados anuncios?Yo probaría a "doblar". Esto se refiere a tomar un nuevo documento, añadirlo al corpus y luego ejecutar el muestreo de Gibbs sólo en las palabras de ese nuevo documento Manteniendo la misma asignación de temas de los documentos antiguos. Esto suele converger rápidamente (tal vez 5-10-20 iteraciones), y no es necesario muestrear el corpus antiguo, por lo que también se ejecuta rápidamente. Al final tendrá la asignación de temas para cada palabra del nuevo documento. Esto le dará la distribución de los temas en ese documento.
En su muestreador de Gibbs, probablemente tenga algo similar al siguiente código:
// This will initialize the matrices of counts, N_tw (topic-word matrix) and N_dt (document-topic matrix)
for doc = 1 to N_Documents
for token = 1 to N_Tokens_In_Document
Assign current token to a random topic, updating the count matrices
end
end
// This will do the Gibbs sampling
for doc = 1 to N_Documents
for token = 1 to N_Tokens_In_Document
Compute probability of current token being assigned to each topic
Sample a topic from this distribution
Assign the token to the new topic, updating the count matrices
end
end
El plegado es lo mismo, salvo que se empieza con las matrices existentes, se les añaden los tokens del nuevo documento y se hace el muestreo sólo para los nuevos tokens. Por ejemplo:
Start with the N_tw and N_dt matrices from the previous step
// This will update the count matrices for folding-in
for token = 1 to N_Tokens_In_New_Document
Assign current token to a random topic, updating the count matrices
end
// This will do the folding-in by Gibbs sampling
for token = 1 to N_Tokens_In_New_Document
Compute probability of current token being assigned to each topic
Sample a topic from this distribution
Assign the token to the new topic, updating the count matrices
end
Si se hace un LDA estándar, es poco probable que un documento entero haya sido generado por un tema. Así que no sé lo útil que es para calcular la probabilidad del documento bajo un tema. Pero si todavía quieres hacerlo, es fácil. A partir de las dos matrices que obtienes puedes calcular $p^i_w$ la probabilidad de la palabra $w$ en el tema $i$ . Tome su nuevo documento; suponga que el $j$ La palabra es $w_j$ . Las palabras son independientes dado el tema, por lo que la probabilidad es sólo $$\prod_j p^i_{w_j}$$ (tenga en cuenta que probablemente tendrá que calcularlo en el espacio del registro).