Я бы попробовал «сложить». Это относится к тому, чтобы взять один новый документ, добавить его в корпус, а затем запустить выборку Гиббса только по словам в этом новом документе , сохранив тем самым назначения тем старых документов. Это обычно сходится быстро (может быть 5-10-20 итераций), и вам не нужно выбирать старый корпус, поэтому он также работает быстро. В конце у вас будет назначение темы для каждого слова в новом документе. Это даст вам распределение тем в этом документе.
В вашем сэмплере Gibbs вы, вероятно, имеете нечто похожее на следующий код:
// 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
Сгибание такое же, за исключением того, что вы начинаете с существующих матриц, добавляете к ним токены нового документа и делаете выборку только для новых токенов. То есть:
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
пявес шяJвесJ
ΠJпявесJ