На этапе вывода вам в основном нужно назначить темы словам новых документов.
Для замеченных слов используйте оценочную модель для определения вероятностей. Взяв ваш пример, поскольку у вас есть 40 тем, вы уже изучили распределение слов-слов (phi-матрица) во время оценки LDA. Теперь, для слова, увиденного во время обучения, скажем w, возьмите вектор w-й колонки этой матрицы, размер которой равен 40. Этот вектор дает вам вероятности членства класса w в каждой теме. Скажем, например, этот вектор равен (.02, .01, .... .004), что означает, что P (w | t_1) =. 02 и т. Д.
В новом документе, где вы видите это слово w, нарисуйте образец из этого дистрибутива и назначьте ему тему. Ясно, что для этого слова w более вероятно, что он будет привязан к его истинному (технически говорящему, оцениваемому) классу тем, изученному в процессе оценки.
Для слов OOV (т. Е. Слов, которые вы не видели во время обучения), одна из распространенных практик - использовать равномерное распределение, то есть в вашем примере использовать вероятность 1/40 для назначения тем для него.
Редактировать
Фрагмент кода извлекается из JGibbsLDA следующим образом:
for (int m = 0; m < newModel.M; ++m){
for (int n = 0; n < newModel.data.docs[m].length; n++){
// (newz_i = newz[m][n]
// sample from p(z_i|z_-1,w)
int topic = infSampling(m, n);
newModel.z[m].set(n, topic);
}
}//end foreach new doc
Основной шаг в выборке логического вывода состоит в назначении вероятностей для слова ш. Обратите внимание, что эта вероятность частично зависит от оценочной вероятностной вероятности (trnModel.nw [w] [k] кода) и отчасти от новых вероятностей присваивания (newModel.nw [_w] [k]). Для слов OOV, trnModel.nw [w] [k] установлено в 1/K. Эта вероятность не зависит от P (w | d). Вместо этого P (w | d) представляет собой только заднюю вероятность, вычисленную после назначения заданий через выборку Gibbs.
// do multinomial sampling via cummulative method
for (int k = 0; k < newModel.K; k++){
newModel.p[k] = (trnModel.nw[w][k] + newModel.nw[_w][k] + newModel.beta)/(trnModel.nwsum[k] + newModel.nwsum[k] + Vbeta) *
(newModel.nd[m][k] + newModel.alpha)/(newModel.ndsum[m] + Kalpha);
}
но назначить слово к теме вы все еще должны знать, насколько вероятно, эта тема в новом документе, т.е. р (г | г) – DotNet
после назначения вероятностей так, как я уже сказал, что вам нужно recompute theta и phi ... – Debasis
есть публикация, которая обсуждает это более подробно. Спасибо – DotNet