Parametry wejściowe do użycia ukrytego przydziału Dirichleta

17

Podczas korzystania z modelowania tematów (Latent Dirichlet Allocation) liczba tematów jest parametrem wejściowym, który użytkownik musi określić.

Wydaje mi się, że powinniśmy również dostarczyć zbiór kandydujących zestawów tematów, z którymi proces Dirichleta musi próbkować? Czy moje rozumowanie jest prawidłowe? W praktyce, jak skonfigurować tego rodzaju zestaw tematów kandydujących?

użytkownik3125
źródło

Odpowiedzi:

21

O ile wiem, wystarczy podać szereg tematów i korpusu. Nie trzeba określać zestawu tematów-kandydatów, chociaż można go użyć, jak widać w przykładzie zaczynającym się na dole strony 15 Grun i Hornik (2011) .

Zaktualizowano 28 stycznia 14. Teraz robię rzeczy nieco inaczej niż w poniższej metodzie. Zobacz moje aktualne podejście: /programming//a/21394092/1036500

Względnie prosty sposób na znalezienie optymalnej liczby tematów bez danych szkoleniowych polega na przeszukiwaniu modeli o różnej liczbie tematów w celu znalezienia liczby tematów o maksymalnym prawdopodobieństwie dziennika, biorąc pod uwagę dane. Rozważ ten przykład zR

# download and install one of the two R packages for LDA, see a discussion
# of them here: http://stats.stackexchange.com/questions/24441
#
install.packages("topicmodels")
library(topicmodels)
#
# get some of the example data that's bundled with the package
#
data("AssociatedPress", package = "topicmodels")

Zanim przejdziemy do generowania modelu tematów i analizy wyników, musimy zdecydować o liczbie tematów, które model powinien wykorzystać. Oto funkcja umożliwiająca przewijanie różnych numerów tematów, uzyskanie logarytmu prawdopodobieństwa modelu dla każdego numeru tematu i wykreślanie go, abyśmy mogli wybrać najlepszy. Najlepsza liczba tematów to ta o największej wartości prawdopodobieństwa dziennika, aby pobrać przykładowe dane do pakietu. Tutaj wybrałem ocenę każdego modelu, zaczynając od 2 tematów do 100 tematów (zajmie to trochę czasu!).

best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})

Teraz możemy wyodrębnić wartości wiarygodności dziennika dla każdego wygenerowanego modelu i przygotować się do wykreślenia:

best.model.logLik <- as.data.frame(as.matrix(lapply(best.model, logLik)))

best.model.logLik.df <- data.frame(topics=c(2:100), LL=as.numeric(as.matrix(best.model.logLik)))

A teraz zrób wykres, aby zobaczyć, przy jakiej liczbie tematów pojawia się największe prawdopodobieństwo dziennika:

library(ggplot2)
ggplot(best.model.logLik.df, aes(x=topics, y=LL)) + 
  xlab("Number of topics") + ylab("Log likelihood of the model") + 
  geom_line() + 
  theme_bw()  + 
  opts(axis.title.x = theme_text(vjust = -0.25, size = 14)) + 
  opts(axis.title.y = theme_text(size = 14, angle=90))

wprowadź opis zdjęcia tutaj

Wygląda na to, że zawiera od 10 do 20 tematów. Możemy sprawdzić dane, aby znaleźć dokładną liczbę tematów o najwyższym prawdopodobieństwie dziennika:

best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
       topics        LL
12     13           -8525.234

W rezultacie 13 tematów najlepiej pasuje do tych danych. Teraz możemy rozpocząć tworzenie modelu LDA z 13 tematami i zbadanie modelu:

lda_AP <- LDA(AssociatedPress[21:30,], 13)   # generate the model with 13 topics 
get_terms(lda_AP, 5)                         # gets 5 keywords for each topic, just for a quick look
get_topics(lda_AP, 5)                        # gets 5 topic numbers per document

I tak dalej, aby określić atrybuty modelu.

To podejście opiera się na:

Griffiths, TL i M. Steyvers 2004. Znajdowanie tematów naukowych. Postępowania z National Academy of Sciences of the United States of America 101 (Suppl 1): 5228 –5235.

Ben
źródło
Zaktualizowałem kod do tego i zapisałem jako istotę. ma domyślną metodę drukowania. devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k") +1 fajna odpowiedź.
Tyler Rinker,
Zwiększając k w LDA, rozszerzasz przestrzeń parametrów, a modele o mniejszym k są zasadniczo zagnieżdżane w modelach o wyższym k. Zatem LL powinien stale wzrastać z k. To, co dzieje się z małym wybrzuszeniem w okolicy k = 13, jest prawdopodobnie spowodowane tym, że algorytm VEM nie jest zbieżny z globalnym maksimum dla złożonych modeli. Będziesz miał więcej szczęścia z AIC lub BIC.
VitoshKa
Cześć @Ben, naprawdę przydatna odpowiedź. Mam jedno pytanie o to, kiedy oceniamy model z 2-100 tematów: best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)}). Dlaczego wybierasz tylko surowe dane 21:30?
Economist_Ayahuasca
Ponieważ kilka lat temu opublikowałem tę odpowiedź, nie pamiętam dokładnie. Ale prawdopodobnie po to, aby czas obliczeń był krótki!
Ben
1
Teraz jest ten fajny pakiet do obliczenia optymalnej liczby tematów: cran.r-project.org/web/packages/ldatuning
Ben