Hier werden die signifikanten Worte pro twitter-user miteinander verglichen. Das Verfahren zum optischen clustern heißt t-distributed stochastic neighbor embedding (t-SNE).
Jeder Punkt ist ein User mit mindestens 500 Tweets in der Datenbank. Die Farbe zeigt das Alter des accounts (alt, mittel, jung). Mit der Maus hovern zeigt den user-Namen. Um eine Lister der user anzuzeigen, wählt das Box Select tool an der Seite und markiert ein paar Punkte. In der Liste sind dann die top-15 Worte zu sehen, jeweils mit dem Faktor wie viel mal häufiger das Wort gegenüber der Gesammtheit aller Tweets ist.
Bemerkungen
Die gescannten Worte sind alles Substantive die in wiktionary bekannt sind. Die Worte werden, wenn möglich, immer in die Grundform konvertiert, also z.b. der Plural entfernt. Wiktionary kennt auch Substantive wie Ich, Es, Wenn usw. Wenn jemand z.B. seine Sätze oft mit einem großgeschriebenen Ich beginnt, dann kommt das Ich in die Wertung.
Das Clustering basiert also auf einer chaotischen Mischung aus Thematik und Schreibstil. Deshalb ist hier signifikant auch immer kursiv geschrieben. Es ist der Versuch, möglichst ohne Expertenwissen, Texte gegenüberzustellen und deren signifikante Merkmale zu finden, rein anhand der untersuchten Daten, ohne Hilfe von sinnstiftenden Korpora.
Details
Tools
Das Datenset ist ein kleinerer Teil von dem hier. Der Algorithmus ist etwa wie folgt:
basis_count = word frequencies of all tweets for each user: user_count = word frequencies of user's tweets user_hitlist = user_count - 2 * basis_count sort(user_hitlist) limit user_hitlist to 100 for each user: features += vector from user_hitlist PCA transform features with 50 components t-SNE transform features to 2 dimensions
Das heißt, für jeden User werden die Worthäufigkeiten gezählt, die Basishäufigkeit abgezogen und die 100 signifikantesten Worte gespeichert. In diesem Beispiel sind 2870 user gescannt worden und deren jeweilige 100 Worte ergeben zusammen 19735 Worte, die dann verglichen werden.
Jeder user bekommt also einen Vektor der Länge 19735, in dem jeweils die Frequenzen der 100 signifikantesten Worte eingetragen werden. Das folgende Bild zeigt diese Vektoren pro User in Graustufen. Jede Zeile ist ein User.

Die Vektoren werden dann mittels der Principal component analysis (PCA) auf die Länge 30 reduziert. Das macht die spätere Verarbeitung mit tSNE sehr viel schneller. Wir verlassen uns da auf die Fähigkeit der PCA, in einem Datensatz die Punkte zu finden, um die sich alles andere dreht. Oder anders gesagt, die PCA reduziert die Dimensionalität eines Datensatzes und erhält dabei die Komponenten mit der größten Varianz innerhalb des Datensatzes.
Das t-SNE (tatsächlich sprich tiesnie) sorgt dafür, dass Vektoren, die sich ähneln, auch in der Nähe voneinander auf der Karte landen.
Die ganze Prozedur dauert etwa eine Stunde. Das erstellen der t-SNE-Karte aus den vorberechneten Daten läuft allerdings in nur 3 Minuten durch.
Anmerkung zu der plot-library: Bokeh ist eine Python API die Javascript generiert und ist erstmal ganz witzig. Der Output ist in diesem Fall etwa 1.5Mb groß, was blogspot nicht so mochte. Deshalb hab ich die plot-Daten extern hier auf github geladen. Dabei ging aber irgendwie das encoding kaputt..
Keine Kommentare:
Kommentar veröffentlichen