Themenstabilität in Themenmodellen

23

Ich arbeite an einem Projekt, in dem ich Informationen über den Inhalt einer Reihe von Aufsätzen mit offenem Ende extrahieren möchte. In diesem speziellen Projekt schrieben 148 Personen Aufsätze über eine hypothetische Studentenorganisation als Teil eines größeren Experiments. Obwohl in meinem Fachgebiet (Sozialpsychologie) die typische Methode zur Analyse dieser Daten darin besteht, die Aufsätze von Hand zu codieren, möchte ich dies quantitativ tun, da das Codieren von Hand sowohl arbeitsintensiv als auch für mich etwas zu subjektiv ist Geschmack.

Bei meinen Untersuchungen zur quantitativen Analyse freier Antwortdaten bin ich auf einen Ansatz gestoßen, der als Themenmodellierung (Latent Dirichlet Allocation, LDA) bezeichnet wird. Bei der Themenmodellierung werden Ihre Daten wortreich dargestellt (eine Begriffsdokumentmatrix). Mithilfe von Informationen zu den Wortkoinzidenzen werden die latenten Themen der Daten extrahiert. Dieser Ansatz scheint perfekt für meine Anwendung zu sein.

Leider habe ich bei der Anwendung der Themenmodellierung auf meine Daten zwei Probleme festgestellt:

  1. Die durch die Themenmodellierung aufgedeckten Themen sind manchmal schwer zu interpretieren
  2. Wenn ich meine Themenmodelle mit einem anderen zufälligen Startwert erneut ausführe, scheinen sich die Themen dramatisch zu ändern

Thema 2 betrifft mich besonders. Daher habe ich zwei verwandte Fragen:

  1. Kann ich im LDA-Verfahren etwas tun, um mein Modellanpassungsverfahren im Hinblick auf Interpretierbarkeit und Stabilität zu optimieren? Persönlich interessiert es mich nicht so sehr, das Modell mit der geringsten Ratlosigkeit und / oder der besten Modellanpassung zu finden. Ich möchte dieses Verfahren hauptsächlich verwenden, um zu verstehen und zu charakterisieren, was die Teilnehmer dieser Studie in ihren Aufsätzen geschrieben haben. Ich möchte jedoch sicher nicht, dass meine Ergebnisse ein Artefakt des Zufallssamens sind!
  2. Gibt es im Zusammenhang mit der obigen Frage Standards für die Menge der Daten, die Sie für eine LDA benötigen? Die meisten Arbeiten, die ich mit dieser Methode gesehen habe, analysieren große Korpora (z. B. ein Archiv aller wissenschaftlichen Arbeiten der letzten 20 Jahre), aber da ich experimentelle Daten verwende, ist mein Korpus an Dokumenten viel kleiner.

Ich habe die Essay - Daten geschrieben hier für jeden, der seine oder ihre Hände schmutzig machen will, und ich habe die R - Code eingefügt ich unten bin mit.

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))

Bearbeiten:

Ich habe versucht, Änderungen vorzunehmen, nstartwie von Flounderer in den Kommentaren vorgeschlagen. Leider führt das Setzen nstartvon 1000 , wie unten gezeigt, zu Themen, die von Zufallsstartwert zu Zufallsstartwert sehr stark variieren. Um es noch einmal zu betonen, das Einzige, was ich an der Schätzung der beiden folgenden Modelle ändere, ist der Zufallskeim, der zum Starten der Modellschätzung verwendet wird, und dennoch scheinen die Themen in diesen beiden Läufen überhaupt nicht konsistent zu sein.

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
quelle
2
Vielen Dank für die Weitergabe Ihrer Daten! Es war sehr interessant anzusehen. Ich habe keine gute Antwort auf Ihre Fragen, aber ich möchte einige Dinge vorschlagen. Bei Frage 1 können Sie versuchen, die Steuerparameter in der LDAFunktion im topicmodelsPaket anzupassen . Insbesondere könnten Sie versuchen, nstartgrößer zu machen. Dies ist garantiert , um Ihre Ergebnisse stabiler zu machen, da die LDA-Funktion immer wieder mit verschiedenen zufälligen Seeds ausgeführt wird und dann das beste Ergebnis zurückgibt. Unglücklicherweise führt eine Erhöhung nstartauf beispielsweise 1000 dazu, dass der Algorithmus 1000-mal mehr Arbeit leistet (Fortsetzung)
Flounderer
1
es wird also viel langsamer sein. Und es gibt keine Garantie dafür, dass es stabil genug ist . Betreff: Bei beiden Fragen scheint mir LDA wirklich darauf ausgelegt zu sein, unsichtbare Dokumente zu klassifizieren, wenn zu viele Daten für einen Menschen zur Verarbeitung vorhanden sind. Dafür ist es in Ordnung, wenn der VEM-Algorithmus nur eine "ausreichend gute" Antwort gibt, die von Lauf zu Lauf variieren kann. Für Sie ist dies jedoch nicht wünschenswert, sodass LDA möglicherweise nicht die beste Wahl ist. Es gibt einige ausgezeichnete Alternativen in den ersten paar Vorträge von Shalizi ist natürlich hier: stat.cmu.edu/~cshalizi/350 , zum Beispiel könnten Sie jede (Fortsetzung) konvertieren
Flounderer
2
Schreiben Sie eine Abhandlung zu einem Wortsack-Vektor und führen Sie dann eine PCA zu den Ergebnissen durch. Suchen Sie dann nach Clustern. Ob Ihr Korpus groß genug ist, würde mich, um ehrlich zu sein, nicht wundern, wenn es für VEM zu groß wäre, um verlässliche Ergebnisse zu liefern. Vielleicht bin ich nur bitter, aber ich habe sehr viel Zeit damit verbracht, diese Methode für ein anderes Modell von ähnlichen Autoren zum Laufen zu bringen, und sie war von Lauf zu Lauf völlig inkonsistent, selbst wenn ich winzige Beispiele verwendete. Soweit ich weiß, gibt es nicht viele Veröffentlichungen, in denen die Auswahl von Ausgangspunkten für solche Algorithmen erörtert wird.
Flunder
Flunder, vielen Dank für Ihren Beitrag! Es ist ein wenig enttäuschend für mich zu hören, dass es nicht mehr Richtlinien für LDA gibt, aber ich nehme an, dass dies mit dem Territorium einer unbeaufsichtigten Methode einhergeht. Ich werde versuchen, nstartden Kurs anzupassen und auf der Kurswebsite nachzuschlagen, ob einer von beiden etwas Nützliches ergibt. (Übrigens, wenn Sie Ihre Kommentare in eine Antwort einfügen, werde ich dafür stimmen. Ich würde gerne sehen, ob jemand anders einen Rat hat, bevor ich etwas akzeptiere, aber ich denke, Ihre Kommentare sind mehr als ausreichend, um als Antwort zu gelten.)
Patrick S. Forscher
Ich spüre deinen sozialwissenschaftlichen Grunzschmerz, Patrick, aber ich denke, dein Ansatz ist von Anfang an falsch. Wenn Sie statistische Tests verwenden möchten, müssen Sie Menschen einen Teil davon codieren lassen, um Klassifizierungsfehlerraten zu erhalten. Haben Sie das (persönlich) getan? In diesem Fall wissen Sie, welche Funktionen am wichtigsten sind, und können einen besseren Algorithmus entwerfen / auswählen.
Indolering

Antworten:

6

Aus Neugier wendete ich einen Clustering-Algorithmus an, an dem ich an diesem Datensatz gearbeitet habe.

Ich habe die Ergebnisse vorübergehend hier veröffentlicht (wählen Sie den Datensatz für die Aufsätze).

Es scheint, dass das Problem nicht die Ausgangspunkte oder der Algorithmus sind, sondern die Daten. Sie können (subjektiv, nach meiner begrenzten Erfahrung) auch mit 147 Instanzen vernünftigerweise gute Cluster erhalten, solange es einige versteckte Themen / Konzepte / Themen / Cluster gibt (wie auch immer Sie es nennen möchten).

Wenn die Daten keine gut getrennten Themen enthalten, erhalten Sie unabhängig vom verwendeten Algorithmus möglicherweise keine guten Antworten.

Siddharth Gopal
quelle
@ Siddharth.Gopal Vielen Dank für die Antwort! Es ist wahr, dass ich eine gewisse Überschneidung in den Clustern erwarten würde, da alle Teilnehmer eine hypothetische Studentenorganisation beschreiben (die wir "BadgerConnect" nannten). Im Gegensatz zu beispielsweise einer Anwendung der Themenmodellierung auf wissenschaftliche Arbeiten, bei denen einige der Themen von Papier zu Papier sehr unterschiedlich sind, sind die Themen alle ein wenig ähnlich. Es ist jedoch richtig, dass einige der Aufsätze für BadgerConnect sind und andere gegen BadgerConnect geschrieben wurden.
Patrick S. Forscher
Es ist auch wahr, dass die Aufsätze in der Art der Argumente, die sie präsentieren, und in der Art und Weise, wie die Argumente präsentiert werden, sehr unterschiedlich sind. Ich möchte, wenn möglich, einen Teil dieser Variabilität erfassen. Wissen Sie, ob es möglich ist, einige dieser Unterscheidungen zu treffen (zumindest den Unterschied zwischen Aufsätzen zugunsten und Aufsätzen gegen dieses hypothetische Studentenprogramm)? Waren Ihre Clustering-Ergebnisse auch stabil, wenn Sie verschiedene zufällige Seeds verwendeten?
Patrick S. Forscher
1
1. Wenn Sie sich nur um die Stabilität des Algorithmus sorgen, führen Sie den Algorithmus mehrmals aus und wählen Sie das Modell mit der höchsten Wahrscheinlichkeit aus.
Siddharth Gopal
1
(obwohl Stabilität hier ein zweitrangiges Problem zu sein scheint). 2. Angesichts Ihrer Beschreibung Ihrer Erwartungen in Bezug auf Argumente und Meinungen ist es in diesem Zusammenhang keine gute Idee, die Aufsätze als Wortsack zu präsentieren. Das Infact-Themenmodell selbst ist möglicherweise kein gutes Werkzeug dafür. Ich würde vorschlagen, dass Sie einige Schlüsselwörter auswählen, die Sie interessieren (wie Rasse, Essen, Wohnheim usw.) und versuchen, das Gefühl des Satzes zu analysieren, in dem das Wort vorkommt. Zum Beispiel schauen Sie sich hier eine Demo an.
Siddharth Gopal
1
Python hat ein exzellentes NLP-Toolkit namens nltk. Vielleicht möchten Sie einen Blick darauf werfen, was es bietet. In Bezug auf tf-idf sollte die Eingabe in LDA "technisch" nur wortweise erfolgen, da die Multinomialverteilung nicht für beliebige reelle Zahlen definiert ist.
Siddharth Gopal
10
  1. Der Begriff "Themen" in sogenannten "Themenmodellen" ist irreführend. Das Modell kennt semantisch kohärente "Themen" überhaupt nicht oder ist nicht darauf ausgelegt, sie zu kennen. Die "Themen" sind nur Verteilungen über Token (Wörter). Mit anderen Worten, das Modell erfasst nur das gleichzeitige Auftreten von Termen höherer Ordnung. Ob diese Strukturen etwas bedeuten oder nicht, ist nicht der Zweck des Modells.

  2. Das "LDA" -Modell besteht aus zwei Teilen (im Wesentlichen allen grafischen Modellen): a) Modelldefinition und b) Implementierung eines Inferenzalgorithmus zum Ableiten / Kombinieren von Modellparametern. Das, was Sie erwähnt haben, kann das Problem des "LDA" -Modells sein oder nicht, kann aber ein Fehler / Fehler / eine Fehlkonfiguration der von Ihnen verwendeten spezifischen Implementierung sein (R-Paket).

  3. Fast alle Implementierungen von "LDA" erfordern eine gewisse Randomisierung. Aufgrund der Art der Inferenzalgorithmen (z. B. MCMC oder Variationsinferenz) erhalten Sie lokale Mindestlösungen oder eine Verteilung vieler Lösungen. Kurz gesagt, was Sie beobachtet haben, wird irgendwie erwartet.

Praktische Vorschläge:

  1. Probieren Sie verschiedene R-Pakete aus: Dieses Paket wird beispielsweise von David Blei's ehemaligem Doktoranden erstellt. Oder versuchen Sie es mit einer anderen Umgebung, wie dieser . Wenn Sie zumindest mit all diesen stabilen Paketen ähnliche Ergebnisse erzielen, verringern Sie das Problem ein wenig.

  2. Versuchen Sie ein bisschen zu spielen, ohne die Stoppwörter zu entfernen. Das Grundprinzip ist, dass diese Stoppwörter eine wichtige Rolle bei der Verknüpfung semantischer Bedeutungen in einem so kleinen Korpus (z. B. etwa 100 Artikel) spielen. Versuchen Sie auch, Dinge nicht zu filtern.

  3. Versuchen Sie, ein wenig mit Hyperparametern zu spielen, beispielsweise mit einer unterschiedlichen Anzahl von Themen.

Artikel über Themenkohärenzen:

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

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

Liangjie Hong
quelle
Vielen Dank für Ihre Antwort. Ich werde nacheinander auf Ihre Kommentare antworten. (1) Ich verstehe, dass das Modell nichts über Themen weiß, aber Ihre Behauptung, dass die von Themenmodellen aufgedeckten Strukturen (und ob diese Strukturen etwas bedeuten, ist nicht der Zweck dieser Modelle) in direktem Widerspruch zu diesem Übersichtsartikel von David Blei steht, der Schöpfer von Themenmodellen. Mir scheint, dass der Zweck von Themenmodellen genau darin besteht, Textdaten zu untersuchen / zu charakterisieren, und genau das möchte ich in diesem Projekt tun.
Patrick S. Forscher
(2) Obwohl es möglich ist, dass meine Ergebnisse auf einen Fehler zurückzuführen sind, ist es meiner Meinung nach wahrscheinlicher, dass sie auf einen Fehler bei mir zurückzuführen sind (und wenn dies der Fall zu sein scheint, sagen Sie es mir bitte!). Ich verwende das topicmodelsPaket in R, das im Wesentlichen eine R-Schnittstelle zu dem von Blei und Kollegen implementierten ursprünglichen Algorithmus ist.
Patrick S. Forscher
(3) Ich weiß, dass LDA eine gewisse Randomisierung erfordert, daher frage ich nicht nach genauen Ergebnissen von Lauf zu Lauf, aber ich halte es für vernünftig, ähnliche Themen mit unterschiedlichen Zufallssamen zu erwarten (in der Tat halte ich dies für eine Standarderwartung, wenn Menschen benutzen Algorithmen, die auf Randomisierung basieren. Was ich wissen möchte, ist, wie man diese Stabilität in den Ergebnissen erreicht.
Patrick S. Forscher
@ PatrickS.Forscher Zu Deinem ersten Kommentar: Nein es ist widersprüchlich. Der Name "Themen" ist das, was wir als Menschen diesen Wortverteilungen Bezeichnungen geben. Diese Clusterstruktur kann sich auf realistische, für den Menschen lesbare Themen beziehen oder nicht. Es gibt eine Reihe von Artikeln, die Kohärenz in Themenmodelle einführen, um das genaue Problem zu mindern.
Liangjie Hong
@ PatrickS.Forscher Zu Ihrem zweiten Kommentar: Probieren Sie eine andere Implementierung aus, um festzustellen, ob Sie ähnliche Ergebnisse erzielen (unzumutbare Ergebnisse) oder nicht. Zum Beispiel UMASS Mallet.
Liangjie Hong