Как построить распределение тем документа в структурном R-пакете моделирования темы?

1

Если я использую 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" )

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

  • 1
    theta слот в результирующем объекте результатов stm - это то, что вам нужно. Из документации theta представляет собой матрицу документов х тем с пропорциями тем для каждого документа.
Теги:
scikit-learn
topic-modeling

1 ответ

1
Лучший ответ

Как указывал 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)
  • 0
    Большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню