Eu tentaria 'dobrar'. Isso se refere a pegar um novo documento, adicioná-lo ao corpus e executar a amostra Gibbs apenas nas palavras desse novo documento , mantendo as atribuições de tópicos dos documentos antigos iguais. Isso geralmente converge rapidamente (talvez de 5 a 10 a 20 iterações), e você não precisa provar seu corpus antigo, por isso também é rápido. No final, você terá a atribuição de tópicos para cada palavra no novo documento. Isso fornecerá a distribuição dos tópicos nesse documento.
No seu amostrador Gibbs, você provavelmente tem algo semelhante ao seguinte 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
A dobragem é a mesma, exceto que você começa com as matrizes existentes, adiciona os tokens do novo documento a eles e faz a amostragem apenas dos novos tokens. Ou seja:
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
piwwijwj
∏jpiwj