Implementacja modelu tematu z Pythonem (numpy)
Niedawno zaimplementowałem próbkowanie Gibbs dla modelu tematu LDA w Pythonie przy użyciu numpy, przyjmując za punkt odniesienia jakiś kod ze strony. W każdej iteracji próbkowania Gibbs'a usuwamy jedno (bieżące) słowo, próbkujemy nowy temat dla tego słowa zgodnie z późniejszym rozkładem prawdopodobieństwa warunkowego wywnioskowanym z modelu LDA i aktualizujemy liczbę słów-tematów w następujący sposób:
<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>
W powyższym kodzie próbkujemy nowy (pojedynczy) z za pomocą wielomianowej funkcji scipy.
Teraz chcę wdrożyć model wspólnego Sentymentuten papier. Potrzebowałbym następujących struktur do śledzenia potrzebnych liczników:
<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>
A teraz pojawia się problem: w tym samplerze Gibbsa dla każdego słowa widocznego w dokumencie zarówno nowy temat, jak i etykieta sentymentu są teraz próbkowane z warunkowego posterioru (strona 4 równanie 5 papieru). Jak mogę teraz „przetestować te dwie wartości” w Pythonie?
Z góry dziękuję...