Stabilność tematu w modelach tematycznych

23

Pracuję nad projektem, w którym chcę wyodrębnić trochę informacji o zawartości serii esejów otwartych. W tym konkretnym projekcie 148 osób napisało eseje o hipotetycznej organizacji studenckiej w ramach większego eksperymentu. Chociaż w mojej dziedzinie (psychologia społeczna) typowym sposobem analizy tych danych byłoby ręczne kodowanie esejów, chciałbym to zrobić ilościowo, ponieważ ręczne kodowanie jest zarówno pracochłonne, jak i zbyt subiektywne dla mojego smak.

Podczas moich badań nad sposobami ilościowej analizy danych dotyczących swobodnej odpowiedzi natknąłem się na podejście zwane modelowaniem tematów (lub Latent Dirichlet Allocation lub LDA). Modelowanie tematów polega na przedstawianiu danych w postaci worka słów (matrycy dokumentów-terminów) i wykorzystuje informacje o współwystępowaniu słów w celu wydobycia ukrytych tematów danych. To podejście wydaje się idealne dla mojej aplikacji.

Niestety, kiedy zastosowałem modelowanie tematów do moich danych, odkryłem dwa problemy:

  1. Tematy odkryte przez modelowanie tematów są czasami trudne do interpretacji
  2. Gdy ponownie uruchamiam modele tematów z innym losowym ziarnem, tematy wydają się dramatycznie zmieniać

Szczególnie dotyczy mnie problem 2. Dlatego mam dwa powiązane pytania:

  1. Czy jest coś, co mogę zrobić w procedurze LDA, aby zoptymalizować procedurę dopasowania modelu pod kątem interpretacji i stabilności? Osobiście nie dbam tak bardzo o znalezienie modelu o najmniejszym zakłopotaniu i / lub najlepszym dopasowaniu modelu - chcę przede wszystkim skorzystać z tej procedury, aby pomóc mi zrozumieć i scharakteryzować to, co napisali uczestnicy tego badania w swoich esejach. Jednak z pewnością nie chcę, aby moje wyniki były artefaktem losowego nasienia!
  2. Czy w związku z powyższym pytaniem istnieją jakieś standardy dotyczące ilości danych potrzebnych do wykonania LDA? Większość artykułów, które widziałem przy użyciu tej metody, analizuje duże ciała (np. Archiwum wszystkich artykułów naukowych z ostatnich 20 lat), ale ponieważ używam danych eksperymentalnych, mój zbiór dokumentów jest znacznie mniejszy.

Opublikowałem tutaj esej dla każdego, kto chce ubrudzić sobie ręce, i wkleiłem poniżej kod R, którego używam.

require(tm)
require(topicmodels)

# Create a corpus from the essay 
c <- Corpus(DataframeSource(essays))
inspect(c)

# Remove punctuation and put the words in lower case
c <- tm_map(c, removePunctuation)
c <- tm_map(c, tolower)

# Create a DocumentTermMatrix.  The stopwords are the LIWC function word categories
# I have a copy of the LIWC dictionary, but if you want to do a similar analysis,
# use the default stop words in tm
dtm <- DocumentTermMatrix(c, control = list(stopwords = 
  c(dict$funct, dict$pronoun, dict$ppron, dict$i, dict$we, dict$you, dict$shehe, 
    dict$they, dict$inpers, dict$article, dict$aux)))

# Term frequency inverse-document frequency to select the desired words
term_tfidf <- tapply(dtm$v/rowSums(as.matrix(dtm))[dtm$i], dtm$j, mean) * log2(nDocs(dtm)/colSums(as.matrix(dtm)))
summary(term_tfidf)

dtm <- dtm[, term_tfidf >= 0.04]

lda <- LDA(dtm, k = 5, seed = 532)
perplexity(lda)
(terms <- terms(lda, 10))
(topics <- topics(lda))

Edytować:

Próbowałem modyfikować nstartzgodnie z sugestią Flounderer w komentarzach. Niestety, jak pokazano poniżej, nawet ustawienie nstart1000 powoduje, że tematy różnią się dość radykalnie od losowych nasion do losowych nasion. Żeby jeszcze raz podkreślić, jedyną rzeczą, którą zmieniam w estymacji dwóch poniższych modeli, jest losowe ziarno użyte do rozpoczęcia estymacji modelu, a jednak tematy nie wydają się wcale spójne w tych dwóch seriach.

lda <- LDA(dtm, k = 5, seed = 535, control = list(nstart = 1000))
(terms <- terms(lda, 10))

      Topic 1         Topic 2      Topic 3      Topic 4       Topic 5      
 [1,] "international" "ethnicity"  "free"       "credit"      "kind"       
 [2,] "communicate"   "true"       "team"       "mandatory"   "bridge"     
 [3,] "gain"          "asians"     "cooperate"  "music"       "close"      
 [4,] "use"           "hand"       "order"      "seen"        "deal"       
 [5,] "big"           "hold"       "play"       "barrier"     "designed"   
 [6,] "communication" "effective"  "big"        "stereotypes" "effort"     
 [7,] "america"       "emphasis"   "beginning"  "asians"      "implemented"
 [8,] "chinese"       "halls"      "china"      "fantastic"   "websites"   
 [9,] "ethnicity"     "minorities" "difference" "focusing"    "planned"    
[10,] "networks"      "population" "easier"     "force"       "body"

lda <- LDA(dtm, k = 5, seed = 536, control = list(nstart = 1000))
(terms <- terms(lda, 10))

      Topic 1       Topic 2         Topic 3        Topic 4       Topic 5    
 [1,] "kind"        "international" "issue"        "willing"     "play"     
 [2,] "easier"      "ethnicity"     "close"        "use"         "trying"   
 [3,] "gain"        "communication" "currently"    "hand"        "unity"    
 [4,] "websites"    "communicate"   "implemented"  "networks"    "decision" 
 [5,] "credit"      "bridge"        "particularly" "stereotypes" "gap"      
 [6,] "effort"      "america"       "credit"       "communicate" "normally" 
 [7,] "barriers"    "connection"    "fulfill"      "came"        "asians"   
 [8,] "effects"     "kind"          "grew"         "asians"      "created"  
 [9,] "established" "order"         "perspectives" "big"         "effective"
[10,] "strangers"   "skills"        "big"          "budget"      "prejudice"
Patrick S. Forscher
źródło
2
Dziękujemy za udostępnienie danych! To było bardzo interesujące. Nie mam dobrej odpowiedzi na twoje pytania, ale chcę zasugerować kilka rzeczy. W przypadku pytania 1 możesz spróbować dostosować parametry sterowania w LDAfunkcji w topicmodelspakiecie. W szczególności możesz spróbować nstartpowiększyć. To jest gwarantowane , aby swoje wyniki bardziej stabilne, ponieważ funkcja LDA będzie po prostu uruchomić w kółko z różnych losowych nasion, a następnie powrót najlepszy wynik. Niestety, zwiększając nstartdo, powiedzmy, 1000 sprawi, że algorytm nie 1000 razy więcej pracy (ciąg dalszy)
Flounderer
1
więc będzie znacznie wolniej. I nie ma gwarancji, że będzie wystarczająco stabilny . Re: oba pytania, wydaje mi się, że LDA ma naprawdę na celu klasyfikację niewidzialnych dokumentów, gdy jest zbyt wiele danych do przetworzenia przez człowieka. W tym celu jest OK, jeśli algorytm VEM daje tylko „wystarczająco dobrą” odpowiedź, która może różnić się w zależności od przebiegu. Ale dla ciebie nie jest to pożądane, więc LDA może nie być najlepszym wyborem. Istnieje kilka doskonałych alternatyw w pierwszych kilku wykładach kursu Shalizi tutaj: stat.cmu.edu/~cshalizi/350 , na przykład, możesz konwertować każdy (ciągdalszy)
Flądrowiec
2
esej do wektora worka słów, a następnie wykonaj PCA na wynikach, a następnie poszukaj klastrów. Jeśli chodzi o to, czy twój korpus jest wystarczająco duży, szczerze mówiąc, nie zdziwiłbym się, gdyby był zbyt duży, aby VEM mógł dać wiarygodne wyniki. Być może jestem po prostu zgorzkniały, ale spędziłem ogromną ilość czasu próbując sprawić, by ta metoda działała na innym modelu przez podobnych autorów, i była całkowicie niespójna w różnych biegach, nawet przy użyciu drobnych przykładów. O ile mi wiadomo, nie ma wielu artykułów omawiających wybór punktów początkowych dla takich algorytmów.
Flądrowiec
Flądrze, dziękuję bardzo za Twój wkład! To trochę rozczarowujące, gdy słyszę, że nie ma więcej wytycznych dotyczących LDA, ale przypuszczam, że pochodzi to z terytorium metody bez nadzoru. Spróbuję dostosować nstartstronę internetową kursu i sprawdzić, czy któraś z nich przynosi coś pożytecznego. (BTW, jeśli wstawisz swoje komentarze w odpowiedzi, zagłosuję za nią. Chciałbym sprawdzić, czy ktoś jeszcze ma porady, zanim cokolwiek zaakceptuję, ale myślę, że twoje komentarze są więcej niż wystarczające, aby uznać je za odpowiedź).
Patrick S. Forscher
Wydaje mi się, że twój chory na punkcie nauk społecznych, Patrick, ale myślę, że twoje podejście jest złe na początek. Jeśli chcesz korzystać z testów statystycznych, musisz mieć część ludzi, aby kodowali ich część, aby uzyskać wskaźniki błędów klasyfikacji, czy (osobiście) to zrobiłeś? Jeśli tak, to będziesz wiedział, które funkcje są najbardziej widoczne i możesz zaprojektować / wybrać lepszy algorytm.
Indolering

Odpowiedzi:

6

Dla własnej ciekawości zastosowałem algorytm grupowania, nad którym pracowałem w tym zbiorze danych.

Mam chwilowo położyć się wynikami tutaj (wybierz zestaw danych eseje).

Wygląda na to, że problemem nie są punkty początkowe ani algorytm, ale dane. Możesz „racjonalnie” (subiektywnie, z mojego ograniczonego doświadczenia) uzyskać dobre klastry nawet w 147 przypadkach, o ile istnieją jakieś ukryte tematy / koncepcje / tematy / klastry (jakkolwiek chcesz nazwać).

Jeśli dane nie mają dobrze oddzielonych tematów, niezależnie od używanego algorytmu możesz nie uzyskać dobrych odpowiedzi.

Siddharth Gopal
źródło
@ Siddharth.Gopal Dziękuję bardzo za odpowiedź! To prawda, że ​​spodziewałbym się nakładania w klastrach, biorąc pod uwagę, że wszyscy uczestnicy opisują jedną hipotetyczną organizację studencką (którą nazwaliśmy „BadgerConnect”). W przeciwieństwie do, na przykład, zastosowania modelowania tematów w artykułach naukowych, w których niektóre tematy znacznie różnią się w zależności od papieru, wszystkie są nieco podobne. Jednak prawdą jest, że niektóre eseje są na korzyść BadgerConnect, a niektóre są napisane przeciwko BadgerConnect.
Patrick S. Forscher,
Prawdą jest również to, że eseje różnią się znacznie pod względem rodzaju przedstawianych argumentów i sposobu ich przedstawiania. Chciałbym uchwycić część tej zmienności, jeśli to możliwe. Czy masz pojęcie, czy możliwe jest wyłapanie niektórych z tych różnic (przynajmniej różnica między esejami na korzyść a esejami przeciwko temu hipotetycznemu programowi studenckiemu)? Czy twoje wyniki grupowania były stabilne, gdy użyłeś różnych losowych nasion?
Patrick S. Forscher,
1
1. Jeśli martwisz się wyłącznie o stabilność algorytmu - spróbuj uruchomić algorytm wiele razy i wybierz model o najwyższym prawdopodobieństwie.
Siddharth Gopal
1
(chociaż stabilność wydaje się tutaj drugorzędną kwestią). 2. Biorąc pod uwagę opis oczekiwań w zakresie argumentów i opinii, reprezentowanie esejów jako woreczka słów nie jest dobrym pomysłem w tym kontekście. Rzeczywisty model tematyczny może nie być dobrym narzędziem do tego. Sugerowałbym, abyś wybrał kilka słów kluczowych, które Cię interesują (np. Rasa, jedzenie, akademik itp.) I spróbowałbyś przeanalizować sentyment zdania, w którym słowo to występuje. Na przykład spójrz tutaj na wersję demonstracyjną.
Siddharth Gopal
1
Python ma doskonały zestaw narzędzi NLP o nazwie nltk. Możesz rzucić okiem na to, co oferuje. W odniesieniu do tf-idf, „technicznie”, dane wejściowe do LDA powinny być tylko liczbą słów, ponieważ rozkład wielomianowy nie jest zdefiniowany dla dowolnych liczb rzeczywistych.
Siddharth Gopal
10
  1. Pojęcie „tematów” w tak zwanych „modelach tematycznych” jest mylące. Model nie zna lub nie jest przeznaczony do poznania semantycznie spójnych „tematów”. „Tematy” to tylko rozkłady między tokenami (słowami). Innymi słowy, model po prostu przechwytuje współwystępowanie terminów wysokiego rzędu. To, czy te struktury coś znaczą, czy nie, nie jest celem modelu.

  2. Model „LDA” składa się z dwóch części (zasadniczo wszystkich modeli graficznych): a) definicji modelu ib) implementacji algorytmu wnioskowania do parametrów modelu wnioskowania / nieruchomości. Rzecz, o której wspomniałeś, może, ale nie musi, być problemem modelu „LDA”, ale może to być błąd / błąd / błędna konfiguracja konkretnej implementacji, której użyłeś (pakiet R).

  3. Prawie wszystkie implementacje „LDA” wymagają pewnej randomizacji. Z natury algorytmów wnioskowania (np. MCMC lub wnioskowania wariacyjnego) otrzymasz lokalne minimalne rozwiązania lub rozkład wielu rozwiązań. Krótko mówiąc, to, co zaobserwowałeś, jest w jakiś sposób oczekiwane.

Praktyczne sugestie:

  1. Wypróbuj różne pakiety R: Na przykład ten pakiet jest robiony przez byłego doktora Davida Blei. Lub nawet wypróbuj inne środowisko, takie jak to . Jeśli uzyskasz podobne wyniki ze wszystkich tych stabilnych pakietów, przynajmniej trochę zmniejszysz problem.

  2. Spróbuj zagrać trochę bez usuwania słów stop. Uzasadnieniem jest to, że te słowa-stopki odgrywają ważną rolę w łączeniu znaczeń semantycznych w tak małym korpusie (np. Około 100 artykułów). Spróbuj także nie filtrować rzeczy.

  3. Spróbuj zagrać z hiperparametrami, takimi jak różna liczba tematów.

Artykuły na temat spójności tematów:

  1. http://www.aclweb.org/anthology-new/D/D12/D12-1087.pdf

  2. http://people.cs.umass.edu/~wallach/publications/mimno11optimizing.pdf

Liangjie Hong
źródło
Dzięki za twoją odpowiedź. Odpowiem na twoje komentarze pojedynczo. (1) Rozumiem, że model nie wie nic na tematy, ale twoje twierdzenie, że struktury odkryte przez modele tematyczne (i to, czy te struktury nic nie znaczą, nie jest celem tych modeli) jest bezpośrednio sprzeczne z tym artykułem recenzowanym przez Davida Blei, twórca modeli tematycznych. Wydaje mi się, że celem modeli tematycznych jest właśnie pomoc w eksploracji / charakteryzacji danych tekstowych, co właśnie chcę zrobić w tym projekcie.
Patrick S. Forscher,
(2) Chociaż możliwe jest, że moje wyniki są spowodowane błędem, myślę, że bardziej prawdopodobne jest, że wynikają one z jakiegoś błędu po mojej stronie (a jeśli tak, to proszę, powiedz mi!). Korzystam z topicmodelspakietu w języku R, który jest zasadniczo interfejsem R do oryginalnego algorytmu zaimplementowanego przez Blei i współpracowników.
Patrick S. Forscher,
(3) Wiem, że LDA wymaga pewnej randomizacji, więc nie pytam o dokładne wyniki od uruchomienia do uruchomienia, ale myślę, że uzasadnione jest oczekiwanie podobnych tematów przy użyciu różnych losowych nasion (w rzeczywistości uważam, że jest to standardowe oczekiwanie, gdy ludzie używają algorytmów opartych na randomizacji). Chcę wiedzieć, jak osiągnąć wspomnianą stabilność wyników.
Patrick S. Forscher,
@ PatrickS.Forscher Do pierwszego komentarza: Nie. Jest to sprzeczne. Nazwa „tematy” to, co my, ludzie, przypisujemy etykietom do tych rozkładów słów. Te struktury klastrowe mogą, ale nie muszą być związane z rzeczywistymi tematami czytelnymi dla ludzi. Istnieje wiele artykułów, które wprowadzają spójność modeli tematycznych w celu złagodzenia dokładnego problemu.
Liangjie Hong
@ PatrickS.Forscher Do drugiego komentarza: Wypróbuj inną implementację, aby zobaczyć, czy uzyskasz podobne (nieuzasadnione wyniki), czy nie. Na przykład młotek UMASS.
Liangjie Hong