Implementando el modelo de tema con Python (numpy)
Recientemente, implementé el modelo Gibbs de muestreo para LDA en Python usando numpy, tomando como referencia algún código de un sitio. En cada iteración del muestreo de Gibbs, eliminamos una palabra (actual), muestreamos un nuevo tema para esa palabra de acuerdo con una distribución de probabilidad condicional posterior deducida del modelo LDA y actualizamos los conteos de palabra-tema, de la siguiente manera:
<code>for m, doc in enumerate(docs): #m: doc id for n, t in enumerate(doc): #n: id of word inside document, t: id of the word globally # discount counts for word t with associated topic z z = z_m_n[m][n] n_m_z[m][z] -= 1 n_z_t[z, t] -= 1 n_z[z] -= 1 n_m[m] -= 1 # sample new topic for multinomial p_z_left = (n_z_t[:, t] + beta) / (n_z + V * beta) p_z_right = (n_m_z[m] + alpha) / ( n_m[m] + alpha * K) p_z = p_z_left * p_z_right p_z /= numpy.sum(p_z) new_z = numpy.random.multinomial(1, p_z).argmax() # set z as the new topic and increment counts z_m_n[m][n] = new_z n_m_z[m][new_z] += 1 n_z_t[new_z, t] += 1 n_z[new_z] += 1 n_m[m] += 1 </code>
En el código anterior, muestreamos una nueva (única) z con la función de scipy multinomial.
Ahora, quiero implementar un modelo de Tema de Sentimiento Conjunto deeste papel. Ahora, necesitaría las siguientes estructuras para realizar un seguimiento de los conteos necesarios:
<code>3D matrix containing # occurrences for a word for each topic, for each sentiment 3D matrix containing # occurrences for a topic, for each sentiment, for each document 2D matrix containing # occurrences for a topic, for each sentiment 2D matrix containing # occurrences for a sentiment for each document </code>
Y ahora viene el problema: en esta muestra de Gibbs, para cada palabra vista en un documento, tanto un tema nuevo como una etiqueta de sentimiento ahora se muestrean desde un condicional posterior (página 4, ecuación 5 del documento). ¿Cómo podría "muestrear esos 2 valores" en Python ahora?
Gracias por adelantado...