Spróbowałbym „złożyć”. Odnosi się to do pobrania jednego nowego dokumentu, dodania go do korpusu, a następnie uruchomienia próbkowania Gibbsa tylko na słowach w tym nowym dokumencie , zachowując przypisania tematyczne starych dokumentów bez zmian. Zwykle zbiega się to szybko (może 5-10-20 iteracji) i nie trzeba próbkować starego korpusu, więc działa również szybko. Na końcu będziesz mieć przypisanie tematu do każdego słowa w nowym dokumencie. Zapewni to dystrybucję tematów w tym dokumencie.
W twoim samplerze Gibbs prawdopodobnie masz coś podobnego do następującego kodu:
// 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
Składanie jest takie samo, z tym wyjątkiem, że zaczynasz od istniejących macierzy, dodajesz do nich tokeny nowego dokumentu i próbkujesz tylko dla nowych tokenów. To znaczy:
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
pjawwjajotwjot
∏jotpjawjot
(uwaga, że prawdopodobnie będzie trzeba obliczyć go w przestrzeni dziennika).