Как построить распределение тем документа в структурном R-пакете моделирования темы? - PullRequest
0 голосов
/ 23 октября 2018

Если я использую python Sklearn для моделирования тем LDA, я могу использовать функцию преобразования, чтобы получить «распределение тем документа» результатов LDA, как здесь:

document_topic_distribution = lda_model.transform(document_term_matrix)

Теперь я попробовал такжеR структурная тема модели (STM) пакет, и я хочу получить то же самое.Есть ли какая-нибудь функция в пакете stm, которая может производить то же самое (распространение темы документа)?У меня есть stm-объект, созданный следующим образом:

stm_model <- stm(documents = out$documents, vocab = out$vocab,
                       K = number_of_topics, data = out$meta, 
                       max.em.its = 75, init.type = "Spectral" )

Но я не узнал, как мне получить желаемое распределение из этого объекта.Документация не помогла мне.

1 Ответ

0 голосов
/ 23 октября 2018

Как указал emilliman5, ваш stm_model обеспечивает доступ к базовым параметрам модели, как показано в документации .

Действительно, параметр theta представляет собой матрицу

Количество документов по количеству тем в пропорциях тем.

Это требует некоторого лингвистического анализа: это матрица N_DOCS на N_TOPICS, т. е. она имеет N_DOCS строк, по одному на документ, и N_TOPICS столбцов, по одному на тему.Значения являются пропорциями темы, т.е. если stm_model[1, ] == c(.3, .2, .5), это означает, что Документ 1 - это 30% Тема 1, 20% Тема 2 и 50% Тема 3.

Чтобы выяснить, какая тема доминирует в документе, у вас естьнайти (столбец!) индекс максимального значения, который можно получить, например, вызвав apply с MARGIN=1, который в основном говорит «делайте это по строкам»;which.max просто возвращает индекс максимального значения:

apply(stm_model$theta, MARGIN=1, FUN=which.max)
...