Как найти лучшие меры для lda

Использование примера для lda из пакета Quanteda

require(quanteda)
require(quanteda.corpora)
require(lubridate)
require(topicmodels)
corp_news <- download('data_corpus_guardian')
corp_news_subset <- corpus_subset(corp_news, 'date' >= 2016)
ndoc(corp_news_subset)
dfmat_news <- dfm(corp_news, remove_punct = TRUE, remove = stopwords('en')) %>% 
    dfm_remove(c('*-time', '*-timeUpdated', 'GMT', 'BST')) %>% 
    dfm_trim(min_termfreq = 0.95, termfreq_type = "quantile", 
             max_docfreq = 0.1, docfreq_type = "prop")

dfmat_news <- dfmat_news[ntoken(dfmat_news) > 0,]
dtm <- convert(dfmat_news, to = "topicmodels")
lda <- LDA(dtm, k = 10)

Существуют ли какие-либо показатели, которые могут помочь понять соответствующее количество тем? Мне это нужно, так как мои тексты маленькие и я не знаю, правильное ли исполнение. Также есть ли способ измерить производительность (то есть точность/отзыв), чтобы измерить лучшую производительность lda с различными функциями?


person Nathalie    schedule 12.08.2019    source источник
comment
Как насчет поиска производительности по тематической модели?   -  person Sang won kim    schedule 12.08.2019
comment
@Sangwonkim, вы хотите найти сравнение Gibbs, Recover и RecoverL2 для определенного количества тем?   -  person Nathalie    schedule 12.08.2019
comment
Возможно, это поможет: cran.r-project.org/web/ пакеты/ldatuning/vignettes/topics.html   -  person JBGruber    schedule 12.08.2019


Ответы (1)


Существует несколько метрик Goodness-of-Fit (GoF), которые можно использовать для оценки модели LDA. Наиболее распространенным является недоумение, которое можно вычислить с помощью функции perplexity() в пакете topicmodels. Способ выбора оптимальной модели заключается в поиске «колена» в сюжете. Идея, вытекающая из неконтролируемых методов, состоит в том, чтобы запускать несколько моделей LDA с разными темами. По мере увеличения количества тем недоумение должно уменьшаться. Вы хотите остановиться либо при обнаружении колена, либо при незначительном постепенном уменьшении. Подумайте о графике осыпи, когда вы запускаете анализ главных компонентов.

При этом существует пакет R под названием ldatuning. , который реализует четыре дополнительных показателя на основе кластеризации на основе плотности и расхождения Кульбака-Лейблера. Три из них можно использовать как с выводом VEM, так и с выводом Гиббса, в то время как метод Гриффита может только использоваться с Гиббсом. Для некоторых из этих показателей вы ищете минимум, для других — максимум. Кроме того, вы всегда можете вычислить логарифмическую вероятность вашей модели, которую хотите максимизировать. Способ извлечения вероятности из объекта LDA довольно прост. Предположим, у вас есть модель LDA с именем ldamodel:

loglikelihood = as.numeric(logLik(ldamodel))

Существует много исследований по этой теме. Например, вы можете ознакомиться с этими документами:

Кроме того, вы можете взглянуть на препринт статьи, над которой я работаю вместе с моим коллегой, в которой используются простые параметрические тесты для оценки GoF. Мы также разработали пакет R, который можно использовать со списком моделей LDA класса LDA из topicmodels. Документ можно найти здесь и пакет здесь. Вы более чем можете представить любую проблему, которую вы можете найти в пакете. Документ находится на рассмотрении в данный момент, но опять же, комментарии более чем приветствуются.

Надеюсь это поможет!

person Francesco Grossetti    schedule 01.04.2020