Sentiment Analysis in der Praxis

Politische Tweets auf Emotionen hin analysieren

Die Sentiment Analysis ist eine Methode, um Stimmungen, Meinungen, Haltungen oder Emotionen in einem Text zu identifizieren. Häufig angewendet wird sie im wirtschaftlichen Bereich in Bezug auf Produkte und deren Reviews. Anwendbar ist das Verfahren jedoch auch auf Social-Media-Inhalte, wie zum Beispiel Tweets. Die Sentiment Analysis kann so auch zur Ergänzung sozialwissenschaftlicher Forschung eingesetzt werden.

Der in diesem Blogpost exemplarisch vorgestellten Sentiment Analysis liegt eine sozialwissenschaftliche Fragestellung zu Emotionen im politischen Diskurs zugrunde. In den letzten Jahren ist der politischen und medialen Debatte die Emotion Wut spürbarer geworden. Gleichzeitig wurden vermehrt die Ängste und Sorgen der Bevölkerung thematisiert. Diese Emotionen stehen häufig im Zusammenhang mit Themen, die auch auf der Agenda der AfD zu finden sind. Die Frage ist nun: Lassen sich diese Emotionen in Tweets der AfD auffinden? Und wenn ja, sind sie stärker ausgeprägt als bei einer Partei der Mitte wie der SPD? Die zugrundeliegende Hypothese ist, dass aufseiten der AfD mehr Wut und Angst transportiert wird als in den Tweets der SPD.

Kleiner Spoiler vorweg: Ja, es ist möglich, die Emotionen in den Tweets zu finden. Dies gelingt sogar mit wenig Aufwand und einem relativ simplen Algorithmus. Wie die Sentiment Analysis umsetzbar ist und welche Ergebnisse dabei herauskommen, erkläre ich im Folgenden.

Welches Verfahren wählen?

Um eine Sentiment Analysis durchzuführen, ist der Einsatz von verschiedenen Verfahren möglich. Dazu gehören Machine-Learning-Ansätze (z.B. Latent Semantic Analysis) sowie regel- und lexikonbasierte Verfahren. In diesem Paper werden verschiedene Verfahren einem praktischen Vergleich unterzogen.

Bei der Latent Semantic Analysis werden die Worte eines Text in einem Vektorraum abgebildet, sodass über Vektoren die Nähe der Wörter zueinander bestimmt werden kann. Ein simpleres Verfahren ist der lexikonbasierte Ansatz, der – wie der Name schon sagt – mithilfe von Lexika versucht, bestimmte Wörter mit eindeutiger Zuordnung zu einer Emotion im Text aufzufinden, und den Text anhand dieser Wörter zu klassifizieren. Erweitert werden kann dieser Ansatz dann noch um Regeln, um beispielsweise die Satzstruktur zu analysieren oder Negationen zu erkennen.

Zur Durchführung der Sentiment Analysis habe ich mich für den simpleren lexikonbasierten Ansatz entschieden. Ein vielversprechendes anderes Verfahren für das Problem ist der Latent-Semantic-Analysis-Ansatz.

Sentiment Analysis praktisch angewandt

Um eine Sentiment Analysis durchzuführen, werden zunächst einmal Daten benötigt, auf die diese angewandt werden kann. In unserem Fall sind das die Tweets der Politikerinnen und Politiker, auf die mithilfe der Twitter API zugegriffen wird. Die API bietet an, die Tweets von einer Liste von Accounts in Echtzeit zu streamen. Wenn die Daten dann einmal gesammelt sind, können sie der Sentiment Analysis unterzogen werden.

Datenstrukturen und Emotionen

Um lexikonbasiert die Tweets zu analysieren, muss festgelegt sein, auf welche Weise die Tweets den Emotionen zugeordnet werden. Ich habe mich dafür entschieden, den Tweets mehrdimensionale Emotionscores zuzuweisen. Die Dimensionen repräsentieren dabei die sechs Basisemotionen Wut, Ekel, Freude, Angst, Traurigkeit und Überraschung. Die deutschen Emotionslexika, die ich als Grundlage für die Analyse verwendet habe, sind in diesem Open Source Repository zu finden. Als Datentyp wird ein Emotionsvektor verwendet, der die sechs Emotionen enthält. Ein Tweet, der beispielsweise sowohl ein Wort aus dem Wut-Lexikon als auch ein Wort aus dem Traurigkeits-Lexikon enthält, hätte also den Emotionsvektor V = [0.2, 0.0, 0.0, 0.0, 0.0, 0.2, 0.0]. Die Ausprägungen der einzelnen Emotionscores sind abhängig von der Anzahl der in dem Tweet enthalten Emotionswörter und von der Länge des Tweets. Die Tweetlänge wird mit einbezogen, damit längere Tweets mit vielen emotionalen Wörtern nicht automatisch einen höheren Score bekommen als kürzere Tweets mit emotionalen Wörtern.

Implementierungsbeispiel: Berechnung der Emotionscores

Die der Analyse zugrunde liegende Formel und die Ausgabe des Emotionsvektors für jeden Tweet ist in der Analyse-Anwendung folgendermaßen implementiert:

def calculateEmotionScore(emotion: Emotion, tweet: Tweet): Double = {
  val dictionary = dictionaries(emotion)
  val tweetWords = tokenizer.tokenize(tweet)
  val germanStemmer = new GermanStemmer
  val numberOfWords = tweetWords.length
  val sumOfMatchedWords = tweetWords.map { word =>
    val stemmedWord: String = stem(germanStemmer, word)
    if(dictionary.contains(stemmedWord)) {
      logger.info("Matching word: " + stemmedWord + " (in Emotion " + emotion + ")")
      1
    }
    else {
      0
    }
  }.sum
  sumOfMatchedWords.toDouble/numberOfWords.toDouble
}
Codebeispiel für die Berechnung der Emotionscores

Im Code tauchen die Begriffe Stemming und Tokenizer auf. Diese Begriffe kommen aus dem Feld des Natural Language Processing. Der Tokenizer zerlegt die Tweets in einzelne Wörter. Mit dem automatisierten Stemming wird eine künstliche Stammform der Wörter erzeugt, damit gebeugte Wörter alle entsprechend des Lexikoneintrags erkannt werden.

Auswertung der Emotionscores

Die Emotionscores müssen weiter ausgewertet, zusammengefasst und verglichen werden, um Erkenntnisse aus ihnen gewinnen zu können. Dazu eignen sich graphische und mathematisch-statistische Python-Libraries wie Matplotlib und SciPy sehr gut. Dies ist eine mit Matplotlib erzeugte Grafik, die die Scores von AfD und SPD für die Emotion Angst auf einer Zeitachse darstellt:

Plot Angst im Untersuchungszeitraum August bis September 2017
Plot Angst im Untersuchungszeitraum August bis September 2017

Ergebnisse der Sentiment Analysis

Die Auswertung ergibt signifikante statistische Unterschiede bei den Emotionen Wut und Angst zwischen den beiden Parteien. In beiden Dimensionen liegen die Werte der AfD über denen der SPD, also ganz wie in der vorab geäußerten Hypothese angenommen. Die verwendeten statistischen Tests sind der Mann-Whitney U Test und der Chi-Quadrat-Test, die sich für nicht-normalverteilte Stichproben gut eignen. Sie sind im Statistikteil der SciPy-Library verfügbar.

Dass ein Unterschied gefunden wurde, erklärt natürlich noch nicht, warum die Politikerinnen und Politiker wütend und ängstlich sind. Einen Ansatz zur Erklärung gibt es in diesem Paper von Floris Biskamp.

Ein interessanter Nebenaspekt in der Auswertung ergibt sich bei den anderen Emotionen: Es gab zu Beginn gar keine Hypothese, auf welcher Seite die Werte höher ausfallen könnten. Die explorative Untersuchung zeigt beispielsweise deutlich höhere Freude-Werte bei der SPD als bei der AfD. Ein Blick in die Daten erklärt das Phänomen zum Teil damit, dass die SPD-Politiker*innen sich gegenseitig Nachrichten zukommen lassen wie:

fröhlicher gruß karsten

oder

Einfach toll! Bei uns in Lübeck sind die Jusos super aktiv. Da macht Wahlkampf richtig Spaß.

Diese Tweets werden richtigerweise als freudige Tweets erkannt. Wegen dieser und weiterer ähnlicher Nachrichten hat die SPD signifikant höhere Freude-Werte.

Auch beim “Ekel” zeigt sich in der Auswertung das Phänomen, dass anhand der geplotteten Werte reale Ereignisse sichtbar gemacht werden können. Ein Peak am 27. August 2017 aufseiten der SPD ergibt sich daraus, dass der AfD-Politiker Alexander Gauland die SPD-Politikerin Aydan Özuğuz verbal angegriffen hatte. Die SPD reagierte entsprechend mit Nachrichten wie:

Pfui Deibel

und

dieser gauland ist ein mieser, dreckiger hetzer.

Im Anschluss griff auch die AfD diese Wortwahl auf und bezog sich damit umgekehrt auf die SPD, sodass auch hier ein Peak zu verzeichnen war.

Fazit

Insgesamt lässt sich anhand dieses praktischen Beispiels zeigen, dass man mit relativ einfachen Mitteln eine Sentiment Analysis durchführen kann, um Emotionen in Tweets zu erkennen. Nach der initialen Datensammlung und den Überlegungen, wie genau die Daten analysiert werden sollen, ist die Analyse-Anwendung mithilfe des lexikonbasierten Ansatzes schnell implementiert. Und der simple Algorithmus schneidet gar nicht so schlecht ab: Stichprobenartige Blicke in die Daten bestätigen die errechneten Emotionscores. Auch die zu Beginn formulierte Hypothese lässt sich durch die Untersuchung bestätigen: In den Tweets der AfD ist mehr Wut und Angst aufzufinden als in denen der SPD.

Ein weiterer Punkt ist, dass mithilfe der automatisierten Erkennung von Emotionen soziologische und politikwissenschaftliche Untersuchungen ergänzt werden können. Man stelle sich nur vor, ein einzelner Mensch müsste die ca. 33.000 Tweets händisch durchlesen und kategorisieren. Das will man nun wirklich niemandem zumuten.

TAGS

Kommentare

Um die Kommentare zu sehen, bitte unserer Cookie Vereinbarung zustimmen. Mehr lesen