Если я использую python Sklearn для моделирования темы LDA, я могу использовать функцию преобразования, чтобы получить "распределение тем в документе" результатов LDA, как здесь:
document_topic_distribution = lda_model.transform(document_term_matrix)
Теперь я попробовал также модель структурных моделей модели (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" )
Но я не узнал, как я могу получить желаемое распространение из этого объекта. Документация мне действительно не помогла.
Как указывал emilliman5, ваш stm_model
обеспечивает доступ к базовым параметрам модели, как показано в документации.
Действительно, theta
параметр является
Количество документов по количеству матриц тем из пропорций тем.
Для этого требуется некоторый лингвистический анализ: это N_DOCS
по матрице N_TOPICS
, то есть в ней есть строки N_DOCS
, по одному на один документ и столбцы N_TOPICS
, по одному на одну тему. Значения - это пропорции темы, т. stm_model[1, ] == c(.3,.2,.5)
Если stm_model[1, ] == c(.3,.2,.5)
, это означает, что Документ 1 составляет 30%. Тема 1, 20% Тема 2 и 50% Тема 3.
Чтобы узнать, какая тема доминирует над документом, вам нужно найти индекс (column!) Максимального значения, который можно получить, например, путем вызова apply
с MARGIN=1
, который в основном говорит "сделайте эту строку по-разному"; which.max
просто возвращает индекс максимального значения:
apply(stm_model$theta, MARGIN=1, FUN=which.max)
theta
слот в результирующем объекте результатов stm - это то, что вам нужно. Из документацииtheta
представляет собой матрицу документов х тем с пропорциями тем для каждого документа.