Master-Arbeit - Hochschule für Technik und Wirtschaft Berlin
Transcrição
Master-Arbeit - Hochschule für Technik und Wirtschaft Berlin
Hochschule für Technik und Wirtschaft Berlin Freie wissenschaftliche Arbeit zur Erlangung des akademischen Grades Master of Science in Wirtschaftsinformatik Sentiment Analyse in Apache Spark Masterthesis im Fachbereich Wirtschaftswissenschaften II im Studiengang Wirtschaftsinformatik der Hochschule für Technik und Wirtschaft Berlin vorgelegt von: Andreas Becker Ostseestraße 67 10409 Berlin 528204 Erstbetreuer: Prof. Dr. Ingo Claßen Zweitbetreuer: Prof. Dr. Christian Herta Abgabetermin: 16.03.2014 Abstract Abstract Diese Arbeit beschäftigt sich mit dem Thema Sentiment Analyse im Big Data Bereich. Es wird der aktuelle Stand des Forschungsgebiets durch Literaturrecherche erörtert. Des Weiteren wird ein Einblick in das maschinelle Lernen und die technischen Grundlagen der Datenspeicherung und –verarbeitung erklärt. In dem praktischen Teil der Arbeit wird Sentiment Klassifikation mit dem naives Bayes-Klassifikator und der Support Vector Machine auf dem Apache Spark Framework durchgeführt. Als Datenbasis dienen hierfür Kundenbewertungen des Onlinehändlers Amazon. Bei der Klassifikation wird das Hauptaugenmerk auf die Performance und Skalierbarkeit des Apache Spark-Frameworks innerhalb eines Computer Clusters gelegt. Dafür werden unterschiedliche Konfigurationen und verschieden große Datasets getestet. Die Ergebnisse der durchgeführten Tests zeigen, dass sich Spark nicht skalieren lässt. Abschließend wird ein einfacher Algorithmus zur Generierung eines Sentiment Lexikons in Spark implementiert. Dabei werden RDDs, also das Speicherkonzept von Spark, genutzt II Inhaltsverzeichnis Inhaltsverzeichnis Abstract .............................................................................................................. II Inhaltsverzeichnis ................................................................................................ I Abbildungsverzeichnis ....................................................................................... III Tabellenverzeichnis ............................................................................................ V Abkürzungsverzeichnis ..................................................................................... VI 1 Einleitung ....................................................................................................... 1 1.1 Ziel und Aufbau ........................................................................................ 2 2 Fachliche Grundlagen .................................................................................... 3 2.1 Sentiment Analyse ................................................................................... 3 2.1.1 Begriffserläuterungen ...................................................................... 4 2.1.2 Aufgaben und Probleme .................................................................. 7 2.1.3 Ebenen der Sentiment Analyse ....................................................... 9 2.1.3.1 Dokumenten-Ebene .......................................................... 9 2.1.3.2 Satz-Ebene ..................................................................... 10 2.1.3.3 Aspekt-Ebene.................................................................. 15 2.1.4 Sentiment Lexikon ......................................................................... 21 2.2 Maschinelles Lernen .............................................................................. 26 2.2.1 Sentiment Klassierung durch überwachtes Lernen ....................... 27 2.2.2 Sentiment Klassierung durch unüberwachtes Lernen ................... 30 2.2.3 Klassifikatoren ............................................................................... 35 2.2.3.1 Naïve Bayes .................................................................... 35 2.2.3.2 Support Vector Machine .................................................. 38 2.2.3.3 Gradientenverfahren ....................................................... 40 2.2.4 Features ........................................................................................ 41 2.2.4.1 Wortart ............................................................................ 41 2.2.4.2 N-Gramme ...................................................................... 47 2.2.4.3 Lemmatisierung............................................................... 48 2.2.4.4 Stimmungsverändernde Wörter ...................................... 48 2.2.4.5 Stimmungswörter und –Sätze ......................................... 49 2.2.4.6 Kompositionelle Regeln .................................................. 49 2.2.4.7 Satz- und Sonderzeichen ................................................ 53 2.2.4.8 Syntakische Abhängigkeiten ........................................... 53 2.2.4.9 TF-IDF-Maß .................................................................... 54 3 Technische Grundlagen ............................................................................... 55 3.1 Daten und Datenspeicher ...................................................................... 55 3.2 Hadoop Distributed File System ............................................................ 59 I Inhaltsverzeichnis 3.3 Apache Spark ........................................................................................ 60 3.3.1 Spark Komponenten und Architektur ............................................. 63 3.3.2 Resilient Distributed Datasets ....................................................... 67 3.3.3 Daten in Apache Spark ................................................................. 69 4 Sentiment Analyse in Apache Spark ............................................................ 72 4.1 Skalierbarkeit der Sentiment Klassifikation ............................................ 72 4.1.1 Vorgehen ....................................................................................... 72 4.1.2 Technische Basis .......................................................................... 73 4.1.3 Datenbasis .................................................................................... 75 4.1.4 Aufbereitung der Daten ................................................................. 77 4.1.5 Klassifikation ................................................................................. 83 4.1.6 Durchführung................................................................................. 84 4.1.7 Bewertung der Ergebnisse ............................................................ 93 4.2 Implementierung eines Algorithmus zur Sentiment Lexikon Generierung98 4.2.1 Grundlage...................................................................................... 98 4.2.2 Datenbasis .................................................................................... 98 4.2.3 Umsetzung .................................................................................... 99 4.2.4 Bewertung ................................................................................... 102 5 Schlussbemerkungen und Ausblick ........................................................... 105 6 Literaturverzeichnis ....................................................................................... VI Anhang ............................................................................................................ XIII A Code der Spark Sentiment Klassifikation .............................................. XIII B Dictionary .............................................................................................. XIV II Abbildungsverzeichnis Abbildungsverzeichnis Abbildung 1 Kundenbewertung Tablet ............................................................... 5 Abbildung 2: LDA Topic Model ......................................................................... 18 Abbildung 3: Schoutens Algorithmus zur Erkennung neuer Aspekte ............... 20 Abbildung 4: Vier Wege um von "good" auf "bad" zu kommen (Godbole) ........ 23 Abbildung 5: Gesichte des maschinellen Lernens ............................................ 26 Abbildung 6: Vergleich von verschiedenen Algorithmen in der Sentiment Klassifikation ................................................................................... 29 Abbildung 7: Hyperebene im Vektorraum mit schmalen und breiten Rand ...... 39 Abbildung 8: Hyperebene in einem nicht linear trennbaren Datensatz ............. 40 Abbildung 9: Bag-of-Words-Modell................................................................... 47 Abbildung 10: Wissenspyramide ...................................................................... 56 Abbildung 11: HDFS-Architektur ...................................................................... 60 Abbildung 12: Ausführungszeigen Spark/Hive im Vergleich ............................. 62 Abbildung 13: Spark Stack ............................................................................... 64 Abbildung 14: Spark Cluster-Architektur .......................................................... 65 Abbildung 15: Jobausführung in einer Spark-Applikation ................................. 66 Abbildung 16: Abhängigkeitsformen von RDDs ................................................ 69 Abbildung 17: Partitionierung einer Datei in HDFS ........................................... 70 Abbildung 18: Architektur des HTW-Cluster ..................................................... 73 Abbildung 19: Aufbau der Datenbasis .............................................................. 77 Abbildung 20: Einlesen der Daten in SciKit Learn ............................................ 78 Abbildung 21: Aufteilung einer Datei in HDFS .................................................. 79 Abbildung 22: Datenvorbereitung Spark ........................................................... 80 Abbildung 23: Funktionen zur Datenvorbereitung in Spark .............................. 81 Abbildung 24: Ermittlung TFIDF in Spark ......................................................... 81 Abbildung 25: Code-Anpassung 1 .................................................................... 87 Abbildung 26: Bayes in Spark .......................................................................... 88 Abbildung 27: Caching in Spark ....................................................................... 91 Abbildung 28: Executoren im Cluster ............................................................... 94 Abbildung 29: Join in Spark .............................................................................. 95 III Abbildungsverzeichnis Abbildung 30: Berechnung des Executor-Speichers ........................................ 97 Abbildung 31: Dictionary: Datenbasis ............................................................... 99 Abbildung 32: Dictionary: Daten einlesen und verteilen ................................... 99 Abbildung 33: Dictionary: Filter....................................................................... 100 Abbildung 34: Dictionary: Filtern von positiven Reviews ................................ 100 Abbildung 35: Dictionary: Filtern von Negation und POS-Tags ...................... 101 Abbildung 36: Dictionary: Funktionen zur Filterung ........................................ 101 Abbildung 37: Dictionary: Berechnung der Wortanzahl .................................. 101 Abbildung 38: Dictionary: Abgleich positiver und negativer Wörter ................ 102 Abbildung 39: Dictionary: Erweiterung der Seeds .......................................... 102 IV Abkürzungsverzeichnis Tabellenverzeichnis Tabelle 1: Begriffe einer Meinung....................................................................... 5 Tabelle 2 Meinung 5-Tupel ................................................................................. 7 Tabelle 3: Aufgaben der Sentiment Analyse ...................................................... 8 Tabelle 4: Extrahierte Aspekte im LDMA-Modell .............................................. 19 Tabelle 5: Synonyme und Antonyme zu "good" (WordNet) .............................. 22 Tabelle 6: Muster zur Extraktion von two-word Phrases (entnommen aus Turney) ........................................................................................................ 31 Tabelle 7: Beispiel zur Bayes-Klassifizierung ................................................... 36 Tabelle 8: Tags der POS-Treebank.................................................................. 44 Tabelle 9: Stimmungsveränderte Wörter .......................................................... 49 Tabelle 10: Vergleich von Speichermedien ...................................................... 58 Tabelle 11: Apache Spark Projekt-Aktivität ...................................................... 61 Tabelle 12: Repräsentationselemente von RDDs ............................................. 68 Tabelle 13: Testsysteme .................................................................................. 74 Tabelle 14: Konfigurationsparameter ............................................................... 75 Tabelle 15: Zusammenfassung Datenbasis ..................................................... 76 Tabelle 16: Tags in Datenbasis ........................................................................ 77 Tabelle 17: Performance-Test 1 ....................................................................... 85 Tabelle 18: Performance-Test 2 ....................................................................... 86 Tabelle 19: Performance-Test 3 ....................................................................... 87 Tabelle 20: Performance-Test 4 ....................................................................... 89 Tabelle 21: Performance-Test 5 ....................................................................... 90 Tabelle 22: Performance-Test 6 ....................................................................... 91 Tabelle 23: Performance-Test 7 ....................................................................... 92 Tabelle 24: Performance-Test 8 ....................................................................... 93 Tabelle 25: Dictionary: gefundene Adjektive .................................................. 103 V Abkürzungsverzeichnis Abkürzungsverzeichnis RDD Resilient Distributed Dataset NLP Natural Language Processing KNN k-Nearest-Neighbour POS Part of Speech LSA Latent Semantic Analysis ESA Explicit Semantic Analysis HDP Hierachi-cal Dirichlet Process LDA Latent Dirichlet Allocation LDMA Latent Dirichlet Markov Allocation SVM Support Vector Machine KI Künstliche Intelligenz PMI Pointwise Mutual Information ONMTF nonnegative tri-factorization model (ONMTF) SSD Solid State Disk RAM Random-Access Memory HDFS Hadoop Distributed File System JSON JavaScript Object Notation XML Extensible Markup Language VI Einleitung 1 Einleitung Die Meinungen anderer Menschen beeinflussen unsere eigenen Entscheidungen und Ansichtsweisen jeden Tag. Für die Geschäftswelt bedeutet das, dass Kunden gerne über die Ansichten anderer Kunden informiert sind. So lesen beispielweise 88% der Befragten einer Studie von 20131 Kundenbewertungen um zu sehen, ob ein lokales Geschäft gut ist. Auch Organisationen haben ein reges Interesse an der Meinung von Menschen. Dies gilt für Unternehmen, die Kundenfeedback sammeln ebenso wie für Nachrichtenmagazine, die über Twitter die Stimmung zu aktuellen Themen sammeln. Dass Meinungen wichtig sind ist schon lange bekannt. Sie werden deswegen gerne gesammelt und ausgewertet. Die klassische Herangehensweise, Meinungen zu sammeln, sind Umfragen und Befragungsbögen. Mit dem Aufkommen des Web 2.0 ergab sich allerdings eine neue Möglichkeit, aktiv Daten nach Meinungen zu durchsuchen: die Sentiment Analyse. Im Internet findet ein reger Informationsaustausch in Blogs, Foren und Bewertungsportalen statt. Es werden riesige Datenmengen2, die potentiell nützliche Informationen unter anderem für Unternehmen, Wissenschaftler, Politiker und Dienstleister enthalten, generiert. Aufgrund dieses Datenvolumen ist es nötig, diese maschinell zu entdecken, analysieren und zu bewerten. Dieser Aufgabe hat sich die Sentiment Analyse gewidmet. In dieser Arbeit wird die Sentiment Analyse in Hinblick auf die Verarbeitung großer Datenmengen und des maschinellen Lernens betrachtet. Dabei wird zunächst auf Grundlage einer intensiven Literaturrecherche der Forschungsstand der Sentiment Analyse erläutert und anschließend die Grundlagen des maschinellen Lernens erklärt. In Kontext des Big Data-Bereiche wird am Ende der Arbeit das Framework Apache Spark genutzt, um Aufgaben der Sentiment Analyse auszuführen. Dabei steht vor 1 2 http://searchengineland.com/88-consumers-trust-online-reviews-much-personal-recommendations-195803 allein 500 Millionen Twitter-Posts pro Tag 1 Einleitung allem die Performanz und Skalierbarkeit häufig genutzter Algorithmen der Sentiment Klassifikation im Vordergrund. 1.1 Ziel und Aufbau Mit dieser Arbeit soll gezeigt werden, dass sich Aufgaben der Sentiment Analyse in das Framework Apache Spark implementieren lassen und dort auf eine performante Weise ausgeführt werden können. Um auf dieses Thema hinzuführen, ist diese Arbeit einen theoretischen und praktischen Teil gegliedert. Im theoretischen Teil werden zunächst die Grundlagen der Sentiment Analyse beschrieben. Dabei wird auf verschiedene Bereiche, wie die Aufgaben, Probleme und Vorgehensweisen eingegangen. Neben der Sentiment Analyse werden auch Grundlagen des maschinellen Lernens und der Klassifikation vermittelt. Anschließend wird auf die technischen Hintergründe der Datenspeicherung und Apache Spark eingegangen. Der theoretische Teil mündet in einen praktischen Teil, bei dem Methoden der Sentiment Analyse auf Apache Spark übertragen werden. Dabei wird ein Performance-Vergleich von Spark und Algorithmen zum maschinellen Lernen aus frei verfügbaren Python-Bibliotheken durchgeführt. Es wird getestet, ab welcher Datenmenge sich die Benutzung der Spark Plattform auf einem Cluster sich lohnt und wie gut skalierbar das System ist. Als Datenbasis dienen dafür Kundenbewertungen des Onlinehändlers Amazon, die in einer wissenschaftlichen Arbeit ([76]) gesammelt wurden. 2 Fachliche Grundlagen 2 Fachliche Grundlagen In diesem Kapitel wird auf die fachlichen Grundlagen der Arbeit eingegangen. Dabei wird zuerst die Sentiment Analyse beschrieben. Im Rahmen dieser Arbeit war es nicht möglich, alle Bereiche der Sentiment Analyse abzudecken. Stattdessen soll ein übersichtlicher Einstieg in das Thema gewährt werden, indem die Aufgaben und Herangehensweisen der Sentiment Analyse erklärt werden, sowie ein etwas tieferer Einblick in einige Themenbereiche gegeben wird. Anschließend werden die grundlegenden Konzepte des Maschinenlernens beschrieben. Auch dieses Thema kann natürlich nicht umfassend erläutert werden. Im Bereich des Maschinenlernens werde ich mich deshalb auf ausgewählte Verfahren beschränken und nur die statistischen Grundlagen, die für diese Verfahren notwendig sind, erörtern. 2.1 Sentiment Analyse Die Sentiment Analyse ist ein Themenkomplex aus verschiedenen Bereichen der Computerlinguistik. Ihr Ziel ist es, die Haltung, Stimmung, Meinung und generelle Einstellung von Personen zu verschiedenen Entitäten, wie zum Beispiel Produkten, anderen Personen, Dienstleistungen und aktuellen Themen zu analysieren. In der Wissenschaft ist die Sentiment Analyse laut [33] derzeit eines der aktivsten Forschungsgebiete der linguistischen Datenverarbeitung (Natural Language Processing, kurz NLP). Die ersten Forschungen in diesem Bereich fanden um 2000 statt, jedoch wurde vor allem mit dem Web 2.0 ein starker Anstieg in der Forschung erzielt. Die Stimmungen und Meinungen von Leuten wurden immer interessanter und wichtiger und vor allem leichter zu erreichen. In Foren, Chats und anderen Plattformen, wie Twitter, tauschen sich täglich Millionen von Menschen aus. Wirtschaftliche Wichtigkeit erlangt die Sentiment Analyse im Bereich der Kundenbewertungen. Für viele Hersteller ist das Feedback ihrer Kunden wichtig und Kaufverhalten kann über Bewertungen analysiert werden. 3 Fachliche Grundlagen In diesem Themenbereich werde ich zunächst darauf eingehen, welche Aufgaben die Sentiment Analyse hat und vor welchen Problemen der Analyst steht. Es wird genau definiert, was eine Meinung im Sinne des NLP ist und welche Ebenen der Sentiment Analyse es gibt. Des Weiteren wird erklärt, wie Dokumente nach Meinungen durchsucht und wie diese anschließend analysiert werden können. 2.1.1 Begriffserläuterungen Sentiment Analyse bezieht sich für gewöhnlich auf subjektive Haltungen von Personen oder Meinungen. Im Folgenden wird genau definiert, was eine Meinung beinhaltet. Nach Liu Bing in [31] bildet eine Meinung das 5-Tupel (𝑒𝑖, 𝑎𝑖𝑗 , 𝑠𝑖𝑗𝑘𝑙 , ℎ𝑘 , 𝑡𝑙 ) bei dem 𝑒𝑖 eine Entität bezeichnet, 𝑎𝑖𝑗 ein Aspekt dieser Entität ist und 𝑠𝑖𝑗𝑘𝑙 die negative, positive oder neutrale Stimmung zu dem Aspekt 𝑎𝑖𝑗 der Entität 𝑒𝑖 darstellt. Das 5-Tupel wird durch den Vertreter der Meinung ℎ𝑘 und durch den Zeitpunkt 𝑡𝑙 , an dem die Meinung ausgedrückt wurde, vervollständigt. Dabei gelten für die genannten Begriffe die Definitionen in Tabelle 1. Da die Veröffentlichungen im Bereich der Sentiment Analyse hauptsächlich auf Englisch sind, führt diese Tabelle auch die englischen Fachbegriffe. Bezeichnung Deutsch Bezeichnung lisch Eng- Erklärung Entität Entity, Object, targed Das Ziel, gegen das sich die Meientity nung richtet. Aspekt Aspect, Feature Ein Teilbereich der Entität, wie zum Beispiel das Lenkrad eines Autos. Meinungsvertreter Opinion holder Die Person oder Organisation, die die Meinung ausdrückt. 4 Fachliche Grundlagen Stimmung, nung Mei- Sentiment, Opinion Die subjektive Haltung des Meinungsvertreters zur Entität im Ganzen oder zu einem Aspekt der Entität. Tabelle 1: Begriffe einer Meinung Zur anschaulichen Darstellung werden anhand eines Amazon Reviews zum Tablet Lenovo YOGA Tablet 2 nun einige Meinungs-5-Tupel gebildet. Dafür sind die einzelnen Sätze der Kundenbewertung mit Zahlen versehen. Abbildung 1 Kundenbewertung Tablet „ (1) Das Tablet hat ein sehr gutes und nützliches Design. (2)Der Standfuß lässt so einiges mit sich machen. (3)Stehen, liegen und durch die Runde Form lässt es dich sehr gut halten. (4)Durch die Dolby App können Leute doch sanfte Töne aus dem Tablet abgespielt werden. (5)Ebenfalls hat das Display eine gute Auflösung. (6)Doch es gibt einige Macken. (7)Einige Apps und der Chrome Browser laufen hackelig ab. (8)Videos werden durch das schwache WLAN mit ladekreiseln geprägt und verzögert die Ladezeit. (9)Man darf nicht alles glauben was der Hersteller sagt wie z.B. die Akku-Laufzeit. (10) Tests bestätigen eine enorm kürzere Laufzeit eines Entladezyklusses. (11) Das größte Manko ist, die Speichererweiterung. (12)Eine MicroSD mit einer FAT32 lässt sich nur einfügen. (13) Wenn man weitere Geräte wie externe Festplatte oder USB Stick per OTG einfügen möchte MÜSSEN diese ebenfalls das o.g. Format haben. (15) Zudem darf auch keine SD eingesteckt sein. (16) Mäuse, Tastaturen, PS3 (Samsung Geräte unterstützen den Controller) und Xbox-Controller werden leider auch nicht anerkannt. (17) In allem ein Mittelmäßiges Tablet. (18) Doch für das Geld gibt es bessere.“ 5 Fachliche Grundlagen Zunächst müssen die Entität und ihre Aspekte identifiziert werden. Die Entität 𝑒𝑖 ist das Tablet Lenovo YOGA 2. Diese Information wird aus den Meta-Daten der Kundenbewertung gezogen. Innerhalb der Reviews wird statt der offiziellen Bezeichnung lediglich „das Tablet“ (1) verwendet. Man hat also zwei Synonyme, die einer Entität zugeordnet werden müssen. 𝑒𝑖 = {𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝑇𝑎𝑏𝑙𝑒𝑡} Innerhalb der Kundenbewertung werden neben dem Tablet selber auch verschiedene Aspekte sowohl neutral als auch mit positiver oder negativer Wertung angesprochen. Ein Beispiel hierfür ist das in Satz 1 positiv erwähnte Design, durch das das Triple (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝐷𝑒𝑠𝑖𝑔𝑛, 𝑝𝑜𝑠𝑖𝑡𝑖𝑣) gebildet wird. Der Zeitpunkt, an dem die Meinung geäußert wurde, und der Vertreter der Meinung werden nicht explizit in der Kundenbewertung erwähnt, sondern müssen aus den Metadaten genommen werden. In diesem Beispiel gibt es mit dem Amazon-User „Charalambos“ nur einen Meinungsvertreter. Der Zeitpunkt der Meinungsäußerung ist der 5. Januar 2015. Diese Information ist besonders wichtig, wenn untersucht werden soll, wie sich die Meinungen im Laufe der Zeit geändert haben. Ein vollständiges 5-Tupel wäre demzufolge (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝐷𝑒𝑠𝑖𝑔𝑛, 𝑝𝑜𝑠𝑖𝑡𝑖𝑣, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) In Tabelle 2 werden die restlichen 5-Tupel, die diesem Review entnommen werden können, dargestellt. 5-Tupel Satz (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝐷𝑒𝑠𝑖𝑔𝑛, 𝑝𝑜𝑠𝑖𝑡𝑖𝑣, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) Satz 1 (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝑆𝑡𝑎𝑛𝑑𝑓𝑢ß, 𝑝𝑜𝑠𝑖𝑡𝑖𝑣, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) Satz 2 (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝐷𝑜𝑙𝑏𝑦 𝐴𝑝𝑝, 𝑝𝑜𝑠𝑖𝑡𝑖𝑣, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) Satz 4 6 Fachliche Grundlagen (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝐷𝑖𝑠𝑝𝑙𝑎𝑦, 𝑝𝑜𝑠𝑖𝑡𝑖𝑣, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) Satz 5 (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝑃𝑒𝑟𝑓𝑜𝑟𝑚𝑎𝑛𝑐𝑒, 𝑛𝑒𝑔𝑎𝑡𝑖𝑣, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) Satz 7 (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝑊𝐿𝐴𝑁, 𝑛𝑒𝑔𝑎𝑡𝑖𝑣, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) Satz 8 (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝐴𝑘𝑘𝑢, 𝑛𝑒𝑔𝑎𝑡𝑖𝑣, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) Satz 9 / 10 (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝑆𝑝𝑒𝑖𝑐ℎ𝑒𝑟𝑒𝑟𝑤𝑒𝑖𝑡𝑒𝑟𝑢𝑛𝑔, 𝑛𝑒𝑔𝑎𝑡𝑖𝑣, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) Satz 11 (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝑃𝑒𝑟𝑖𝑝ℎ𝑒𝑟𝑖𝑒𝑎𝑛𝑏𝑖𝑛𝑑𝑢𝑛𝑔, 𝑛𝑒𝑔𝑎𝑡𝑖𝑣, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) Satz 16 (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝑇𝑎𝑏𝑙𝑒𝑡, 𝑛𝑒𝑢𝑡𝑟𝑎𝑙, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) Satz 17 (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝑃𝑟𝑒𝑖𝑠, 𝑛𝑒𝑔𝑎𝑡𝑖𝑣, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) Satz 18 (𝐿𝑒𝑛𝑜𝑣𝑜 𝑌𝑜𝑔𝑎 𝑇𝑎𝑏𝑙𝑒𝑡 2, 𝑇𝑎𝑏𝑙𝑒𝑡, 𝑛𝑒𝑔𝑎𝑡𝑖𝑣, 𝐶ℎ𝑎𝑟𝑎𝑙𝑎𝑚𝑏𝑜𝑠, 05.01.2015) Satz 18 Tabelle 2 Meinung 5-Tupel 2.1.2 Aufgaben und Probleme Für die Sentiment Analyse ist es zuerst notwendig, die essentiellen Bestandteile des im vorherigen Kapitel definierten 5-Tupel zu finden. Je nach Ebene der Sentiment Analyse (Kapitel 2.1.3) sind allerdings nicht alle Bestandteile notwendig. Wichtig ist zunächst das Finden der Entitäten und ihrer dazugehörigen Aspekte. Auf mögliche Features wird in Kapitel 2.2.4 eingegangen, während die Extraktion dieser Features in Kapitel 2.1.3.2 beschrieben wird. Bereits an dieser Stelle ergeben sich Herausforderungen. Nur die relevanten Entitäten müssen herausgezogen werden 7 Fachliche Grundlagen und, wenn sie wie in Abbildung 1 auch unter Synonymen auftreten, gruppiert werden. Bei den Aspekten verhält es sich ähnlich und es kommt noch dazu, dass Aspekte nicht immer explizit genannt werden (Kapitel 2.1.3.2). Natürlich muss auch in Erfahrung gebracht werden, ob zu den gefundenen Entitäten und Aspekten überhaupt eine Stimmung ausgedrückt wird oder ob schlichtweg Fakten genannt werden. Eine Übersicht über die verschiedenen Aufgaben in den jeweiligen Ebenen wird in [29] gegeben und im Folgenden kurz aufgelistet. Die Tabelle 3 macht deutlich, dass sich die Aufgaben der Sentiment Analyse an den Ebenen orientieren. Die Ebenen werden deswegen in den folgenden Abschnitten genauer erläutert. Ebene Aufgaben DokumentenEbene 1. Klassifizierung von Kundenbewertungen mit den Klassen positiv, neutral, negativ. Satz-Ebene 1. Herausfinden, ob der gegebene Satz subjektiv ist und eine Meinung ausdrückt. 2. Klassifizierung des Satzes mit den Klassen positiv, neutral, negativ. Aspekt-Ebene 1. Aspekte extrahieren 2. Herausfinden, ob die Meinungen zu den Aspekten positiv, neutral, negativ sind. 3. Gruppierung der Aspekte und Zusammenfassung der Meinungen. Tabelle 3: Aufgaben der Sentiment Analyse 8 Fachliche Grundlagen 2.1.3 Ebenen der Sentiment Analyse Man unterscheidet generell drei Ebenen, auch Level genannt, in der Sentiment Analyse. Die gröbste Ebene ist die Dokumenten-Ebene, bei der der gesamte Text nur eine Meinung zu einem Produkt ausdrückt. Dies findet zum Beispiel bei Filmkritiken Anwendung. Etwas feiner ist die Satz-Ebene, bei der jeder Satz einzeln analysiert wird. Häufig reicht aber auch dieser Feinheitsgrad nicht aus, weswegen bei der Analyse auf der Aspekt-Ebene jeder einzelne Aspekt einer Entität betrachtet wird. Im Folgenden werden die Ebenen genauer beschrieben und auf Besonderheiten eingegangen. 2.1.3.1 Dokumenten-Ebene Eine Analyse auf der Dokumenten-Ebene bezieht sich auf das gesamte MeinungsDokument. Es wird untersucht, ob insgesamt ein positives oder negatives Sentiment vorliegt. Eine Analyse auf dieser Ebene ist sinnvoll, wenn nur eine einzige Entität als Untersuchungsobjekt vorliegt. Die Meinung wird nur genauer von einer Instanz vertreten. Dies ist zum Beispiel bei Kundenbewertungen unterschiedlicher Produkte und Dienstleistungen der Fall, da hier meistens nur genau ein Produkt von einer Person bewertet wird. Problematisch wird es, wenn in einem Dokument mehrere Produkte bewertet werden, wie es bei Blog-Beiträgen vorkommt, oder wenn es, wie in Foren, mehrere Meinungsvertreter gibt. “Sentiment classification assumes that the opinion document d (e.g., a product review) expresses opinions on a single entity e and the opinions are from a single opinion holder h.” (Liu Bing, in [61] Seite 422) Das in Kapitel 2.1.1 definierte 5-Tupel wird in diesem Fall vereinfacht dargestellt. (e, allgemein, s, h, t) 9 Fachliche Grundlagen Die Entität e wird von dem Vertreter der Meinung h mit der übergreifenden Stimmung s klassifiziert. Dabei können e, h und t bekannt, unbekannt, relevant oder irrelevant sein. Das Vorgehen bei der Sentiment Analyse entscheidet sich danach, welche Werte s annehmen kann. Man unterscheidet hierbei zwischen kategorischen Werten, wie zum Beispiel positiv und negativ, bei denen ein Klassifizierungsproblem entsteht, und numerischen beziehungsweisen ordinären Werten, wie zum Beispiel 1-10 Sterne, bei denen ein Regressionsproblem entsteht. 2.1.3.2 Satz-Ebene Die Analyse auf der Dokumenten-Ebene ist für viele Anwendungen zu ungenau, da im ganzen Dokument nur eine Meinung ausgedrückt werden kann. Eine genauere Untersuchungsmöglichkeit bietet die Analyse auf der Satz-Ebene. In diesem Fall wird jeder Satz auf eine ausgedrückte Meinung untersucht. Das in Kapitel 2.1.1 definierte 5-Tupel wird auf der Satz-Ebene nicht genutzt. Dies liegt daran, dass die Analyse auf Satz-Ebene nur einen Zwischenschritt darstellt. Wenn der Satz aus dem Dokument gelöst ist, kann der Bezug auf die Entität verloren gehen. Der Satz „Ich mochte es nicht.“ liefert auf Satzebene zwar eine negative Haltung und einen Meinungsvertreter, aber die Entität wird erst deutlich, wenn der Satz im Kontext zu den anderen Sätzen, also auf Dokumentenebene, gesehen wird. Klassifikation auf der Satz-Ebene kann entweder als 3-Klassen-Problem (neutral, negativ, positiv) oder als zweistufiges Problem gesehen werden, bei dem in einem ersten Schritt danach klassifiziert wird, ob ein Satz eine Meinung enthält und im zweiten Schritt, ob diese Meinung positiv oder negativ ist (vgl. Liu). Dieses Vorgehen wird auch als Subjectivity Classification bezeichnet. 10 Fachliche Grundlagen 2.1.3.2.1 Subjectivity Classification Subjectivity Classification ist die Einteilung von Sätze in objektive und subjektive Sätze. Objektive Sätze nennen im Allgemeinen nur Fakten, während subjektive Sätze Meinungen, Stimmungen und Einstellungen bestimmter Personen gegenüber beliebigen Entitäten ausdrücken. Ein guter Indikator für Subjektivität sind Adjektive. Wiebe zeigt in [10] dass in einem Corpus mit mehr objektiven als subjektiven Sätzen die Wahrscheinlichkeit, dass ein Satz subjektiv ist, wenn er ein Adjektiv enthält, bei über 55% liegt. Dennoch kann der Unterschied zwischen einem objektiven und einem subjektiven Satz sehr subtil sein: „Der Fernseher hat ein gutes Bild.“ „Der Fernseher ist ein gutes Gerät, um Filme zu gucken.“ Obwohl beide Sätze das Adjektiv „gut“ enthalten, ist nur der erste subjektiv, während der zweite objektiv ist. Darüber hinaus können auch Substantive der Subjectivity Classification dienen. Riloff et al erreichen in [22] mit dem naïve Bayes Klassifikator (Kapitel 2.2.3.1)und Substantiven als Features eine Genauigkeit von circa 81%. Kamal versucht Subjectivity Classification in [31] durch überwachtes Lernen. Dafür nutzt er Unigrams und die Features TF-IDF, Position, Part-of-Speech, Opinion Indicator Seed Word (Stimmungswörter), Negation und Adverbien. Von den angewandten Klassifikatoren erzielte der naïve Bayes die besten Ergebnisse. Als präzisestes Feature stellte sich Part-of-Speech heraus. Eine weitere Herangehensweise zur Klassierung nach subjektiven und objektiven Sätzen ist in [23] zu finden. Das in den meisten Fällen außer Acht gelassene Feature „Readiblity“ (Lesbarkeit) wird hier zur Klassierung genutzt. Die These dabei ist, dass Sätze mit schlechter Lesbarkeit dazu tendieren, objektiv zu sein. Als Beispiel hierfür kann ein Satz aus dem Wikipedia-Artikel zum Thema „Flash-Speicher“3 dienen: 3 http://de.wikipedia.org/wiki/Flash-Speicher#Funktionsprinzip 11 Fachliche Grundlagen „Anders als das Gate bei normalen MISFETs ist das Floating-Gate von allen anderen Teilen (Kanalgebiet und von Steuer-Gate) durch ein Dielektrikum (derzeit meist Siliziumdioxid) elektrisch isoliert; das Potential auf dem Floating-Gate ist daher im Grunde undefiniert (dies wird auch als schwimmend, englisch floating, bezeichnet).“ Dieser Satz ist nicht leicht verständlich, da er neben einer recht komplexen Struktur auch viele Fachbegriffe enthält. Zum Testen der aufgestellten These werden sechs verschiedene Lesbarkeits-Indikatoren als Feature genutzt. Jeder dieser Indikatoren basiert auf mindestens einem der folgenden Merkmale: 1. 2. 3. 4. 5. Durchschnittlich Wortlänge Durchschnittliche Satzlänge Durchschnittliche Anzahl einsilbiger Wörter pro Satz Durchschnittliche Anzahl mehrsilbiger Wörter pro Satz „Bekanntheit“ der Wörter (Frequenz in Leipzig`s Wortschatz4) Die eigentliche Klassifikation wurde mit einer Support Vector Machine vorgenommen. Obwohl die verwendeten Merkmale als „rather crude“ (Remus) anzusehen sind, konnte mit dem Experiment ein Verhältnis zwischen Lesbarkeit und Subjektivität hergestellt werden. Die Lesbarkeit ist also ein brauchbares Feature für die Subjectivty Classification auf Satz-Ebene. 2.1.3.2.2 Sarkasmus Sarkasmus bezeichnet beißenden Spott und Hohn, der oftmals sehr subtil vermittelt wird und dadurch maschinell besonders schwierig zu erkennen ist. Im Kontext der Sentiment Analyse bewirkt Sarkasmus, dass eine positive Stimmung negativ wird und umgekehrt. Nach Liu in [33] spielt Sarkasmus in Kundenbewertungen eine untergeordnete Rolle, während er online häufig in Diskussionen und Kommentaren anzutreffen ist. 4 http://wortschatz.informatik.uni-leipzig.de/ 12 Fachliche Grundlagen Eine häufige Datenquelle für die Forschung in Sarkasmus-Erkennung ist die OnlinePlattform Twitter. In [51] wurde Sarkamus-Erkennung mithilfe von halb-überwachtem Lernen durchgeführt. Als Datensets dienten zum einen eine Sammlung von 5.9 Millionen TwitterBeiträgen (Tweets) und zum anderen eine Sammlung von 66000 Amazon-Reviews. Zwei Beispielsätze aus den untersuchten Daten zeigen, wie schwierig SarkasmusErkennung sein kann. 1. „thank you Janet Jackson for yet another year of Super Bowl classic rock!“ (Twitter) 2. „[I] Love The Cover“ (Amazon, Buch-Review) Der erste Satz bezieht sich auf den (angeblich) schwachen Super Bowl-Auftritt Janet Jacksons im Jahr 2010. Die negative Haltung wird hier nur durch den Vergleich mit dem viel kritisierten Auftritts im Vorjahr („yet another“) erkennbar. Dennoch gibt es keinen expliziten Verweis darauf, dass das Vorjahr wirklich als negativ einzustufen gilt. Das zweite Beispiel wirkt alleingestellt zunächst durchaus positiv. Die Metadaten enthalten jedoch die Information, dass der Titel der Kundenbewertung „don’t judge a book by its cover“ ist. Durch diese subtile Nutzung der Redewendung, muss der Bewertungstext als negativ angesehen werden. Um diese Herausforderungen zu meistern, wurden in [51] Muster in Sätzen identifiziert. Dafür wurden zunächst spezifische Wörter, wie zum Beispiel Produktnamen, Buchtitel, Autoren und User, durch allgemeine Tags ersetzt. Anschließend wurden die vorkommenden Wörter in high-frequency words (häufig vorkommenden Wörter, kurz HFWs) und content words (Wörter, die nicht so häufig vorkommen, kurz CWs) unterteilt, wobei auch die gesetzten Tags und Satzzeichen als Wörter gelten. Ein Satzmuster kann aus 2-6 HFWs und 1-6 CWs bestehen. Ein einzelner Satz kann also mehrere Muster enthalten, die sich überschneiden können. Nachdem einige Muster aussortiert wurden, wurden die übriggebliebenen Muster als Feature-Vektoren mit den Werten exact Match (alle Teile des Musters treten in der korrekten Reihenfolge ohne zusätzliche Wörter auf), sparse Match (zusätzliche Wörtern können zwischen den einzelnen Teilen des Musters liegen), incomplete Match (nur ein paar Teile des Musters treten auf) und no Match (kein oder nur ein Teil eines Musters) 13 Fachliche Grundlagen genutzt. Zusätzlich wurden die Satzlänge, sowie die Anzahl von Ausrufezeichen, Fragezeichen, Anführungsstrichen und großgeschriebenen Wörtern als generische Feature genutzt. Vor der Durchführung der Klassifikation mit der KNN-Methode, wurde eine Basis, gegen die sich der vorgeschlagene Algorithmus messen muss, gebildet. Diese Basis basiert auf der Annahme, dass klassischer Sarkasmus die Form „das Gegenteil von dem, was gemeint ist, sagen“ annimmt. Sollte eine Amazon-Kundenbewertung einen positiven Text, aber eine negative Sterne-Bewertung (1-3 Sterne) haben, erfüllt sich dieses Schema. Das gleiche gilt für den umgekehrten Fall. Das Ergebnis des Experiments zeigt, dass der Algorithmus der Mustererkennung effektiver als die Basis ist. Die Genauigkeit ist mit 0.76 höher als die der Basis (0.5). Darüber hinaus weisen das F-Maß (Basis 0.24; Experiment 0,788) und die falschen Negative/Positive darauf hin, dass die Annahme, Sarkasmus sei nur das Gegenteil von dem, was gesagt wird, zu trivialisiert ist und die subtileren Formen des Sarkasmus bei der Basis nicht erkannt wurden. Ein weiteres Ergebnis war, dass die Punktation der schwächste Prädikator ist. Die Ausnahme hierbei bilden drei aufeinanderfolgende Punkt („…“), die in Kombination mit anderen Features einen starken Prädikator bilden. Ein weiterer Versuch zur Sarkasmus-Erkennung wurde in [21] unternommen. Es wurde ein Algorithmus entwickelt, der Tweets, die eine positive Stimmung zu einer negativen Situation beinhalten, identifiziert. Dies ist eine sehr spezielle Form des Sarkasmus. Mithilfe eines Bootstrapping-Algorithmus und den Twitter-Hashtags #sarcasm und #sarcastic wurden zunächst sarkastische Tweets gesammelt und dann ausgehend vom Wort „love“, das als das häufigste positive Stimmungswort in sarkastischen Tweets gilt, weitere positive Stimmungswörter und negative Situationen gesammelt. Ein Satz galt dann als sarkastisch, wenn eine negative Situation direkt auf ein positives Stimmungswort fällt. Das Experiment hat gezeigt, dass die Kombination „positive Verbalphrase gefolgt von negativer Situation“ ein guter Hinweis auf Sarkasmus ist, während die Kombination „positive Verbalphrase gefolgt von negativem Sentiment“ weitaus schlechtere Werte erzielte. Dennoch stößt die Methode in einigen Situation an ihre Grenzen. Es wurden zwar Sätze wie 14 Fachliche Grundlagen „I love fighting with the one I love“ „love working on my last day of summer“ „Can´t wait to wake up early to babysit“ als sarkastisch identifiziert, aber es gab auch falsche positive. Dies kommt daher, dass einige Situationen häufig, aber nicht immer, negativ sind (es gibt Menschen, die tatsächlich gerne früh aufstehen). Des Weiteren wurden zu allgemeine Situationen („I love working there“) als sarkastisch eingestuft. 2.1.3.3 Aspekt-Ebene Die Analyse auf der Aspekt-Ebene ist die genaueste Form der Sentiment Analyse. Anders als die Analyse auf der Dokumenten- oder Satz-Ebene, wird bei der AspektEbene das in Kapitel 2.1 definierte 5-Tupel (𝑒𝑖, 𝑎𝑖𝑗 , 𝑠𝑖𝑗𝑘𝑙 , ℎ𝑘 , 𝑡𝑙 ) vollständig genutzt. Konkret bedeutet das, dass nun zu jedem Teil (Aspekt) einer bestimmten Entität, die Stimmung eines Meinungsvertreters zu einem bestimmten Zeitpunkt bestimmt werden kann. Anders als bei der Dokument-Ebene, in der ein komplettes Dokument nur eine Stimmung zu einer Meinung ausdrücken kann, können Meinungen nun differenzierter betrachtet werden. So ist es häufig der Fall, dass, zum Beispiel bei einer Produktbewertung, ein Teilbereich des Produkts als negativ angesehen wurde, obwohl andere Bereiche und das Produkt insgesamt als durchaus positiv gewertet wurden. Nach Liu sind für die Analyse auf der Aspekt-Ebene zwei Schritte, die Aspekt Extraktion und die Sentiment Klassifikation, ausschlaggebend. Die Aspekt Extraktion wird im folgenden Kapitel erklärt, während die Sentiment Klassifikation ein Teil des Kapitels 2.2 ist. 15 Fachliche Grundlagen 2.1.3.3.1 Aspekt Extraktion Der erste Schritt ist zunächst immer das Finden und Extrahieren der einzelnen Aspekte. Man unterscheidet hier zwischen expliziten und impliziten Aspekten. Ein expliziter Aspekt ist im Normallfall ein Substantiv, das den Teilbereich der Entität benennt. Dies könnte im Bereich der Produktbewertungen zum Beispiel „Geschwindigkeit“ oder „Preis“ sein. Implizite Aspekte werden meistens durch andere Wörter beschrieben und nicht ausdrücklich genannt. So könnte der explizite Aspekt „Preis“ implizit durch die Wörter „billig“ oder „teuer“ erwähnt werden, während „Geschwindigkeit“ durch „langsam“ oder „schnell“ genannt werden kann. Für das Finden von expliziten Aspekten werden hauptsächlich vier verschiedene Herangehensweisen genutzt (vgl [33]). Zum einen wird die Extraktion anhand von häufig genutzten Substantiven und Nominalphrasen vollzogen. Im einfachsten Fall wird das hierbei mit einem Part-of-Speech-Tagger bearbeitet und anschließend nach häufig vorkommenden Substantiven und Nominalphrasen gefiltert. Diese Methode funktioniert vor allem bei Kundenbewertungen, da sich das Vokabular generell sehr ähnelt, wenn Menschen über die verschiedenen Aspekte eines Produkts schreiben. Die weniger häufig genutzten Wörter stehen meist nicht im direkten Zusammenhang zum Produkt und unterscheiden sich von Bewertung zu Bewertung stark. In fortgeschrittenen Methoden wird versucht, nur Substantive und Nominalphrasen zu extrahieren, die in SentimentSätze vorkommen oder einem bestimmten Muster folgen. Zum anderen können Aspekte durch ihre Beziehung zu Stimmungswörtern extrahiert werden. Die Stimmungswörter selber sind oft bekannt („großartig“, „schlecht“). Sollten die Aspekte nicht bekannt sein, kommt das dem Stimmungswort am nächsten stehende Substantiv, bzw. die am nächsten stehende Nominalphrase, als Aspekt in Frage. Weiterreichende Extraktion kann hier durch die Erkennung von Dependenzgrammatik erreicht werden. Dieses linguistische Gebiet beschäftigt sich mit der hierarchischen Struktur von Sätzen und den wechselseitigen Beziehungen, 16 Fachliche Grundlagen bzw. Abhängigkeiten, von Wörtern. Zur Erkennung von Dependenzen können spezielle Parser verwendet werden. Topic Models sind statistische Modelle, die vor allem in der Text Klassifizierung für das Finden von Topics, also Themenbereichen, verwendet werden. Man geht dabei davon aus, dass ein Dokument über ein bestimmtes Thema mehr themenspezifische Wörter enthält als ein Dokument, in dem dieses Thema nicht vorkommt. So enthält ein Dokument über das Thema „Essenszubereitung“ wahrscheinlich Wörter wie „kochen“, „braten“ und „schmecken“, während das Thema „Haustiere“ eher Wörter wie „Hund“, „Katze“ oder „Hamsterrad“ enthalten wird. Im Normalfall tauchen in einem Dokument mehrere unterschiedliche Themen auf. Topic Models machen sich diese Eigenschaft zu Nutze, indem sie von der statistischen Verteilung der Wörter auf die Zusammensetzung der Themen schließen. Obwohl Topic Models zunächst nur der Themenerkennung dienen, können sie leicht für die Sentiment Analyse erweitert werden (vgl. [31]). Im Bereich der Aspect Extraction sind die gefundenen topics Aspekte. Allerdings müssen die Modelle hier erweitern werden, da zusätzlich zu den Aspekten auch die Stimmungswörter gefunden werden müssen. Mit Latent Semantic Analysis (LSA), Explicit Semantic Analysis (ESA), Hierachical Dirichlet Process (HDP) und Latent Dirichlet Allocation (LDA) gibt es verschiedene Topic Models, die für die Text Klassifizierung und die Sentiment Analyse genutzt werden. Die klassischen Vorgehensweisen sind hierbei das LSA und das LDA, wobei das LDA, beziehungsweise erweiterte Formen von ihm, das meistgenutzte Model darstellt. Aus diesem Grunde wird im Folgenden kurz genauer auf das LDA eingegangen, während die anderen Modelle zunächst außer Acht gelassen werden. Das Latent Dirichlet Allocation-Modell basiert, wie die anderen Modelle auch, auf einem Bayesschen Netz, in dem die Knoten Zufallsvariablen und die Kanten die Abhängigkeiten zwischen den Knoten beschreiben. Abbildung 2 stellt das LDA graphisch dar. Die schattierten und unschattierten Kreise zeigen beobachtbare und nicht beobachtbare (latente) Variablen, die gerichteten Pfeilen zwischen ihnen die Abhängigkeiten und die Rechtecke, die die Variablen umrunden, deuten eine mehrfache Ausführung der Schritte (die Anzahl wird jeweils durch den Buchstaben im Rahmen gezeigt) an. 17 Fachliche Grundlagen Abbildung 2: LDA Topic Model5 Wenn M die Anzahl der zu untersuchenden Elemente ist, jedes Dokument eine Folge von N Wörtern ist, jedes Wort ein Element aus einem Vokabel-Index mit V unterschiedlichen Elementen und T die Anzahl der Topics ist, verläuft der Algorithmus zur Wortgenerierung so: 1. Für jedes Topic z = {1…K} ziehe die Dirichletverteilung ϕZ ~ Dirchlet (β) 2. Für jedes Dokument m = {1…M} ziehe θm ~ Dirchlet(α) für jedes Wort wi im Dokument m ziehe ein Topic zd,i ~ θm ziehe ein Wort wd,i ~ ϕZ d,i Es sollen also die Verteilung von Topic-Wörtern, die Ausmaße der Topics und weitere Modell-Parameter gefunden werden. In [59] hat das LDA zu einem mit dem Hidden Markov Model verbundenen Topic Model, dem LDMA, erweitert. Das LDMA geht anders als das LDA nicht davon aus, dass Wörter unabhängig voneinander auftreten und ignoriert somit auch die Wortposition. Durch das Hinzufügen einiger Variablen wird bei der Wortgenerierung entschieden, ob ein Wort als Unigramm, Bigramm oder Trigramm erstellt werden soll. Aufeinanderfolgende Wörter haben also generell das gleiche Topic. 5 http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation#mediaviewer/File:Smoothed_LDA.png 18 Fachliche Grundlagen Durch diese Erweiterung war es möglich, in einem Testdatensatz über Kundenbewertungen zu Digitalkameras genauere Aspekte als im LDA zu finden. In Tabelle 4 sind zur Veranschaulichung einige Beispiele abgebildet. Kundenbewertungen zu Canon-Kameras LDMA LDA Canon Canon Canon powershot Powershot Digital zoom Zoom Optical zoom Digital picture quality Picture Photos quality quality Tabelle 4: Extrahierte Aspekte im LDMA-Modell Während es viele Methoden gibt, um explizite Aspekte zu extrahieren, wurden bisher nur wenige Vorschläge der Wissenschaft, implizite Aspekte aus Texten herauszuziehen. Dies liegt unter anderem daran, dass der Großteil der in Kundenbewertungen genannten Aspekte explizit ist. Dennoch gibt es einige Arbeiten, die sich mit diesem Thema beschäftigen. In [66] werden implizite Aspekte mithilfe von Kookkurrenz-Assoziationsanalyse (co-occurrence Association Mining). Dieses Verfahren macht sich die Kookkurrenz, also das gemeinsame Auftreten, von Stimmungswörtern und Aspekten zu nutze. Das Stimmungswort bildet in der Assoziationsregel das Antezedens und der Aspekt die Konsequenz („Wenn [Stimmungswort], dann [Aspekt]“). In einem ersten Schritt werden diese Assoziationsregeln generiert und in einem zweiten Schritt durch Clustering robuster gemacht. Anschließend wird nach Stimmungswörtern gesucht, denen kein expliziter Aspekt zugeordnet wird und anhand der generierten Regeln das beste Cluster und somit der geeignetste Aspekt zugeordnet. Dieses Vorgehen kann ein relativ hohes F-Maß von ca. 74% erreichen und durch das Hinzufügen von Substring-, Abhängigkeits- und topic model-Regeln erweitert 19 Fachliche Grundlagen werden. Allerdings wird es dadurch beschränkt, dass nur implizite Aspekte gefunden werden können, die auch explizit im Dokument vorhanden sind. Als Alternative wurde in [18] ein mehrstufiger Algorithmus vorgeschlagen. Zunächst wird aus einem Trainingsdatensatz eine Liste mit allen einzigartigen impliziten Aspekten F, eine Liste mit allen einzigartigen Lemmata O und eine Kookurrenz-Matrix C aus den impliziten Aspekten und Lemmata mit den Dimensionen |F|x|O| generiert. Darauffolgend wird für jeden potentiellen impliziten Aspekt ein Wert berechnet, der sich aus der Summe der Kookkurrenz jedes Wortes geteilt durch seine Häufigkeit bildet. Für jeden Satz wird der Aspekt ausgewählt, für den der höchste Wert ermittelt wurde und dessen Wert eine vorher festgelegte Grenze überschritten hat. In Pseudocode wird der Algorithmus wie in Abbildung 3 dargestellt. Abbildung 3: Schoutens Algorithmus zur Erkennung neuer Aspekte Diese Methode stellt eine Verbesserung gegenüber anderen Verfahren dar und erreicht generell eine höhere Performance. Des Weiteren muss durch den vorgegeben Grenzwert nicht jeder Satz einen impliziten Aspekt enthalten. Eine Annahme, die der zuvor beschriebene Algorithmus trifft. Nachteilig wirkt sich aus, dass nur maximal 1 Aspekt pro Satz gefunden werden kann und der Grenzwert nicht pro Aspekt gilt. 20 Fachliche Grundlagen 2.1.4 Sentiment Lexikon Ein offensichtliches Konzept der Sentiment Analyse ist es, Wörtern positive, negative und neutrale Stimmungen zuzuordnen. Diese Wörter können in Listen gesammelt und für die weitere Analyse, wie zum Beispiel bei der Klassierung 6, genutzt werden. Nach [33] gibt es grundsätzlich drei Vorgehensweisen, um ein Sentiment Lexikon zu erstellen: manuell, basierend auf Wörterbüchern und basierend auf dem gegeben Text-Korpus. Im manuellen Ansatz wird per Hand eine Liste aus positiven und negativen Wörtern zusammengestellt. Durch die Vielzahl möglicher Wörter ist die Aufgabe sehr zeitund ressourcenintensiv. So gibt es im Englischen über 42 000 Adjektive 7, von denen viele dazu in Frage kommen, Stimmungen auszudrücken. Hinzu kommen nach Substantive und selbst Wörter, die häufig falsch geschrieben werden und dadurch am besten mehrmals in einem Sentiment Lexikon erscheinen müssten („beautiful“, „beautifull“). Aus diesem Grund wird die manuelle Methode eher zu Verifizierung automatisch gesammelter Lexika genutzt. Bei dem auf Wörterbüchern basierenden Ansatz werden zunächst einige Wörter, deren Sentiment bekannt ist, manuell rausgesucht. Diese Wörter werden als Seed bezeichnet. Anschließend wird ein Online-Wörterbuch genutzt, um für die Seeds Synonyme und Gegenteile zu finden. Wenn zum Beispiel „good“ als Seed gewählt und WortNet als Wörterbuch gewählt wird, würde man an die in Tabelle 5 gezeigten Wörter kommen. 6 7 siehe auch Kapitel 2.2.4 zur Feature Selection http://www.oxforddictionaries.com/words/how-many-words-are-there-in-the-english-language 21 Fachliche Grundlagen Good Synonyme Gegenteil bang-up, bully, corking, cracking, bad dandy, great, groovy, keen,neat, nifty, not bad, peachy, slap-up, swell, smashing, old, satisfactory, acceptable, decent, solid, superb, well-behaved, hot, redeeming, serious Tabelle 5: Synonyme und Antonyme zu "good" (WordNet) Diese Wörter werden ins Lexikon aufgenommen. Dabei gilt, dass die Synonyme das gleiche Sentiment ausdrücken und die Gegenteile das gegenteilige Sentiment ausdrücken. Mit den neu gefundenen Wörtern kann nun eine neue Suche im Wörterbuch gestartet werden. So baut sich das Lexikon langsam auf. Am Ende des Prozesses kann das Lexikon manuell auf Korrektheit geprüft werden. Dieses Vorgehen wurde zum Beispiel in [43] und [67] genutzt. Der Nachteil dieser Methode besteht darin, dass der logische Zusammenhang zwischen den Synonymen nachlässt, wenn viele Iterationen durchgeführt werden. Dieses Problem wird in [68] mit dem Beispiel von WordNet aufgefasst. Es ist möglich, mit der Hilfe von Synonymen in nur drei Iterationen von „good“ auf „bad“, also dem Antonym zu kommen (Abbildung 4). 22 Fachliche Grundlagen Abbildung 4: Vier Wege um von "good" auf "bad" zu kommen (Godbole) Um diesem Problem entgegenzuwirken, wurde der Algorithmus so angepasst, dass für jedes gefundene Wort ein Wert berechnet wird. Die gefunden Wörter verlieren an Gewicht, wenn sie über einen langen Pfad (die Sprünge von Wort zu den Synonymen) gefunden wurden. Der wahre Wert jedes Wortes ist die Summe aller Werte über die einzelnen Pfade. Zusätzlich dazu wird geprüft, ob ein genutzter Pfad zwischen positiven und negativen Wörtern wechselt. Pfade werden nur akzeptiert, wenn die Anzahl der Wechsel unterhalb einer bestimmten Grenze bleibt. Des Weiteren werden nur die Synonyme und Antonyme ausgewählt, die in der WordNetListe weit oben stehen. Dieses Vorgehen nutzt die Sortierung von WordNet nach Sense, also der Sinnhaftigkeit, der gegebenen Synonyme und Gegenteile. Zum Schluss werden von den gefundenen Wörtern nur diejenigen genommen, die die höchsten berechneten Werte haben, um nicht eindeutig negative oder positive Wörter ausschließen zu können. Der auf Wörterbüchern basierende Ansatz hat den Vorteil, dass Stimmungswörter recht einfach und schnell gefunden werden können. Allerdings sind die gefundenen Wörter sehr allgemein und nicht auf bestimmten Domänen bezogen. Stimmungswörter können in unterschiedlichen Bereichen andere Bedeutungen haben. So ist das Wort „love“ fast immer positiv, wenn es aber in einem Bericht zu einem Tennisspiel genutzt wird, steht es höchstwahrscheinlich dafür, dass in diesem Spiel keine 23 Fachliche Grundlagen Punkte erzielt wurden. Ein ähnliches Beispiel ist der Nutzung von „loud“. Es ist erwünscht, dass Lautsprecher laut werden können, aber unerwünscht, dass der Kühlschrank laut ist. Um auf dieses Problem besser reagieren zu können, wird statt des Wörterbuchs basierten Ansatz der auf dem Text-Korpus basierende Ansatz genutzt. Der Korpus basierte Ansatz ist angepasster und enthält in der Regel mehr themenspezifische Wörter. Eines der ersten Konzepte für diesen Ansatz wird in [63] vorgeschlagen. Ausgehend von einigen manuell ausgesuchten Adjektiven als Seed, sollten mithilfe bestimmter Regeln neue Adjektive im Korpus gefunden werden. Die Idee hinter diesen Regeln ist, dass zusammenhänge Sätze, Wörter und Satzteile in ihrem Sentiment konsistent sein sollten. Eine der Regeln besagt beispielsweise, dass Adjektive, die mit einem „and“ verbunden sind, die gleiche Stimmung ausdrücken („this refrigerator is quit and spacious“). Ähnliche Regeln wurden für Verbindungen mit or, but, either-or und neither-nor aufgestellt. Da diese Verbindungen in der Realität nicht immer so konsistent sind, wurden anschließend mithilfe eines log-linearen Regressionsmodels die Informationen unterschiedlicher Verbindungen kombiniert, um zu prüfen, ob die verbundenen Adjektive jeweils das gleiche Sentiment haben. Durch Clustering wurden die Adjektive in Subsets mit gleicher Orientierung verteilt und nach Frequenz ausgewählt. Dieses Vorgehen ist eines der Schlüsselkonzepte der Korpus basierten Lexikongenerierung und wurde in mehreren Werken genutzt und erweitert. So wird dieses Vorgehen in [63] angewandt und zusätzlich nach der Kookkurrenz von Wörtern gesucht. Für jedes Wort, das nicht als Seed verwendet wird, wird die Häufigkeit ki(p/n), dass das Wort zusammen mit einem positiven/negativen Seed auftritt, berechnet. Mit der Häufigkeit kann anschließend die Wahrscheinlichkeit der Kookkurrenz ki(p|n) 𝑂𝑝 O p|n = 1− ki(p|n) und das darauf basierende Log-Verhältnis ln 𝑂𝑛 berechnet werden. Dieses Verhältnis bildet den sogenannten polarity score (Polaritätswert). Wörter, mit einem ausreichend hohen Polaritätswert werden mit in das Lexikon aufgenommen. 24 Fachliche Grundlagen Mit diesen beiden Herangehensweisen können zwar gezielt Wörter, die zum Korpus gehören, gefunden werden, aber die Tatsache, dass Wörter je nach Kontext unterschiedliche Bedeutungen haben, bleibt bestehen. Diese Herausforderungen werden in [33] als basic rules of opinion definiert und in dieser Arbeit in Kapitel 2.2.4 in der Featureauswahl beschrieben. Dabei ist vor allem der Teil zu erwünschten und unerwünschten Fakten zu beachten. 25 Fachliche Grundlagen 2.2 Maschinelles Lernen Das Fachgebiet des maschinellen Lernens beschäftigt sich mit der Entwicklung und Analyse von Algorithmen, die Wissen generieren können. Es sollen Muster, Regelmäßigkeiten und Gesetze in Daten erkannt werden und somit ein Schließen auf unbekannte Daten ermöglicht werden. Die Idee des maschinellen Lernens besteht seit es Computer gibt und ist eng an die Entwicklung von künstlicher Intelligenz gebunden. Bereits 1950, vier Jahre nachdem der erste Universalcomputer (ENIAC) in Betrieb genommen wurde, schlug Alan Turing seinen legendären Test vor, um zu sehen, ob Maschinen das Denkvermögen eines Menschen erreichen können. Die Orientierung an der Lernfähigkeit des Menschen blieb jahrelang bestehen. So wurde 1957 das erste neuronale Netz (Perzeptron) von Frank Rosenblatt entwickelt. Das Modell war stark an das menschliche Gehirn mit seinen Neuronen angelehnt. Die Entwicklung im Bereich der KI und des maschinellen Lernens stagnierte anschließend, da Expertensysteme für viele Aufgaben geeigneter waren. Abbildung 5: Gesichte des maschinellen Lernens8 Erst Anfang der 90er Jahre erhielt das Forschungsgebiet wieder neuen Schub. Durch die Einführung der Statistik in das maschinelle Lernen wurde eine neue Herangehensweise geschaffen. Mithilfe von Wahrscheinlichkeitsrechnung und bestimmten Modellen können anhand von Daten Vorsagen getroffen werden. In dieser Zeit wurden viele der heute üblichen Modelle, wie die SVM, Entscheidungsbäume 8 http://www.aboutdm.com/2013/04/history-of-machine-learning.html 26 Fachliche Grundlagen und neuronale Netze entwickelt (siehe Abbildung 6). Der Fokus ging immer weiter auf die Daten statt auf das Wissen. Im Bereich von Big Data ist statistische KI heute der Kernpunkt9. Man unterscheidet hauptsächlich drei Arten vom maschinellen Lernen. Zum einen ist dies das Überwachte Lernen (supervised learning), das auch in der Sentiment Analyse weit gebräuchlich ist. Zum anderen wird auch das Unüberwachte Lernen (unsupervised learning) genutzt. Diese beiden Ansätze werden in den folgenden Kapiteln näher beschrieben. Die dritte Art ist das sogenannte Bestärkte Lernen (reinforcement learning). Hier interagiert eine Software, der Agent, mit einem dynamischen Umfeld, um ein bestimmtes Ziel zu erreichen. Der Agent bekommt keine Rückmeldung wie nah er vom Ziel entfernt ist und wird nicht in seinen Fehlern korrigiert. Er muss also zum einen das, was er bereits weiß, ausnutzen, aber zum anderen auch neue Möglichkeiten testen, um in Zukunft bessere Entscheidungen treffen zu können10. Als Beispiel kann man sich einen Agenten vorstellen, der versucht Tic-Tac-Toe zu erlernen11, indem er das Spiel gegen jemanden spielt. Diese Form des maschinellen Lernens spielt in der Sentiment Analyse eine eher untergeordnete Rolle, weswegen sie im Folgenden nicht genauer erklärt wird. 2.2.1 Sentiment Klassierung durch überwachtes Lernen Das überwachte Lernen erfolgt generell durch die Einteilung der Werte in bestimmte Klassen. Klassen sind disjunkte und aneinander grenzende Intervalle mit Merkmalswerten. Die Einteilung in die Klassen wird als Klassierung bezeichnet. Besonders bei großen Datensets kann die manuelle Klassierung eine lange Zeit beanspruchen. Deswegen werden bestimmte Modelle genutzt, um die Klassierung durch maschinelles Lernen durchführen zu lassen. Ein solches Modell wird als Klassifikator bezeichnet. Im vorhergehenden Kapitel wurden bereits einige Klassifikatoren wie 9 http://www.mlplatform.nl/what-is-machine-learning/ http://webdocs.cs.ualberta.ca/~sutton/book/ebook/node7.html 11 http://www.lwebzem.com/cgi-bin/ttt/ttt.html 10 27 Fachliche Grundlagen die Support Vector Machine oder der Bayes Klassifikator ernannt. Für die Zuordnung zu den Klassen benötigt ein Klassifikator bestimmte Merkmale, anhand derer er die Einteilung vornehmen kann. Solche Merkmale werden im Folgenden auch als Feature(s) bezeichnet. Die Feature-Auswahl ist beim überwachten Lernen durch Klassierung ausschlaggebend. Mögliche Features werden in Kapitel 2.24 besprochen. Sentiment Analyse kann als eine Aufgabe des überwachten Lernens mit drei unterschiedlichen Klassen – positiv, negativ und neutral – formuliert werden. In der Forschung werden häufig Online-Produktbewertungen als Datensatz verwendet, da diese leicht zu bekommen sind und häufig die vom Meinungsvertreter angedachte Gesamtbewertung in Form einer ordinären Bewertung mitliefern. So werden zum Beispiel Produktbewertungen auf Amazon mit 1 bis 5 Sternen bewertet, die dann in die Klassen neutral (3 Sterne), positiv (4 oder 5 Sterne) und negativ (1 oder 2 Sterne) unterteilt werden können. Zur Vereinfachung des Problems kann die neutrale Klasse auch nicht berücksichtigt werden. Die Sentiment Klassifizierung ist der traditionellen Text Klassifizierung (Unterteilung von Dokumenten in verschiedene Themenbereiche wie Sport, Reisen, Wirtschaft) mit dem Unterschied ähnlich, dass Stimmungswörter (z.B. gut, super, schlecht, miserabel) wichtiger als themenspezifische Wörter. Dadurch, dass Sentiment Klassifizierung eine Text Klassifizierung ist (Liu, Seite 31), können alle Klassierungs-Methoden des überwachten Lernens angewandt werden. Für das überwachte Lernen ist ein Trainingsdatensatz, mit dem die angewandten Klassifikatoren trainiert werden können, wichtig. Trainingsdaten müssen oft manuell erstellt werden. In der Wissenschaft gibt es zahlreiche Veröffentlichungen zu verschiedenen Ansätzen in der Sentiment Klassierung durch überwachtes Lernen. Eine gute Übersicht wird in [25] geboten. Hier wird anhand eines Korpus aus Filmkritiken Sentiment Klassierung mit verschiedenen Klassifikatoren und Features durchgeführt. Die Ergebnisse sind in Abbildung 6 zu sehen und werden im Folgenden kurz erklärt. 28 Fachliche Grundlagen Abbildung 6: Vergleich von verschiedenen Algorithmen in der Sentiment Klassifikation Zeile 1 zeigt den ursprünglichen Versuch. Die Filmkritiken wurden in einem Bag-ofWords-Modell zusammengefasst. Das Bag-of-Words-Modell stellt sowohl die Präsenz als auch die Häufigkeit von Unigrammen dar. Die Wörter, die in das Modell aufgenommen wurden, kamen aus einem vordefinierten Wort-Katalog, der zum Beispiel Wörter wie „still“ oder „really stinks“ enthielt. Die getesteten Algorithmen sind der naïve Bayes-Klassifikator (NB), die Support Vector Machine (SVM) und die Maximum-Entropy-Methode (ME), die im Gegensatz zum naïve Bayes kein bestimmtes Verhältnis zwischen den Features voraussetzt. Die ersten beiden Klassifikatoren werden in Kapitel 2.2.3 genauer beschrieben. In Zeile zwei und folgend wird nicht mehr auf die Häufigkeit der Wörter, sondern nur noch auf ihre Präsenz geachtet. Es werden Tests mit Bigrammen, POS-Tags und nur mit Adjektiven gemacht. Dabei hat sich herausgestellt, dass nur Bigramme gegenüber Unigrammen eine schlechtere Genauigkeit erzielen und Adjektive nicht so präzise sind, wie die am häufigsten vorkommenden Unigramme. In der letzten Zeile wird die Position des Worts im gesamten Dokument mit einbezogen. Da Filmkritiken oft mit einer allgemeinen Stimmung beginnen, dann die Handlung erklären und am Ende die Sicht des Autors zusammenfassen, wird die Position durch erstes Viertel, letztes Viertel und Mittelteil angegeben. Pang et al kommen zu dem Schluss, dass die Support Vector Machine 29 Fachliche Grundlagen die besten Ergebnisse erzielte, aber weit hinter den in der klassischen Textklassierung nach Topics erzielten Ergebnissen liegt12. Als Grund wird dafür unter anderem die verdrehte Schreibweise in den Filmkritiken angeführt. So enthält der Satz „This film should be brilliant. It sounds like a great plot, the actors are first grade, and the supporting cast is good as well, and Stallone is attempting to deliver a good performance. However, it can’t hold up” in einem Bag-of-Features-Modell viele positive Feature, obwohl das Gesamtsentiment negativ ist. 2.2.2 Sentiment Klassierung durch unüberwachtes Lernen Im Gegensatz zum überwachten Lernen wird im unüberwachten Lernen kein Trainingsdatensatz benötigt. Die Erstellung eines Trainingsdatensatzes erfordert oft eine manuelle Vorbereitung und ist vor allem bei großen Datasets sehr zeitaufwändig. Mit Methoden des unüberwachten Lernens kann diese Arbeit gespart werden. Allerdings sind sie oft nicht so genau und ausgereift wie die Klassierung im überwachten Lernen. Die Klassierung von Sentiments durch unüberwachtes Lernen wurde in mehreren Veröffentlichungen durchgeführt. Eine der bekanntesten und viel replizierten Techniken ist in [12] zu finden. Das unüberwachte Lernen wird hier auf einen Korpus von Kundenbewertungen aus verschiedenen Bereichen angewandt und im Folgenden beschrieben. Zunächst werden Sätze, die Adjektive und Adverbien enthalten, extrahiert. Dies geschieht mithilfe eines Part-of-Speech-Taggers (siehe Kapitel 2.2.4.1). Da alleinstehende Adjektive und Adverbien zwar ein guter Hinweis auf Sentiment sein können, aber durch die Isolation der Kontext verloren gehen kann, werden immer zwei aufeinanderfolgende Wörter gezogen. Die Wörter werden entnommen, wenn sie den in der Tabelle 6 dargestellten Mustern entsprechen. Die Bedeutung der verwendeten Tags entspricht der PEN-Treebank und wird in Kapitel 2.2.4.1 erklärt. 12 dort werden Genauigkeiten von über 90% erreicht 30 Fachliche Grundlagen Erstes Wort Zweites Wort Drittes Wort (wird nicht mit extrahiert) 1. JJ NN oder NNS Irgendetwas 2. RB, RBR oder RBS JJ Nicht NN, nicht NNS 3. JJ JJ Nicht NN, nicht NNS 4. NN oder NNS JJ Nicht NN, nicht NNS 5. RB, RBR oder RBS VB, VBD, VBN oder VBG irgendetwas Tabelle 6: Muster zur Extraktion von two-word Phrases (entnommen aus Turney) In einem zweiten Schritt wird die semantische Orientierung der extrahierten Phrasen ermittelt. Dafür wird die Transinformation (mutual information), also die Stärke des semantischen Zusammenhangs, zwischen den beiden extrahierten Wörtern genutzt. Der verwendete Indikator ist die Pointwise Mutual Information (PMI), der durch die Formel 𝑝(𝑤𝑜𝑟𝑡1 & 𝑤𝑜𝑟𝑡2) 𝑃𝑀𝐼(wort1, wort2) = 𝑙𝑜𝑔2 ( ) 𝑝(𝑤𝑜𝑟𝑡1)𝑝(𝑤𝑜𝑟𝑡2) definiert ist. Die Wahrscheinlichkeit, dass Wort1 und Wort2 zusammen auftreten, wird durch 𝑝(𝑤𝑜𝑟𝑡1 & 𝑤𝑜𝑟𝑡2) beschrieben. Wenn die Wörter statistisch unabhängig sind, wird die Wahrscheinlichkeit der Kookkurrenz durch das Produkt 𝑝(𝑤𝑜𝑟𝑡1)𝑝(𝑤𝑜𝑟𝑡2) gegeben. Das Verhältnis zwischen diesen beiden Werten drückt also die statistische Abhängigkeit zwischen den beiden Wörtern aus. Zusätzlich zum PMI wird die Sentiment Orientation (SO) eines Satzes mit der Formel SO(Satz) = PMI(Satz, „excellent“) – PMI(Satz, „poor“) 31 Fachliche Grundlagen berechnet. Die Referenzwörter „excellent“ und „poor“ wurden gewählt, weil sie in einem klassischen 5 Sterne-Bewertungssystem häufig die Bezeichnung für die beiden Extrema bilden. Die Sentiment Orientation ist also positiv, wenn der Satz mehr mit „excellent“ als mit „poor“ assoziiert wird und umgekehrt. Der Algorithmus zur letztendlichen Berechnung des Sentiments nennt sich PMI-IR und basiert darauf, Anfragen an eine Suchmaschine im Web zu schicken. Turney verwendete dafür die Altavista Advanced Search Engine, da sie den NEAROperator, der die Suche auf die vorangehenden/nachfolgenden 10 Wörter des durchsuchten Dokuments einschränkt, unterstützt. Die Wahrscheinlichkeit ergibt sich aus den Treffern (hits) der abgesendeten Anfragen und wird durch die Formel ℎ𝑖𝑡𝑠(𝑆𝑎𝑡𝑧 𝑁𝐸𝐴𝑅 "excellent")ℎ𝑖𝑡𝑠 ("poor")) SO(Satz) = 𝑙𝑜𝑔2 (ℎ𝑖𝑡𝑠(𝑆𝑎𝑡𝑧 𝑁𝐸𝐴𝑅 "poor")ℎ𝑖𝑡𝑠 ("𝑒𝑥𝑐𝑒𝑙𝑙𝑒𝑛𝑡")) definiert. Zum Schluss wird die durchschnittliche Semantic Orientation der Phrasen in den Bewertungen ermittelt. Die Bewertung gilt als „empfehlenswert“, wenn die durchschnittliche SO positiv ist und als „nicht empfehlenswert“, wenn sie negativ ist. Im Experiment wurde eine durchschnittliche Genauigkeit von 74% erreicht, die allerdings je nach Bereich schwankt (z.B. nur 66% bei Filmkritiken, aber 84% bei Reisen). Turneys Algorithmus wurde unverändert in [34] auf Twitter-Daten angewandt. Dabei waren von ca. 800 als positiv eigenordneten Tweets über 100 false positiv. Bei den als negativ eigenordneten Werten war dieses Verhältnis besser. Eine weitere Methode des unüberwachten Lernens wird von Zagibalov in [5]beschrieben. Die Sentiment Klassierung wird auf einem chinesischen Korpus mithilfe von Seeds durchgeführt. Seeds sind die Ausgangspunkte, von denen weitere lexikalische Einheiten („lexical items“) gefunden werden sollen. Zagibalov nutzt also keine Seed-Wörter, sondern lexikalische Einheiten, die vom System als Einheit gesehen werden. Das können Morpheme13, Phrasen oder Wörter sein. Zunächst muss 13 Kleinste Spracheinheit (z.B. Silben) 32 Fachliche Grundlagen also ein passendes Seed gefunden werden. In vorherigen Arbeiten wurde beobachtet, dass positive Wörter in der chinesischen Sprache öfter verwendet werden, selbst wenn ein negatives Sentiment ausgedrückt wird (z.B. „nicht gut“ statt „schlecht“). Der Algorithmus beschränkt sich also auf das Finden positiver Seeds und geht dabei wie folgt vor: 1. Finde alle Buchstabenfolgen zwischen nicht-Buchstaben (z.B. Zahlen, Punktation), die Negation und Adverbien enthalten. Trenne die Folge an der Negation und speichere die Sequenz, die dem negierten Adverb folgt, ab 2. Zähle die Häufigkeiten der in 1. gefundenen eindeutigen Sequenzen, die dem negierten Adverb folgen (X) 3. Zähle die Häufigkeiten der in 1. gefundenen eindeutigen Sequenzen, die nicht dem negierten Adverb folgen (Y) 4. Finde alle Sequenzen, bei denen Y-X > 0 ist Bei der Klassierung wird das Dokument anschließend in Zonen unterteilt. Eine Zone ist ein Bereich zwischen Punktationen. Zonen gelten als positiv, wenn es überwiegend positive Vokabeln in ihnen gibt und als negativ, wenn es überwiegend negative sind. Da es zwei Vokabellisten (positiv und negativ) gibt, werden zwei Werte nach der Formel Spos/neg = L²d SdNd Lphrase berechnet, wobei Ld die Länge der passenden lexikalischen Einheit, Lphrase die Länge der aktuellen Zone, Sd der aktuelle sentiment score der lexikalischen Einheit und Nd eine Checkvariable, die -1 ist, wenn eine Negation vor der lexikalischen Einheit steht und ansonsten 1 ist. Der sentiment score einer Zone ist die Summe der Scores aller Items, die in der Zone gefunden wurden. Um das Sentiment für das ganze Dokument zu bekommen, wird die Differenz zwischen den postivien und negativen Zonen berechnet. Wenn diese größer als 0 ist, ist das Dokument positiv. Wie eingangs erwähnt, startet der Algorithmus mit nur einem Eintrag („good“) in der Vokabelliste. 33 Fachliche Grundlagen Diese Liste wird erweitert, in dem die Klassierung mehrmals durchgeführt wird. Lexikalische Einheiten werden in die Vokabelliste aufgenommen, wenn sie mindestens zweimal auftreten und ihre relative Häufigkeit14 hoch genug ist. Diese unüberwachte Auswahl an Seed-Wörtern stellte sich als äußerst effizient heraus und übertraf in manchen Fällen selbst die überwachte Auswahl an Seed-Wörtern (80% Genauigkeit bei überwachter, 82% Genauigkeit bei unüberwachter Auswahl). In [69] wurde versucht, das in Zagibilov beschriebene Vorgehen auf einen Korpus mit Filmkritiken in Englisch zu übertragen. Die Ergebnisse waren sehr schlecht und lagen nur bei circa 51% Genauigkeit. Die Dominanz von positiven Seeds könnte also eine Eigenheit der chinesischen Sprache sein. Eine andere Herangehensweise wird in [41] vorgeschlagen. Dokumente können mit Signalen, die Emotionen anzeigen, versehen sein. Dazu gehören zum Beispiel Smileys, aber auch Abkürzungen wie „lol“ (laughing out lout) oder Sterne bei einer Restaurantbewertung. Hu benutzt ein Twitter-Dataset und stellt die These auf, dass in so kurzen Beiträgen selten Emotionssignale genutzt werden, die widersprüchlich zum Text sind. Für das unüberwachte Lernen wird ein neues Framework, das Emotional Signals for unsupervised Sentiment Analysis (ESSA), vorgestellt. Die ersten Schritte in dem Framework umfassen das Modellieren von Emotionsindikatoren und Korrelationen von Emotionen. Anschließend wird die Sentiment Analyse mit einem Modell, das auf dem orthogonal nonnegative tri-factorization model (ONMTF) basiert, durchgeführt. Die non-negativ matrix factorzization beschreibt im Grunde genommen einen Vorgang, bei dem eine Input-Matrix in mehrere kleinere Matrizen zerlegt wird, die alle keine negativen Elemente besitzen. Dadurch können die Matrizen leichter analysiert werden. Das Zerlegungs-Problem ist nicht immer lösbar, weswegen Werte auch approximiert werden. Die Grundidee das OMNTF besteht darin, dass Daten anhand der Verteilung von Features und Features anhand der Verteilung von Daten geclustert werden können. Mit dem OMTF-Model wird versucht, die Input-Wort-Matrix mit einer drei Faktoren 14 Verhältnis zwischen positiven und negativen Auftreten 34 Fachliche Grundlagen Matrix, die gleichzeitig Cluster Label zu Wörtern und ganzen Beiträgen zuweist, anzunähern. Das vorgeschlagene Modell erreicht auf den getesteten Datasets eine Genauigkeit von bis zu 74%. Es wurde also bewiesen, dass ESSA ein effektives Framework für unüberwachtes Lernen ist und Emotionssignale eine wichtige Rolle bei der Sentiment Analyse spielen können. 2.2.3 Klassifikatoren Sentiment Analyse kann mithilfe von Klassifikation, also dem Einteilen von Dokumenten in Klassen (positiv, negativ, neutral) durchgeführt werden. Ein Algorithmus, der diese Klassifikation implementiert, nennt sich Klassifikator. Für die Sentiment Analyse kann nahezu jeder Klassifikator genutzt werden. So wurden unter anderem in [14] neuronale Netze, Entscheidungsbäume in [7] und k-nearest-Neighbor in [41] genutzt. Eines der genauesten Verfahren ist die Support Vector Machine, während der naïve Bayes aufgrund seiner ressourcenschonenden Performanz sehr beliebt ist. Beide Klassifikatoren werden im Folgenden erläutert. 2.2.3.1 Naïve Bayes Die Klassifikation nach dem( naïven) Bayes wurde mit als erstes genutzt um eine Sentiment Analyse anhand von Filmkritiken durchzuführen (Pang, Lee, Vaithyanathan 2002) und ist auch weiterhin eines der meistverwendeten Verfahren. Dieser Klassifikator beruht auf dem Satz von Bayes, der die Berechnung von bedingten Wahrscheinlichkeit beschreibt. Der Zusatz naïve bezeichnet die Annahme, dass jedes Attribut nur vom Klassenattribut abhängt. Dies bedeutet, dass die Wahrscheinlichkeit, dass ein Wort eines Dokuments in eine bestimmte Kategorie gehört, unabhängig von der Wahrscheinlichkeit, dass auch andere Wörter in dieser Kategorie sind, ist. Durch diese Annahme wird der naïve Bayes eine sehr ressourcenschonende Methode ([16], S 33). 35 Fachliche Grundlagen Allerdings ergibt sich hierbei vor allem bei der Sentiment Analyse ein Problem: die genutzten Feature sind nicht immer unabhängig, da sie durch Syntax und Semantik verbunden sind. Der naïve Bayes-Klassifikator ist dadurch eine sehr vereinfachte Methode. Dennoch sind die erzielten Ergebnisse vor allem im Verhältnis zur Effizienz und zum Zeitaufwand angemessen und machen den Bayes-Klassifikator deshalb zu einer beliebten Methode zur Text Klassierung (vgl. [82]). Der naïve Bayes wird durch die Funktion vnb = arg 𝑚𝑎𝑥 ∏ P(vj) P(ai|vj) 𝑣 ∈𝑉 𝑖 beschrieben. Dabei wird das Klassenlabel vnb = vj einem bestimmten j zugeordnet. Der Berechnung liegen die Wahrscheinlichkeiten der einzelnen Feature zu Grunde. Die Einfachheit dieses Algorithmus kann in einem (vereinfachten) Beispiel deutlich gemacht werden. Ziel sei die Sentiment Klassifikation anhand von Stimmungswörtern mit den Klassen positiv und negativ. Der Bayes-Klassifikator wurde mit den in Tabelle 7 abgebildeten Daten trainiert. Feature 1 Feature 2 Feature 3 Feature 4 Sentiment 1 Schnell Hübsch Teuer In Positiv 2 Langsam Hässlich Teuer In Negativ 3 Schnell Bäh Teuer Out Negativ 4 Langsam Hässlich Lächerlich Out Negativ 5 Schnell Hübsch Preiswert Angesagt Positiv Tabelle 7: Beispiel zur Bayes-Klassifizierung Ein neuer Datensatz (Schnell, Hässlich, Preiswert, In) soll klassifiziert werden. vnb = arg 𝑚𝑎𝑥 ∏ P(vj) P(ai|vj) 𝑣 ∈𝑉 𝑖 36 Fachliche Grundlagen vnb = 𝑚𝑎𝑥 𝑣 ∈ {𝑝𝑜𝑠𝑖𝑡𝑖𝑣, 𝑛𝑒𝑔𝑎𝑡𝑖𝑣}P(vj) arg 𝑃(𝐹𝑒𝑎𝑡𝑢𝑟𝑒 1 = 𝑆𝑐ℎ𝑛𝑒𝑙𝑙) 𝑃(𝐹𝑒𝑎𝑡𝑢𝑟𝑒 2 = 𝐻ä𝑠𝑠𝑙𝑖𝑐ℎ) 𝑃(𝐹𝑒𝑎𝑡𝑢𝑟𝑒 3 = 𝑃𝑟𝑒𝑠𝑖𝑤𝑒𝑟𝑡) 𝑃(𝐹𝑒𝑎𝑡𝑢𝑟𝑒 4 = 𝐼𝑛) Zunächst muss die Wahrscheinlichkeit P(positiv) und P(negativ) ermittelt werden. 2 P(positiv) = 5 3 P(negativ) = 5 Anschließend können die bedingten Wahrscheinlichkeiten abgeschätzt werden. Für Feature 1 würde dies so aussehen. P(Feature 1 = Schnell | Sentiment = positiv) = 2 2 1 P(Feature 1 = Schnell | Sentiment = negativ) = 3 Die Berechnung muss für alle Feature durchgeführt werden. P(positiv)P(Schnell | pos) P(Hässlich | pos) P(Preiswert | pos) P(In | pos) = 0,25 P(negativ)P(Schnell | neg) P(Hässlich | neg) P(Preiswert | neg) P(In | neg) = 0,04 Normalisiert: 0,25 = 86% 0,25 + 0,04 0,04 = 14% 0,04 + 0,25 37 Fachliche Grundlagen Das neue Element (Schnell, Hässlich, Preiswert, In) wird der Klasse „positiv“ zugeordnet. Bei geringen Datenmengen kann zusätzlich ein m-Schätzer genutzt werden, um weitere Datensätze zu simulieren. 2.2.3.2 Support Vector Machine Support Vector Machines (SVM) sind Modelle, die im überwachten Lernen zur Klassifizierung und Regressionsanalyse genutzt werden können. Die mit ihr verbundenen Algorithmen sind dazu in der Lage, Muster zu erkennen und Daten zu analysieren. SVMs basieren auf dem Prinzip der Structural Risk Minimization (SRM). Eine Herausforderung des Maschinenlernens ist immer, ein Model aus einem endlichen Trainingsdatensatz zu generieren, ohne dass es durch Überanpassung zu speziell wird, um mit neuen Daten, die nicht aus dem Trainingsdatensatz stammen, umzugehen. Das SRM-Prinzip adressiert dieses Problem indem die optimale Balance zwischen Komplexität des Modells und der Fähigkeit, neue Daten aufzunehmen, gefunden werden soll. Es soll also die Hypothese h gefunden werden, mit der die kleinstmögliche Wahrscheinlichkeit garantiert werden kann, in einem unbekannten und zufälligen Datensatz einen Fehler zu machen (vgl. [38]). Der Ausgangpunkt für eine Support Vector Machine ist ein Trainingsdatensatz für dessen Objekte die Klasseneinteilung bekannt ist. (x1,y2), (x2, y2), …, (xn, yn) mit 𝑥i ∈ ℝg und 𝑦i ∈ {± 1} {für 𝑖 = 1, 2, … , 𝑁} Die Objekte werden durch Vektoren in einem Vektorraum repräsentiert, wobei xi den Eingangsdaten und yi den beiden Klassen entsprechen, in die eingeordnet werden soll. Die Aufgabe der Support Vector Machine ist nun, diese Menge von Objekten durch das Einfügen einer Hyperebene in zwei Klassen zu unterteilen. Im einfachsten Fall 38 Fachliche Grundlagen erfolgt eine lineare Trennung. Schon hier gibt es mehrere Möglichkeiten, die Hyperebene zu platzieren. Abbildung 7: Hyperebene im Vektorraum mit schmalen und breiten Rand Abbildung 8 zeigt zwei Möglichkeiten, die Hyperebene in einen linear trennbaren Datensatz zu legen. Im linken Bereich des Bildes wurde die Hyperebene so platziert, dass nur ein schmaler Rand bis zur Klassengrenze entsteht. Es wird jedoch angestrebt, den Abstand zur Hyperebene zu maximieren, um möglichst viele neue Datensätze in der Klasse aufnehmen zu können. Im rechten Teil der Abbildung ist dies besser gelungen. In der Praxis ist die Arbeit mit linear trennbaren Datensätzen der Ausnahmefall. Viel öfter kommt es vor, dass sich Klassengrenzen überschneiden. Die Hyperebene kann nicht wie auf der linken Seite der Abbildung 8 verbogen gelegt werden. Stattdessen wird der Vektorraum mit den Trainingsdaten in eine so hohe Dimension überführt, dass sich die Daten linear trennen lassen. Bei der Rücktransformationen in den ursprünglichen Dimensionsraum wird die lineare Hyperebene wieder zu einer nichtlinearen. Um den enorm hohen Rechenaufwand im höher dimensionalen Raum zu vermeiden, werden Kern-Funktionen, die die ursprüngliche ersetzen, verwendet. Die Kern-Funktionen machen die SVM zu einem universalen Lerner (vlg Joachims). Sie können dazu genutzt werden, die SVM zusätzlich zu linearen Funktionen, auch polynomische Klassifizierungsverfahren, radiale Basisfunktionen (RBF) und neuronale Netze lernen zu lassen. 39 Fachliche Grundlagen Abbildung 8: Hyperebene in einem nicht linear trennbaren Datensatz15 Joachims legt in [38] sowohl in der Theorie als auch in einem Experiment nieder, warum Support Vector Machines ein für die Text Klassifizierung geeigneter Klassifikator sind. Zum einen ist die Text Klassifizierung, und damit auch die Sentiment Analyse, typischerweise ein Klassifizierungsproblem mit einer hohen Anzahl von relevanten Features. Die Gefahr der Überanpassung hängt bei SVMs nicht zwangsläufig von der Feature-Anzahl ab, wodurch sie in dieser Situation geeignet sind. Hinzu kommt, dass es für jedes Dokument nur einige Einträge im Dokument-Vektor gibt, die nicht 0 sind. So kann es gut sein, dass in einem Korpus von Kundenbewertungen, bei dem Stimmungswörter als Feature genutzt werden, das Wort „amazing“ nur in 5 von 1000 Bewertungen vorkommt. Bei 995 Bewertungen wäre dieser Vektoreintrag also 0. Der induktive Algorithmus der SVM kann mit diesen dünnbesetzten Vektoren gut umgehen. 2.2.3.3 Gradientenverfahren Eine verbreitete Herangehensweise im maschinellen Lernen ist es, den Algorithmus während seiner Trainingsphase zu verbessern, indem die Gewichtung falsch platzierter Klassenlabel geändert wird. Dieses Vorgehen wird als Gradientenverfahren 15 http://www.statsoft.com/textbook/graphics/SVMIntro3.gif 40 Fachliche Grundlagen bezeichnet. Bei großen Datenmengen kann die Neuberechnung aller Gewichtungen zur sehr hohen Kosten führen. Während [70] die Limitierung hier bei der Last für die CPU sieht, stellt [71] eher Latenzen, Netzwerk-Beschränkungen und Bandbreiten bei verteilen Systeme als Probleme dar. Der Grundgedanke, dass das Gradientenverfahren zu hohen Kosten führen kann, bleibt allerdings bei beiden bestehen. Aus diesem Grund wird häufig ein vereinfachtes Verfahren, der Stochastic Gradient Descent (SGD), genutzt. Im Gegensatz zum ursprünglichen Gradientenverfahren werden beim SGD bei jeder Iteration des Algorithmus nur einige zufällig ausgewählte Gewichtungen angepasst. Durch diese Änderung senkt der SGD weiterhin das erwartete Risiko der Fehlklassifikation, aber ist dabei effizienter und einfacher zu implementieren als das normale Gradientenverfahren. Dies macht das SGD zu einem weit genutzten Verfahren. So wird es zum Beispiel in Praxisteil dieser Arbeit sowohl im SciKit-Learn als auch in Apache Spark beim Einsatz der Support Vector Machine verwendet. 2.2.4 Features Die Klassierung muss anhand bestimmter Merkmale, der Features, geschehen. In der Sentiment Analyse gibt es eine Vielzahl möglicher Feature. Die wichtigsten werden in diesem Abschnitt erläutert. 2.2.4.1 Wortart Die Wortart eines Wortes (engl. part-of-speech oder kurz POS) kann ausschlaggebend sein. Besonders für die Sentiment Analyse ist eine korrekte Zuordnung der Wörter zu ihren Wortarten, also das sogenannte Part-of-Speech-Tagging, wichtig. Adjektive drücken häufiger eine Stimmung aus, als es Substantive oder Verben tun und werden deswegen zum Teil auch als special feature angesehen. 41 Fachliche Grundlagen POS-Tagging geht weit über ein lexikalisches Zuordnen von Wörtern zu ihren Wortarten hinaus. In der deutschen Sprache unterscheidet man 10 Wortarten (und in Englisch 9, da Artikel nicht als eigene Wortart gezählt werden). 1. Substantiv (Nomen, Hauptwort) 2. Verb (Zeit- oder Tätigkeitswort) 3. Adjektiv (Eigenschaftswort) 4. Adverb (Umstandswort) 5. Pronomen (Fürwort) 6. Präposition (Verhältniswort) 7. Konjunktion (Bindewort) 8. Numerale (Zahlwort) 9. Artikel (Geschlechtswort) 10. Interjektion (Ausrufe- oder Empfindungswort) In der Praxis werden weit mehr als 10, respektive 9, POS-Tags genutzt. Das im Deutschen weitverbreitete Stuttgart-Tübingen-Tagset (STTS)16 nutzt zum Beispiel 53 verschiedene Tags. Im praktischen Teil dieser Arbeit wird vor allem mit dem Stanford Parser gearbeitet, der das im Englischen etablierte „Penn Treebank POS Tags“ Tagset, mit 36 unterschiedlichen vordefinierten Tags, verwendet. Tag Bezeichnung CC Coordinating conjunc- Nebenordnende Konjunktionen; and, but, nor, or, yet tion ausgeschriebene mathematische plus, minus, times 𝑥 (*), over (𝑦) Operatoren CD Cardinal number Kardinalzahlen 1988 DT Determiner Artikel; Determinative a(n), every, no, the another, any EX Existential there Das „there“, das die Existenz/Prä- There (is a dog.) senz von etwas anzeigt FW Foreign Word Fremdwörter 16 Beschreibung Beispiel Hund http://www.ims.uni-stuttgart.de/forschung/ressourcen/lexika/TagSets/stts-table.html 42 Fachliche Grundlagen IN Preposition or subordi- Präpositionen, nating conjunction Konjunktionen unterordnende on, in, since, for JJ Adjective JJR Adjective, comparative vergleichende Adjektive mit der better Endung -er JJS Adjective, superlative Adjektive im Superlativ mit der En- best dung -est, sowie most/least LS List item marker Buchstaben / Zahlen, wenn sie ei- a), b), 1., 2. ner Aufzählung dienen MD Modal verb Alle Verben, die in der 3. Person can, could, may, Singular kein –s als Endung haben might, must, ought, shall NN Noun, singular or mass Substantiv im Singular NNS Noun, plural NNP Proper noun, singular Eigennamen im Singular or mass Adjektive; durch Bindestrichen ver- good bundene Zusammensetzungen, one-of-a-kind die als Adjektiv dienen second-smallest car Substantiv im Plural; oft mit En- cars dung –s California NNPS Proper noun, plural Eigennamen im Plural PDT Prederterminer Determinative, die einem Artikel o- all (her toys) der Possessivpronomen vorange- such an awful movie stellt sind POS Possessive ending Besitzanzeigende Wortendungen PRP Personal pronoun Personalpronomen; Reflexsivpro- I, me, myself, mine nomen; Demonstrativpronomen PRP$ Possessive pronoun Possessivpronomen RB Adverb Adverb; fast alle Wörter mit der En- quietly dung -ly; nachgestellte Attribute; (good) enough negative Kennzeichner RBR Adverb, comparative Beckers (the dog)`s (toy) my, your, his, her not / n‘t vergleichende Adjektive mit der earlier Endung -er 43 Fachliche Grundlagen RBS Adverb, superlative Adverben im Superlativ earliest RP Particle Partikel (hier gibt es Überschnei- off, well, um dungen mit Adverben und Präpositionen) SYM Symbol Mathematische/wissenschaftliche Symbole und Ausdrücke Ω, ∑ TO To Nur das Wort “to” to UH Interjection Interjektion oh, please, uh, well VB Verb, base form Verben im Imperativ, Infinitiv oder Do (it.) Subjunctive (etwa der deutsche (You should) do (it.) Konjunktiv) (I suggest that you) do (it.) VBD Verb, past tense Verben im Präteritum; konjungierte (If I) were (tall.) Form von “to be” worked VBG Verb, gerund or pre- Partizip oder Gerundium sent participle writing singing VBN Verb, past participle written, sung VBD non-3rd Verb, person Präsenz von Verben (ohne 3. Per- write singular present son); ist VB vorzuziehen VBZ Verb, 3rd person singu- Präsenz von Verben (nur 3. Per- writes lar present son); ist VB vorzuziehen WDT Wh-determiner Which/that als Relativpronomen which, that WP WH-pronoun Pronomen mit wh what, who, whom WP$ Possessive noun WRB Wh-adverb Partizip wh-pro- Das Wort “whose” whose Adverben, die mit wh beginnen what, und how when who, Tabelle 8: Tags der POS-Treebank 44 how, Fachliche Grundlagen Trotz der umfangreichen Auswahl an Tags gibt es viele problematische Fälle (vgl. [20]), die hier zwar nicht in ihrer Gesamtheit aufgezählt werden sollen, aber zumindest beispielhaft erwähnt werden, um die Komplexität des Taggens darzustellen. Ein kritischer Fall ist die Unterscheidung zwischen Substantiven im Singular (NN) und Substantiven im Plural (NNS). Hierbei geht es nicht darum, ob das Substantiv in seiner Semantik in der Pluralform steht, sondern ob es die Pluralform des dazugehörigen Verbs auslöst. Im Satz „Mathematics/NN is an interesting science” wird “Mathematics” als Substantiv im Singular (NN) getaggt, obwohl es die für den Plural typische Endung –s hat. Das gleiche gilt auch für den umgekehrten Fall, dass ein im Singular stehendes Substantiv die Pluralform eines Verbs auslöst. „The deer/NNS are hungry“ In diesem Satz wird “deer” aus dem Kontext heraus als NNS getaggt, obwohl das alleinstehende Wort auch im Singular sein könnte. Eine Ausnahme zu dieser Regel bilden Wörter, die eine Menge bezeichnen. „Nine months/NNS is a short time.” Die Unterscheidung zwischen Substantiv (NN) und Gerundium (VBG) stellt ebenfalls ein komplexes Problem dar. Verbformen, die auf –ing enden, können in vielen Fällen auch Substantive sein. Hinzu kommt, dass sowohl VBG als auch NN ein Artikel oder Possessivpronomen vorangestellt sein kann. Um diese Wortarten auseinander zu halten, kann geprüft werden, ob das Wort eine Pluralbildung erlaubt. „Running/VBG isn’t complicated. “ „The writing/NN on the wall is beautiful. “ Im ersten Fall wäre die Pluralform (“Runnings aren’t complicated.”) grammatikalisch falsch, wohingegen „The writings on the wall are beautiful“ ein korrekt gebildeter Satz ist. Adjektive und Adverbien können zusätzlichen Aufschluss über die Wortart geben. Ein Substantiv kann nur durch ein Adjektiv (JJ) modifiziert werden, während ein Gerundium nur durch ein Adverb (RB) modifizierbar ist. „This is an expensive/JJ painting/NN. “ “Painting/VBG well/RB is a skill hard learned.” 45 Fachliche Grundlagen Weiterhin weist die Nutzung des Worts in einem of-Satz darauf hin, dass es sich um ein Substantiv handelt. Steht das Wort jedoch in einer Nominalgruppe, ist es ein Gerundium. (Beispiel aus [20]) „GM`s closing /NN of the plant“ „GM`s closing/VBG the plant“ Sollte dem Wort mit der –ing Endung ein Substantiv vorangestellt sein, ist dieses Wort auch ein Substantiv. (Beispiel aus [20]) „the plant/NN closing/NN“ „unsavory plant/NN closing/NN tactics/NNS“ In der letzten Regel für die Unterscheidung von Substantiven und Gerundien ist festgelegt, dass ein -ing-Wort, das vor einem Substantiv steht, ein Gerundium ist, wenn die Bedeutung des Satzes nach einer derartigen Umstellung, dass das Substantiv den Satzanfang bildet, gleich oder äquivalent bleibt. „the rising/VBG market prices“ zu „the market prices are rising/VBG“ Wenn sich die Bedeutung des Satzes hingegen verändert, ist das –ing-Wort ein Substantiv. „hunting /NN permit“ Die Umstellung würde in diesem Fall „a permit that is hunting“ ergeben, gemeint ist hingegen „a permit for hunting“. 46 Fachliche Grundlagen 2.2.4.2 N-Gramme N-Gramme repräsentieren das zu untersuchende Dokument in Vektoren, die die Existenz und Häufigkeit der einzelnen Wörter darstellen. Dazu gehören sowohl Unigramme, also N-Gramme, die nur aus einem Wort bestehen, als auch zusammenhängende Ausdrücke (z.B. das Tetragramm „United States of America“). Nach Liu Bing ([33] S 33) sind N-Gramme die am häufigsten genutzten Features in der klassischen „topic based“ Text Klassifizierung, also der Einteilung von Texten in einzelne Themenbereiche und werden auch für die Sentiment Analyse genutzt. In [16] wird erwähnt, dass N-Gramme mit mehr als 3 Wörtern nur bei sehr großen Datenmengen nützlich sind, da ein gemeinsames Auftreten der N-Gramme im gleichen Dokument unwahrscheinlich ist. Google hat in diesem Zusammenhang ein NGramm-Model, das auch Pentagramme (5-Gramm) einschließt, mit über zehn Billion Wörtern aus dem World Wide Web trainiert17. In [25] hat sich gezeigt, dass eine Vorhersage, die sich nur auf die Existenz von Wörtern als Feature bezieht, eine höhere Genauigkeit erreichen kann als eine, die die Häufigkeit der Wörter mit einbezieht. Für das reine Vorkommen von Wörtern ist das Bag-of-Word-Model geeignet. Dieses recht einfache Model stellt die Wörter in einem Dokument binär (vorhanden/nicht vorhanden) in einem Vektor dar. Dabei können Füllwörter herrausgefiltert werden. Abbildung 9: Bag-of-Words-Modell 17 http://googleresearch.blogspot.de/2006/08/all-our-n-gram-are-belong-to-you.html 47 Fachliche Grundlagen 2.2.4.3 Lemmatisierung Lemmatisierung ist die Zurückführung von ihren Wörtern auf ihre Grundform, dem Lemma. Die Effektivität der Lemmatisierung hängt unter anderem von der untersuchten Sprache ab. In [6] wurde festgestellt, dass sich das Zurückführen von Wörtern auf ihre Grundform (running -> run) im Englischen negativ auf die Vorhersagegenauigkeit auswirkt, wohingegen die Lemmatisierung im Russischen positive Auswirkungen hatte. 2.2.4.4 Stimmungsverändernde Wörter In vielen Fällen können Wörter nicht isoliert betrachtet werden, sondern müssen im Zusammenhang mit anderen Wörtern analysiert werden. Die Stimmung, die in einer Meinung weitergegeben wird, kann durch die sogenannten „sentiment shifter“ geändert werden. Zu den Sentiment Shiftern gehört unter anderem die Negation, die dem dazugehörigen Wort die gegenteilige Wirkung verleiht, aber auch Sarkasmus kann dazu genutzt werden, Stimmung zu ändern. Tabelle 9 zeigt die nach Liu klassifizierten Sentiment Shiftern mit Beispielwörtern in Englisch. Sentiment Shifter Beispiel Negation Not, never, none, nobody, nowhere, neither, cannot „I don`t like it.“ (das positive „like“ wird negativ) Modal auxiliary (mo- Would, should, could, might, must, ought dale Hilfsverben) „The picture quality could be better.“ (das positive better erhält einen negativen Kontext) Presuppositional Items Adverben: Barely, hardly (Präsuppositionen) Andere Wörter: fail, neglect 48 Fachliche Grundlagen „It barely works.“ (works verliert seine positive Bedeutung) Sarcasm (Sarkasmus) „What an amazing quality, it broke on the first day“ Decrease/Increase (Reduzierung/Zunahme) „This drug reduced my pain significantly“ (Da Pain ein negatives Wort ist, entsteht durch die Reduzierung von pain ein positives Sentiment) Tabelle 9: Stimmungsveränderte Wörter 2.2.4.5 Stimmungswörter und –Sätze In jeder Sprache gibt es bestimmte Wörter und Sätze, die besonders häufig dafür genutzt werden, eine Stimmung zu beschreiben. So werden positive Stimmungen im Deutschen oft mit „großartig“, „super“ oder „wunderbar“ beschrieben, während negative Stimmungen durch Wörter wie „schlecht“, „miserabel“ oder „widerlich“ ausgedrückt werden. Adjektive werden besonders häufig als Stimmungswörter genutzt, aber auch Substantive (Vergnügen) und Verben (hassen) kommen in Frage. Zusätzlich zu einzelnen Wörtern werden auch Redensarten genutzt, um Meinungen auszudrücken („Bei dem Film ist doch Hopfen und Malz verloren“). 2.2.4.6 Kompositionelle Regeln Die Rules of opionions, also die Regeln der Meinungsbildung, werden von Liu in [31] als weiterführende Ausdrücke, die dazu genutzt werden können, explizite oder implizite Meinungen zu bilden, beschrieben. Sie bestehen aus einer Kombination 49 Fachliche Grundlagen anderer Feature und dienen dazu, auf besondere Situationen einzugehen und genaue Entscheidungen zu treffen. Der Ausgangpunkt für die Regeln ist die formale Darstellung: 1. Positiv :: = P 2. |PO 3. |stimmungveränderndes_Wort N 4. |stimmungsveränderndes_Wort NE 5. Negativ ::= N 6. | NE 7. |stimmungveränderndes_Wort P 8. |stimmungveränderndes_Wort PO Dabei stehen P und N für atomare (Wort oder Phrase) [p]ositive und [n]egative Stimmungswörter und PO, NE für Ausdrücke, die sich aus mehreren atomaren Stimmungswörtern zusammensetzen. Das gleiche gilt auch für die stimmungsverändernden Wörter. Die einfachste Regel ist in 3, 4, 7 und 8 zu sehen. Wenn stimmungsverändernde Wörter und Phrasen im Zusammenhang mit dem Wort stehen, wird die gegenteilige Stimmung erzeugt. Ein weiteres Set von Regeln basiert auf der Änderung der Menge des Elements, zu dem die Meinung ausgedrückt wird. 9. PO ::= weniger_oder_gesenkt N 10. |mehr_oder_erhöht P 11. NE ::= weniger_oder_gesenkt P 12. |mehr_oder_erhöht Diese Regeln beschäftigen sich damit, dass eine Änderung der Menge von einem Sentiment die Stimmung, die ausgedrückt wird, ändern kann. Liu bringt hier das Beispiel von Medikamenten. Man nehme den Satz „This drug reduced my pain significantly“ Normalerweise drückt Pain (Schmerz) eine negative Stimmung aus. Der Satz drückt insgesamt jedoch eine positive Stimmung aus, weil das Negative verringert wird (weniger Schmerz). Ganz ähnlich verhält es sich mit Mengenangaben generell. 50 Fachliche Grundlagen 13. 14. 15. 16. 17. 18. PO ::= kein_wenig_weniger_oder_verringerte_Anzahl_von NPI | viel_mehr_erhöhte_Anzahl_von PPI NE ::= kein_wenig_weniger_oder_verringerte_Anzahl_von PPI | viel_mehr_erhöhte_Anzahl_von PPI NPI ::= potentiell_negatives_Element PPI ::= potentiell_positives_Element Für einige Aspekte ist eine geringe Menge schlecht, während eine hohe Menge gut ist und umgekehrt. So würde „this notebook costs a lot“ eine negative Stimmung ausdrücken (NPI) und durch „the price of this notebook is reduced“ eine positve Stimmung erhalten (PO). Eine weitere Regel beschäftigt sich mit erwünschten und unerwünschten Fakten. Neben subjektiven Ausdrücken kann Stimmung auch in objektiven Phrasen ausgedrückt. Der Satz „Schon nach einem Monat hatte ich eine Pfütze unter meinem Wasserbett“ ist objektiv, drückt aber dennoch eine unerwünschte Situation und somit eine negative Stimmung aus. Dabei ist das Wort „Pfütze“ ansonsten kein Stimmungswort. 19. P ::= erwünschter_Fakt 20. N ::= unerwünschter_Fakt Liu nennt noch zwei weitere Regeln. Zum einen ist dies die Abweichung von einer Norm oder einem erwünschten Wertebereich und zum anderen die Produktion und der Verbrauch von Ressourcen und Müll. Ersteres lässt sich in den Regeln 21 und 22 zusammenfassen. Bei bestimmten Aspekte ist es erwünscht, in einem bestimmten Wertebereich zu bleiben. Wenn von diesem Wertbereich abgewichen wird, entsteht eine negative Stimmung. Als Beispiel hierfür kann der Satz „Der Kühlschrank kommt nie unter 15°C“ dienen. 21. P ::= innerhalb_gewünschter_Wertebereich 22. N ::= außerhalb_gewünschter_Wertebereich Die letzten Regeln lauten: 23. P ::= produziert_viel_oder_mehr_Ressourcen 51 Fachliche Grundlagen 24. | produziert_kein_wenig_weniger_Müll 25. | verbraucht_keine_wenig_weniger_Ressourcen 26. | verbraucht_viel_oder_mehr_Müll 27. N ::= produziert_kein_wenig_weniger_Ressourcen 28. | produziert_viel_oder_mehr_Müll 29. | verbraucht_viel_oder_mehr_Ressourcen 30. | verbraucht_keine_wenig_weniger_Müll Sie beziehen sich auf den Verbrauch und den Konsum von Ressourcen und Müll. Ein typisches Beispiel hierfür ist der erwünscht niedrige Stromverbrauch technischer Geräte. Auch in anderen Werken wurden Kompositionsregeln aufgestellt. In [65] wurden sechs Regeln aufgestellt: polarity reversal, aggregation (fusion), propagation, domination, neutralization und intensification. Polarity Reversal ist die Umkehrung der Stimmung durch stimmungsändernde Wörter und die soeben beschriebenen Regeln zur Quantität eines Aspekts. Die Aggregation beschreibt das Zusammenschließen von gegenteiligen Wörtern zu der Stimmung des dominanteren Worts, zum Beispiel POS(„beautiful“) und NEG („fight“) wird zu POS(„beautiful fight“). Propagation bezieht sich auf sogenannte „transfer“- und „propagation“-Wörter, die die Stimmung auf ein anderes Wort übertragen. So ist „his behaviour“ allgemein kein stimmungshaltiges Wort, wenn es jedoch im Zusammenhang mit POS(„to admire“) steht, wird das positive Sentiment auch auf POS(„his behaviour“) mit übertragen. Die Regeln der domination sind wie folgt. Wenn die Polaritäten von einem Verb und einem Objekt entgegengesetzt sind, dann wiegt die Polarität des Verbs schwerer (NEG(„to deceive“) und POS(„hopes“) => NEG(„to deceive hopes“). Wenn ein zusammengesetzter Satz durch „but“ eingeleitet wird, wiegt der Satzteil mit dem „but“ schwerer (NEG(„It was hard to climb a mountain all night long“), but POS(„a magnificent view rewarded the traveler at the morning“) => POS(ganzer Satz)). Die Regel der neutralization sagt aus, dass Stimmungswörter neutralisiert werden können, wenn bestimmte Modifizierer angebracht werden („despite“ und NEG(„worries“) wird zu NEUT(„despite worries“). Die letzte Regel ist die der intensification und besagt, dass bestimmte Modifizierer die Stärke eines Sentiment erhöhen können (POS_Wert(„happy“) < 52 Fachliche Grundlagen POS_Wert(„very happy“). In einem Experiment hat diese Auswahl an Features eine signifikant höhere Genauigkeit gebracht als vorherige Methoden (bis zu 87%). 2.2.4.7 Satz- und Sonderzeichen In bestimmten Fällen können neben den eigentlichen Wörtern auch Satzzeichen einen Aufschluss über die ausgedrückte Stimmung geben. Die übermäßige Nutzung von Ausrufe- und Fragezeichen drückt oft eine aggressive Haltung des Meinungsvertreters aus und kann ein Hinweis auf Negativität sein. Diese aggressive Haltung kann ebenso durch exzessive Großschreibung erreicht werden, wodurch selbst die Kapitalisierung von Wörtern ein Untersuchungsobjekt darstellen kann. Sonderzeichen werden unter anderem dafür verwendet, Emoticons zu erstellen. Diese Stimmungs-Symbole ( „: - )“, „: - (“) drücken Zufriedenheit oder Abneigung aus und sind somit wichtige Feature (vgl. [16]). 2.2.4.8 Syntakische Abhängigkeiten Die bereits vorgestellten N-Gramme und das Bag-of-Words-Model sind nicht dazu in der Lage, syntaktischen Abhängigkeiten von nicht zusammenhängenden Wörtern abzubilden. Das heißt, dass in einem N-Gramm zwar die Folge „guter Film“ vorkommen kann, aber die Folge „ein guter und sehr spannender Film“ ein anderes NGramm bilden würde. In [74] wurde mithilfe eines Entscheidungsbaumes nach häufig vorkommenden Mustern in Filmkritiken gesucht. Diese wurden als Feature verwendet und haben zu einer sehr hohen Genauigkeit (87% statt circa 83% mit dem Bag-of-Words-Modell) geführt. 53 Fachliche Grundlagen 2.2.4.9 TF-IDF-Maß Das TF-IDF-Maß ist ein Wert, der zur Beurteilung der Wichtigkeit eines Wortes in einem Korpus ausgewandt werden kann. Das TF steht für Term Frequency, also die Häufigkeit des Vorkommens eines Worts in dem Korpus. Wenn dieser Häufigkeit allerdings zu viel Gewicht zugeordnet wird, werden Wörter, die zwar häufig vorkommen, aber generell wenig sinnvolle Informationen weitergeben, in ihrer Wichtigkeit zu hoch eingeschätzt. Im Deutschen sind dies unter anderem Bindewörter wie „und“ und „Artikel“. Aus diesem Grund wird mit der inversen Dokumentenhäufigkeit (IDF) ein Wert zur Bestimmung des Informationsgehalts eines Wortes berechnet. Der IDF-Wert wird durch die Formel 𝐼𝐷𝐹(𝑡, 𝐷) = log |𝐷| + 1 𝐷𝐹(𝑡, 𝐷) + 1 bestimmt, wobei t das zu untersuchende Wort, D das zu untersuchende Dokument, DF(t, D) die Anzahl der Dokumente, in denen das Wort t vorkommt und |D| die Gesamtanzahl aller Dokumente im Korpus ist. Die Nutzung des Logarithmus sorgt dafür, dass der IDF Wert 0 wird, wenn das Wort t in allen Dokumenten vorkommt. Der TD-IDF-Wert kann anschließend durch 𝑇𝐹𝐼𝐷𝐹(𝑡, 𝑑, 𝐷) = 𝑇𝐹(𝑡, 𝑑) ∗ 𝐼𝐷𝐹(𝑡, 𝐷) berechnet werden, wobei TF(t, d) die Anzahl des Wortes t in einem Dokument d ist. 54 Technische Grundlagen Technische Grundlagen 3 In diesem Kapitel werden die technischen Grundlagen dieser Arbeit beschrieben. Dabei wird zunächst darauf eingegangen, wie Daten aus technischer Sicht definiert sind und wie diese gespeichert werden können. Es wird der Unterschied zwischen flüchtigem und nicht flüchtigem Speicher erklärt und daraus abgeleitet, warum die in dieser Arbeit genutzte in-memory-Technologie sinnvoll ist. Darüber hinaus wird auf das verwendete System eingegangen, das sich auf dem Hadoop-Filesystem HDFS und dem Framework Apache Spark zusammensetzt. 3.1 Daten und Datenspeicher Der Oxford Dictionary definiert Daten als „the quantities, characters, or symbols on which operations are performed by a computer, stored and recorded on magnetic, optical, or mechanical recording media, and transmitted in the form of electrical signals“18. Im übertragenden Sinne sind Daten also schlichtweg maschinenlesbare und -bearbeitbare Zeichenketten, die einer bestimmten Syntax entsprechen. Sie werden dafür genutzt, Informationen zu erlangen und Wissen zu generieren. So könnte die beispielsweise die Zeichenfolge „Phoenix“ eine Stadt, ein Name oder eine mystische Kreatur. Erst durch einen Kontext wird aus den Daten eine bedeutungsvolle Information. Die Informationen werden zum Wissen, wenn sie organisiert, weiterverarbeitet oder anderweitig genutzt werden. 18 http://www.oxforddictionaries.com/definition/american_english/data 55 Technische Grundlagen Abbildung 10: Wissenspyramide Jedes Jahr werden mehr digitale Daten auf der Welt produziert, verarbeitet und weitergeleitet. Während der weltweite Datenverkehr 2008 noch ein Volumen von 487 Milliarden Gigabyte hatte, sollen es im Jahre 2016 bis zu 1,3 Zettabyte, die fast dreifache Menge von 2008, sein19. Für diese Arbeit sind vor allem Konzepte zur Speicherung von Daten wichtig. Moderne digitale Computer arbeiten mit dem Binärsystem. Jegliche Daten werden in eine Folge von Bits konvertiert. Ein Bit kann die Werte 0 und 1 annehmen. Es ist jedoch unüblich, nur einzelne Bits zu speichern, da für die Repräsentierung eines Schriftzeichens mehrere Bits notwendig sind. Die am meisten genutzte Speichereinheit ist deswegen das Byte, das eine Folge von 8 Bit darstellt und in der Anfangszeit der PCs zur Kodierung eines einzelnen Schriftzeichens ausreichte. Die wichtigsten Technologien zur Datenspeicherung sind heutzutage Halbleiterspeicher und magnetische Speicher. Die Hauptanwendung von magnetischen Speichern sind Festplatten zur Massenspeicherung von Daten. Eine Festplatte ist eine sich drehende Scheibe aus magnetisierbarem Material, über der ein Schreibarm (Actuator) mit einem elektromagnetischen Kopf sitzt20. Beim Schreiben von Daten magnetisiert der Kopf Bereiche der 19 http://www.spiegel.de/netzwelt/web/weltweiter-datenverkehr-soll-sich-bis-2016-vervierfachen-a836495.html 20 Festplatten haben noch weitere Bestandteile (z.B. Anschlüsse, Actuatorachsen, Stromversorgung), die an dieser Stelle außer Acht gelassen werden 56 Technische Grundlagen Plattenoberfläche. Hierbei muss hervorgehoben werden, dass sie sich Platte physisch um die eigene Achse drehen muss. Die Bipolarität der Platte lässt sich anschließend wieder auf das Binärsystem übertragen: nicht magnetisiert für 0, magnetisiert für 1. Das gleiche Prinzip gilt auch beim Lesen der Daten: Um einen bestimmten Bereich zu lesen, muss sich die Platte erst bis zu der Stelle drehen, an der die Daten gespeichert sind. Dies nimmt Zeit in Anspruch und sorgt somit für langsamere Lese-/und Schreibezeiten. Der Vorteil von Festplatten besteht darin, dass sie nicht flüchtige Speicher sind, also ihre Daten auch ohne Stromzufuhr persistent halten können. Des Weiteren sind sie als sehr gereifte Technologie verhältnismäßig preiswert. Sie finden zum Beispiel als Datenspeicher von PCs oder Datenbanksystemen Anwendung. Halbleiterspeicher basieren auf einem anderen Prinzip: jedes Bit wird in einem integrierten Schaltkreis, der aus ein oder mehreren Transistoren besteht, gespeichert. Diese sogenannten Speicherzellen bilden die Basis vieler Datenträger, von denen hier zunächst die Solid State Disk (SSD) und der Random-Access Memory (RAM) hervorgehoben werden sollen. Die SSD verwendet NAND-Flash-Speicher, eine Technologie, bei der Floating-Gate-Transistoren eingesetzt. Das Floating-Gate ist eine isolierte Elektrode, die Ladung permanent speichern kann und erst beim Anlegen negativer Spannung wieder entladen wird. Dadurch ist auch die SSD, ähnlich wie die oben beschriebene Festplatte, ein nicht flüchtiger Speicher. Sie erreicht höhere Lese-/und Schreibgeschwindigkeiten, ist durch die fehlenden mechanischen Bewegungen leiser und robuster. Der RAM ist hingegen ein flüchtiger Speicher. Das heißt, dass die Daten bei einer Unterbrechung der Stromzufuhr verloren gehen. Der Name Random-Access Memory liegt dem Fakt zu Grunde, dass jede Speicherzelle direkt angesprochen werden kann und nicht sequenziell oder in Blöcken ausgelesen werden muss. Ram zeichnet sich deswegen durch besonders schnelle Zugriffszeiten aus und wird deshalb als Hauptspeicher von Computern verwendet. Nachteilig wirken sich der verhältnismäßig hohe Preis und die Flüchtigkeit des Speichers aus. 57 Technische Grundlagen Die Tabelle 10 fasst die Hauptmerkmale der drei vorgestellten Speichermedien zusammen. Bei den Zugriffsgeschwindigkeiten wird zwischen sequentiellen Zugriff und direktem Zugriff unterschieden, um den Vorteil des Random-Access Memory zu verdeutlichen. Zu beachten ist, dass die Werte von 2009 stammen. Zu dieser Zeit waren SSDs auf dem Verbrauchermarkt noch nicht so weit gereift. Speicher- Flüchtigkeit medium Zugriffsgeschwindigkeit21 sequentiell direkt Preis22 Festplatte (SATA) Nicht flüchtig 53.2M Werte/sek 316 Werte/sek ab 0,03€ pro GB SSD Nicht flüchtig 1924 Werte/sek 42.2M Werte/sek ab 0,35€ pro GB RAM flüchtig 36.7M Werte/sek 358.2M Werte/Sekunde ab 7,37€ pro GB23 Tabelle 10: Vergleich von Speichermedien Da bei großen Datenmengen eine hohe Verarbeitungsgeschwindigkeit ausschlaggebend ist, wird RAM immer häufiger im Bereich des Big Data als „In-Memory“Technologie eingesetzt. Dabei gilt es, zwei große Schwachpunkte des RAMs auszugleichen: Zuverlässigkeit und begrenzte Kapazität24. Eine angemessene Lösung sind verteilte Systeme. Durch Replikation von Hardware und Daten werden die Auswirkungen bei Ausfällen reduziert. Des Weiteren wird das System sowohl in der Kapazität als auch in der Rechenleistung horizontal skalierbar. Das HDFS ist ein Dateisystem für verteilte Rechnersysteme und auch Apache Spark nutzt In-Memory Technologie. Beide Systeme werden in den folgenden Kapiteln erklärt. 21 Werte entommen aus Figure 3 in http://queue.acm.org/detail.cfm?id=1563874 Endverbaucherpreise von www.alternate.de (20.02.2015) 23 DDR3-RAM 24 Vgl http://www.cubrid.org/blog/dev-platform/introduction-to-in-memory-data-grid-main-features/ 22 58 Technische Grundlagen 3.2 Hadoop Distributed File System Das Hadoop Distributed File System (HDFS) ist ein Dateisystem zum Speichern großer Datenmengen auf verteilen Rechnersystemen (Cluster), das im Jahre 2008 im Rahmen des Hadoop-Projekts der Apache Foundation veröffentlich wurde. Ziel bei der Entwicklung ist vor allem hohe Fehlertoleranz, da Fehler in der Hardware bei einer Vielzahl von Rechnern eher die Regel als die Ausnahme darstellen. Des Weiteren soll die performante und skalierbare Arbeit mit großen Datasets ermöglicht werden. Typischerweise steht dabei eine hohe Lesegeschwindigkeit im Vordergrund. Datensätze sollen möglichst nur einmal erstellt bzw. geschrieben werden, aber dauerhaft zum Lesen bereit stehen. Die Architektur von HDFS ist nach dem Master/Slave-Modell aufgebaut. Den Kern eines HDFS-Clusters bildet ein Master-Server, der sogenannte Namenode (Master). Er ist für die Regulierung der clientseitigen Zugriffe auf Dateien verantwortlich. Darüber hinaus verwaltet er den Namensraum des Dateisystems. Der Namensraum ähnelt stark dem anderer Dateisysteme: er ist hierarchisch strukturiert (Ordner, Unterordner, Dateien) und ermöglicht das Erstellen, Löschen, Verschieben und Umbenennen von Dateien und Ordnern. Intern werden Dateien in Blöcke aufgespalten und in Datanodes (Slave) abgelegt. Das Mapping, also wie die Blöcke in den Datanodes abgelegt werden, wird ebenfalls vom Namenode verwaltet. 59 Technische Grundlagen Abbildung 11: HDFS-Architektur25 3.3 Apache Spark Spark ist ein open-source Framework für skalierbare und verteilt arbeitende Software, das 2009 an der University of Berkeley entwickelt und 2013 an Apache gestiftet wurde. Spark ein sehr wachsendes und aktives Projekt (Tabelle 11). Es ist zurzeit eines der drei aktivsten Projekte der Apache Foundation und hatte in der ersten Hälfte des Jahres 2014 mehr Beiträge von Entwicklern als MapReduce, YARN und HDFS zusammen. Auch im Vergleich mit allgemeinen Projekten des Big Data- und Machine Learning-Bereichs sticht Spark hervor. So ist es zum Beispiel aktiver als NumPy oder matplotlib, zwei beliebte Python-Projekte zur Datenverarbeitung. 25 http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html 60 Technische Grundlagen Juni 2013 Juni 2014 beitragende Entwickler 68 255 beitragende Firmen 17 50 Gesamtanzahl lines of code 63 000 175 000 Tabelle 11: Apache Spark Projekt-Aktivität Warum konnte Spark in so einer kurzen Zeit so wachsen und welche Anwendungsbereiche hat es zurzeit? Laut [78] ist die Fähigkeit große Datenmengen zu speichern kein Wettbewerbsvorteil mehr für Unternehmen, da die Kosten und der Aufwand für große Datenspeicher in den vergangenen Jahren stark gesunken sind. Die wirklichen Vorteile liegen nun in zwei Bereichen: Geschwindigkeit und Qualität der Datenverarbeitung. Die Geschwindigkeit beschreibt, wie schnell man von Daten zu Entscheidungen kommen kann, während die Qualität beschreibt, welche Algorithmen man auf die Daten anwenden kann. In beiden Bereichen sticht Apache Spark hervor. In [3] wurde zum ersten Mal die gute Performance von Spark SQL, das damals noch Shark hieß, beschrieben. In einem Experiment wurden SQL-Abfragen an sowohl Apache Hive, der Dataware House-Erweiterung von Hadoop und an Spark SQL geschickt. Die verwendete Abfrage war nach dem Muster SELECT * FROM grep WHERE field LIKE ’%XYZ%’; aufgebaut und wurde auf ein 50GB Dataset angewandt. Sowohl das Hive Cluster als auch das Spark Cluster haben bei einer gleichen Ausstattung 10 Nodes für die Durchführung der Anfrage zur Verfügung gehabt. Die enormen Unterschiede in der Performance können Abbildung 12 entnommen werden, wobei das „cold“ heißt, dass zunächst ein RDD26 erstellt werden muss und „hot“, dass das RDD bereits vorhanden ist und nur noch einmal verwendet werden muss. 26 Siehe Kapitel 3.3.2 61 Technische Grundlagen Abbildung 12: Ausführungszeigen Spark/Hive im Vergleich Ein ähnlicher Test wurde in der gleichen Arbeit auch zum Thema Machine Learning gemacht. Sowohl auf Spark als auch auf Hadoop wurde eine lineare Regression und ein k-means-Algorithmus über 10 Iterationen auf ein 100GB Dataset angewandt. Spark war bei der linearen Regression über 25mal schneller und bei der rechenintensiveren k-means-Methode immernoch über 3mal schneller. Noch beeindruckender sind die auf Databricks27 veröffentlichten Ergebnisse28 vom letzten Jahr: Spark hält den Weltrekord im Sortieren großer Datenmengen. Beim Test auf einem System aus 6592 Kernen und 206 Nodes konnte ein 100TB großes Datenset innerhalb von 23 Minuten sortiert werden. Zum Vergleich: der vorherige Weltrekord wurde von Hadoop MapReduce gehalten und lag bei der Nutzung von 10mal mehr Nodes bei 72 Minuten. Darüber hinaus wird Spark mit einer Vielzahl von anspruchsvollen Algorithmen zur Datenverarbeitung ausgeliefert und häufig erweitert. Die einzelnen Komponenten erlauben unter anderen maschinelles Lernen und das Arbeiten mit Graphen. Die 27 28 Entstanden aus dem UC Berkeley AMPLab, Erfinder von Spark http://databricks.com/blog/2014/11/05/spark-officially-sets-a-new-record-in-large-scale-sorting.html 62 Technische Grundlagen Benutzung dieser Algorithmen kann sehr elegant sein. So hat zum Beispiel Yahoo! in einem Testprojekt das bisherige Hadoop basierte Programm zur Personalisierung der Website auf Spark umgestellt. Dabei ist das Projekt von 15 000 Zeilen C++ Code auf nur 120 Zeilen Code in Scala geschrumpft. Viele weitere Firmen nutzen Spark in unterschiedlichsten Bereichen wie Sicherheit29, Echtzeitempfehlungen30 und Business Intelligence31. In den folgenden Kapiteln wird näher auf den Umfang und die Architektur von Spark eingegangen. Des Weiteren werden die Resilient Distributed Datasets, die das fundamentale Konzept von Spark bilden, erläutert. 3.3.1 Spark Komponenten und Architektur Das Spark-Projekt besteht aus mehreren Komponenten, die in Abbildung 13 grafisch dargestellt sind. Die Hauptfunktionen befinden sich im Spark Core. Hier werden die Aufgaben verwaltet, das Dateisystem angesprochen und die Fehlerbehandlung in Gang gesetzt. Im Spark Core ist darüber hinaus die Spark API enthalten, die unter anderem die in Kapitel 3.3.2 beschriebenen RDDs bereitstellt. 29 https://www.youtube.com/watch?v=ogedtaPYsyM | https://www.youtube.com/watch?v=O6qUCfKzS_o https://www.youtube.com/watch?v=3LBgiFch4_g | https://www.youtube.com/watch?v=dKOU16SG214 31 https://www.youtube.com/watch?v=5p3xU49ec_I 30 63 Technische Grundlagen Abbildung 13: Spark Stack32 Eine weitere Komponente ist Spark SQL. Seine Anfänge hatte Spark SQL als Apache Shark-Projekt, bis es komplett in Spark integriert wurde. Aus diesem Grunde findet man noch viele Publikationen unter dem alten Namen. Im Grunde genommen ist Spark SQL ein Datenanalyse-System, das neben SQL-Abfragen auch weiterführende Funktionalität ermöglicht. Es ist kompatibel zu Apache Hive, dem Datawarehouse-System von Apache, und ist in der Lage, Hive Query Language-Abfragen (HQL) auszuführen. Die Kompatibilität zu Hive ermöglicht die Arbeit mit Systemen, die die Hadoop API implementieren. Dazu gehört auch das Dateisystem HDFS, das im praktischen Teil dieser Arbeit genutzt wird. Weitere Dateiformate, wie JSON, XML und Parquet werden ebenfalls unterstützt. Für diese Arbeit ist außerdem das Modul Mlib wichtig. Mlib ist eine Bibliothek mit verschiedenen Algorithmen und Funktionalitäten im Bereich des maschinellen Lernens. Es wird eine Vielzahl von Algorithmen bereitgestellt. Darunter befinden sich auch die für die Sentiment Analyse üblichen Klassifikatoren, wie zum Beispiel Support Vektor Machines und Bayes. Die Klassen können in Java, Python und Scala genutzt werden. Ähnlich wie bei Spark SQL ist es auch hier möglich, Hadoop-Dateisysteme anzusprechen. 32 http://www.pentaho.com/sites/default/files/uploads/resources/learning_spark_preview_ed.pdf 64 Technische Grundlagen Die beiden anderen Komponenten, Spark Streaming und GraphX, spielen in dieser Arbeit eine eher untergeordnete Rolle. Spark Streaming ermöglicht die Verarbeitung von Datenströmen zur Laufzeit. GraphX hingegen ist eine Bibliothek mit diversen Funktionen zur Manipulation und Verarbeitung von Graphen. Sie stellt gängige Algorithmen wie zum Beispiel PageRank bereit. Beide Komponenten erweitern die RDDs von Spark und sind über Java, Python und Scala ansprechbar. Die in Abbildung 15 unter dem Spark Core abgebildeten Elemente sind die sogenannten Cluster Manager. Spark wird üblicherweise auf Computer Clustern, also einem Verbund mehrere Rechner, ausgeführt. Dabei koordiniert der SparkContext die verschiedenen, voneinander unabhängigen, Prozesse der Spark Anwendung. Um diese Aufgabe erfüllen zu können, muss der SparkContext mit einem Cluster Manager verbunden werden, der die Ressourcen über die verschiedenen Anwendungen verteilt. Derzeit werden drei verschiedene Cluster Manager unterstützt: Sparks eigener Cluster Manager, YARN und Mesos. Letztere sind ebenfalls Projekte der Apache Foundation. Abbildung 14: Spark Cluster-Architektur33 Die höchste Einheit in Spark ist eine Applikation, also eine Instanz des SparkContext. Innerhalb einer Applikation können mehrere Jobs ausgeführt werden. Dies 33 https://spark.apache.org/docs/latest/img/cluster-overview.png 65 Technische Grundlagen können einzelne Batches, interaktive Sitzungen mit mehreren Jobs oder dauerhaft verfügbare Server, die auf Anfragen antworten, sein. Jede Applikation hat sogenannte Executors, die sich auf Worker Nodes befinden. Ein Executor führt bestimmte Prozesse für die Applikation aus und bleibt für die gesamte Laufzeit der Applikation verfügbar. Also selbst dann, wenn er zurzeit keinen Prozess ausführt. Dies hat verschiedene Vorteile. Zum einen laufen so Applikationen isoliert voneinander ab (vgl. [81]) und zum (vgl. [80]) anderen können sie Prozesse schnell gestartet werden und auf die in-memory Daten zugreifen Nachteilig ist, dass sich Applikationen keine Daten teilen können. Mit Spark ist es möglich, Jobs sowohl innerhalb einer Applikation als auch applikationsübergreifend zu planen. Für die applikationsübergreifende Planung ist der Cluster Manager verantwortlich. Generell unterscheidet man hier zwei Arten, Ressourcen zu verteilen. Beim static partioning erhält jede auf dem Cluster laufende Applikation ein festgelegtes Maximum an Ressourcen. Etwas flexibler verhält sich das dynamic sharing of CPU. Zwar bekommen die Applikationen auch hier ein festgelegtes Maximum zugewiesen, aber wenn sie nicht laufen, können andere Applikationen die zugewiesenen CPU-Kerne nutzen. Innerhalb einer Applikation können mehrere Jobs gleichzeitig laufen (siehe Abbildung 16). Standardmäßig wird das First in-First out-Prinzip genutzt (FIFO). Das heißt, dass der Job, der zuerst gestartet wurde, bei der Verteilung von Ressourcen priorisiert wird. Abbildung 15: Jobausführung in einer Spark-Applikation34 34 http://blog.cloudera.com/wp-content/uploads/2014/05/spark-yarn-f1.png 66 Technische Grundlagen 3.3.2 Resilient Distributed Datasets Apache Spark nutzt Resilient Distributed Datasets (RDD) zur Ausführung von inmemory Anwendungen auf Computer-Clustern. RDDs wurden zuerst in [4] als „read-only, partioned collection of records“ beschrieben. Sie können nur durch Transformation (transformations), also deterministische Operationen, aus einem zuverlässigen Speicher oder anderen RDDs erstellt werden. Zu diesen Operationen zählen zum Beispiel Filter, Gruppierungen, Kreuzprodukte, Partitionen und weitere. Jedes RDD enthält Informationen darüber, wie es von anderen Datasets erschaffen wurde. Dies dient der Fehlertoleranz, da es so für ein Programm nicht möglich ist, ein RDD zu referenzieren, das es nach einem Fehler nicht wiederherstellen kann. Für die Nutzung von RDDs wird gegen die API von Spark programmiert. Der erste Schritt dabei ist die Definition und Transformation von RDDs aus einem zuverlässigen Speicher. Anschließend können auf diesen RDDs Operationen (actions) ausgeführt werden, die Werte zurückgeben oder Daten in einen Speicher exportieren. Eine Übersicht über die gängigen Transformationen und Operationen kann der Spark Dokumentation35 entnommen werden. Darüber hinaus können RDDs für die spätere Nutzung mithilfe der persist-Methode im Speicher von Spark abgelegt werden. In [4] werden sowohl Vorteile als auch Grenzen von RDDs ausgearbeitet. Verglichen wird hierbei mit der Distributed Shared Memory (DSM) Technologie, die die Verteilung des Arbeitsspeichers auf verteilten Systemen beschreibt. Der größte Unterschied zwischen RDDs und den herkömmlichen DSM besteht auf in Granularität der Lese- und Schreiboperationen. DSMs verhalten sich feingranular (fine-grained). Dies bedeutet, dass bei einem Update jeder Datensatz einzeln angesprochen wird. Im Gegensatz dazu sind RDDs grob granular (coarse grained). Die Datensätze können also nicht einzeln angesprochen werden. Stattdessen beziehen sich die Operationen immer auf das gesamte Datenset und es wird die Information, durch welche Operation das RDD entstanden ist, mit abgelegt. Dadurch wird die Nutzung von RDDs auf Anwendungen beschränkt, die ihre Datenoperationen in Bulk ausführen 35 http://spark.apache.org/docs/1.2.0/programming-guide.html#rdd-operations 67 Technische Grundlagen wollen. Ein Vorteil hingegen ist, dass die Fehlerbehandlung effizienter wird, da fehlerhafte Partitionen eines RDDs schlichtweg neu berechnet werden können. Darüber hinaus wird auch ein großer Overhead gespart, da für die Wiederherstellung der RDDs keine Log-Dateien, sondern nur der sogenannte Lineage-Graph, notwendig sind. Als Lineage-Graph bezeichnet man dabei die Kette von Informationen, welche Transformationen auf den betreffenden RDDs durchgeführt wurden. Des Weiteren kann die Runtime-Umgebung bei der Nutzung von Bulk-Operationen auf RDDs durch Planung der Tasks die Performance verbessern. Resilient Distributed Datasets werden für gewöhnlich durch fünf Elemente (Tabelle 12) so dargestellt, dass ihre Abstammung nachvollziehbar bleibt. Bezeichnung Spark-Implemen- Erklärung tierung Partition Partitions() Atomare Stücke des Datasets. Abhängigkeiten Dependencies() Abhängigkeiten zu den Eltern-RDDs Berechnungsfunktion Iterator(p, parentI- Eine Funktion, um das RDD anhand der Elters) tern-RDDs zu berechnen. Anordnung der Da- preferredLoca- Informationen zur Anordnung der Daten. ten tions(p) Auf einige Partionen p kann durch Lokalität der Daten schneller zugegriffen werden. Partionsschema Partitioner() Informationen zur Partitionierung der Daten (hash/range). Tabelle 12: Repräsentationselemente von RDDs Durch die Nutzung von Operationen können zwischen den RDDs zwei verschiedene Abhängigkeiten, nämlich die engen (narrow) und weiten (wide), entstehen. Bei engen Abhängigkeiten wird jede Partition des Eltern-RDD höchstens von einer Partition des Kind-RDDs benutzt, während es bei weiten Abhängigkeiten mehrere sein können. Diese bewusste Unterscheidung hat den Vorteil, dass bei engen Abhängigkeiten ein besserer Ausführungsplan auf nur einem Knoten des Clusters genutzt werden kann und die Wiederherstellung bei einem Fehler effizienter ist, da nur die 68 Technische Grundlagen verlorengegangenen Eltern-Partitionen wieder hergestellt werden müssen. Abbildung 16 stellt den Unterschied zwischen den beiden Abhängigkeitsformen grafisch so dar, dass ein blaues Rechteckt ein RDD ist, die in ihm liegenden ausgefüllten Rechtecke Partitionen sind und die gerichteten Pfeile die Abhängigkeiten sind. Abbildung 16: Abhängigkeitsformen von RDDs 3.3.3 Daten in Apache Spark Apache Spark setzt auf das HDFS-Filesystem auf. Wie bereits in Kapitel 3.2 erwähnt, werden Dateien in HDFS in Blöcke unterteilt und auf Data Nodes abgelegt. Die Größe der Blöcke kann dabei je nach Einstellung des Systems entweder 124MB (Standard) oder 64MB. Dateien werden redundant auf die Data Nodes verteilt und dabei gesplittet, wenn sie die Blockgröße überschreiten. Wie genau die Dateien gesplittet werden, hängt vom InputFormat36 ab. Textdateien können beispielsweise zeilenweise aufgeteilt werden. 36 http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapred/InputFormat.html 69 Technische Grundlagen Abbildung 17: Partitionierung einer Datei in HDFS Beim Laden von Dateien in Apache Spark orientiert sich die Partitionsgröße zunächst an den Blöcken im HDFS. Das heißt, die in Abbildung 17 gezeigte Datei würde als RDD mit zwei Partitionen erzeugt werden. Zur Anpassung der Parallelisierung ist es möglich, RDDs zu repartitionieren. Das führt dazu, dass die Daten auf dem Filesystem neu verteilt werden und kann somit anfangs Zeit in Anspruch nehmen. Die wichtigsten in dieser Arbeit verwendeten Datenstrukturen der MLLIB-Bibliothek und somit von Apache Spark sind Vektoren und LabeledPoints. Vektoren kann man in sparse (dünnbesetzte) und dense (dichtbesetzte) Vektoren unterteilen. In der Text-Klassifikation und somit auch in der Sentiment Analyse werden eher dünnbesetzte Vektoren genutzt, da es viele Feature (Wörter) in einem Korpus gibt, aber wahrscheinlich nur wenige dieser Wörter in einem einzelnen Dokument vorkommen. Man nehme zum Beispiel die beiden Sätze: „Ich mag Hunde viel lieber als Katzen.“ „Du magst Hamster viel mehr als Katzen.“ Das gesamte Vokabular ist also {Ich, mag, Hunde, viel, lieber, als, Katzen, du, magst, Hamster, mehr}. 70 Technische Grundlagen In einem dichtbesetzten Vektor würden die beiden Sätze wie folgt repräsentiert werden. Satz 1 = {1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0} Satz 2 = {0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1} Es werden also auch die Einträge, die nicht vorhanden sind, mit einer 0 repräsentiert. Dies führt bei einem großen Gesamtvokabular zu sehr großen, speicherintensiven Vektoren. Um dieses Problem zu umgehen, werden Daten auch in dünnbesetzten Vektoren dargestellt. In Spark wurden dünnbesetzte Vektoren unter dem Namen SparseVector 37 in der Version 1.0 implementiert (vgl. [72]). Die oben dargestellten Sätze sehen als SparseVector wie folgt aus: Satz 1 = {11, [0, 1, 2, 3, 4, 5, 6, 7], [1, 1, 1, 1, 1, 1, 1]} Satz 2 = {11, [3, 5, 6, 7, 8, 9, 10. 11], [1, 1, 1, 1, 1, 1, 1]} Der erste Eintrag stellt dabei die Gesamtgröße des Vokabulars bzw. aller Feature dar, der zweite Eintrag zeigt, an welchen Stellen (Index) der Vektor Einträge hat, die nicht 0 sind und der dritte Eintrag stellt den Wert dieser Einträge dar. Die Nützlichkeit dieser Systems wird klar, wenn man sich die Verhältnisse zwischen Gesamtanzahl der Feature und der Anzahl der Feature Dokument ändert. Die Phrase „Ich mag.“ würde beim oben beschriebenen Vokabular mit einem SparseVector wesentlich effizienter dargestellt werden als mit einem dichtbesetzten Vektor. dense = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0} sparse = {11, [1, 2], [1, 1]} 37 http://spark.apache.org/docs/1.2.1/api/scala/index.html#org.apache.spark.mllib.linalg.SparseVector 71 Sentiment Analyse in Apache Spark 4 Sentiment Analyse in Apache Spark In diesem Kapitel wird die Sentiment Analyse in Apache Spark beschrieben. Dabei wird zuerst auf die Sentiment Klassifikation auf Dokumenten-Ebene eingegangen. Es soll untersucht werden, wie gut Spark mit einer großen Anzahl von Features, wie es bei der Sentiment Klassifikation häufig der Fall ist, umgehen kann. Anschließend wird die Implementierung eines einfachen Algorithmus zur Sentiment Lexikon Generierung auf Apache Spark beschrieben. 4.1 Skalierbarkeit der Sentiment Klassifikation In diesem Kapitel wird auf die Sentiment Klassifikation in Apache Spark eingegangen. Dabei wird ein Vergleich zwischen einer lokalen Lösung, die auf der Python Bibliothek SKLearn basiert und Apache Spark, das auf einem Computer-Cluster der Hochschule für Technik und Wirtschaft Berlin aufgesetzt ist, durchgeführt. Das Ziel dieses Vergleichs ist das Testen der Skalierbarkeit von Algorithmen zur Sentiment Klassifikation. Obwohl also eine angemessene Genauigkeit der Analyse angestrebt wird, steht diese nicht im Vordergrund. 4.1.1 Vorgehen Die Grundlage für den Vergleich bilden die in Kapitel 4.2 beschriebenen Systeme und die in Kapitel 4.3 beschriebenen Daten. Mithilfe von zwei Python Skripte (Anhang) werden zunächst Feature gesammelt und dann die Sentiment Klassifikation mit dem naïven Bayes und der Support Vector Machine durchgeführt. Es wird versucht, die Skalierbarkeit der beiden Klassifikatoren zu beschreiben, indem verschiedene Konfigurationen des Clusters und unterschiedlich umfangreiche Daten genutzt werden. 72 Sentiment Analyse in Apache Spark Die Sentiment Analyse wird stark vereinfacht auf der Dokumenten-Ebene durchgeführt. Das heißt konkret, dass viele der in Kapitel 2 beschriebenen Grundlagen nicht getestet werden. Vielmehr geht es darum, ein möglichst großes Dataset mit Dokumenten in zwei Klassen, „positiv“ und „negativ“, einzuteilen. Dabei sollen die Möglichkeiten des Cluster-Systems und des Apache Spark-Framework genutzt werden. 4.1.2 Technische Basis Die Testsysteme sind zum einen in Tabelle 13 und zum anderen in Abbildung 18 dargestellt. Das in Abbildung 18 gezeigte Computer-Cluster der Hochschule für Technik und Wirtschaft Berlin besteht aus insgesamt 6 Rechnern, die über das Netzwerk verbunden sind. Sie haben alle Zugriff auf das unterliegende HDFSFilesystem mit insgesamt 10TB Speicherplatz. Der Zugriff auf das Cluster ist über das HTW-Netzwerk möglich und kann auch über VPN realisiert werden. Der SparkDriver, also die steuernde Einheit von Apache Spark im Cluster (siehe Kapitel 3.3.1) wird auf dem Rechner Hadoop03 gestartet, während die Rechner Hadoop04-Hadoop08 als Worker arbeiten. Standardmäßig starten die jeweiligen Worker mit der vollen Anzahl an Kernen (24) und 512MB Ram per Executor. Abbildung 18: Architektur des HTW-Cluster 73 Sentiment Analyse in Apache Spark Lokales System Computer Cluster Leistung pro Rechner, 6 Rechner insgesamt CPU Intel i5-4570 3.2 GHz Dell R420 Intel Xeon E52420 v2 2.20 GHz 1600Mhz; Zwei Prozessoren bei Hyper Threading 12 => 24 Kerne RAM 8GB , davon ca. 6 GB nutz- 16GB RDIMM bar Festplatte SATA 7200RPM, Cache Betriebssystem Windows 8.1 64 Bit Software Python 2.7, SciKit-Learn, Python 2.7, Apache Spark NLTK 64MB SAS-Festplatten, HDFSVerbund über Netzwerk Debian GNU/Linux 7.7 1.2, NLTK Tabelle 13: Testsysteme Die dort dargestellte genutzte Software ist zum einen das Natural Language Processing Toolkit (NLTK) und zum anderen SciKit-Learn. Das NLTK ist eine Bibliothek zur Textverarbeitung, die vor allem in Python sehr verbreitet ist. Sie ist sehr umfangreich, gilt aber nicht immer als die performanteste Lösung. So ist zum Beispiel der Algorithmus zum Part-of-Speech-Tagging vergleichsweise langsam38. Die zweite 38 https://honnibal.wordpress.com/2013/09/11/a-good-part-of-speechpos-tagger-in-about-200-lines-of-python/ 74 Sentiment Analyse in Apache Spark Software, SciKit-Learn, bietet eine Vielzahl an Funktionen zum maschinellen Lernen. Darunter sind diverse Klassifikatoren und Möglichkeiten zur Datenaufbereitung. Das Spark-Cluster lässt sich durch diverse Parameter in seiner Leistung konfigurieren. Bezeichnung Beschreibung spark.driver.memory Speicher des Driver (512MB Standard) spark.executor.memory Speicher pro Executor (512MB Standard) Threading Einstellbar unter –master x[Number of Threads], legt die maximale Threadanzahl fest Partitions per RDD Einstellbar beim Parallelisieren der RDDs, z.B. sc.parallelize(data, NumberOfPartitions) Tabelle 14: Konfigurationsparameter 4.1.3 Datenbasis Die Datenbasis für die Sentiment Analyse in Spark bilden die in [76] gesammelten Amazon-Kundenbewertungen39. Insgesamt umfassen unbereinigten Daten fast 35GB. Die Bewertungen stammen aus verschiedenen Produktkategorien. 39 https://snap.stanford.edu/data/web-Amazon.html 75 Sentiment Analyse in Apache Spark Anzahl von Kundenbewertungen 34,686,770 Anzahl von Kunden 6,643,669 Anzahl von Produkten 2,441,053 Anzahl von Kunden mit > 50 Bewertungen 56,772 Durchschnittliche Anzahl von Wörter pro Bewertungen 82 Zeit Jun 1995 - Mar 2013 Tabelle 15: Zusammenfassung Datenbasis Die Bewertungen befinden sich in verschiedenen, nach Kategorien unterteilten, Textdateien und haben folgende Metatags. Tag Bedeutung Beispiel product/productID Produkt ID B00004CQI3 review/userID Kunden ID A2H5D7IK95F07M review/profileName Kundenname ER review/helpfulness Andere Kunden empfan- 2/3 den dieses Review als hilfreich/nicht hilfreich review/score Bewertung (numerisch) 5.0 review/time Zeit des Review 1268179200 review/summary Titel /Zusammenfassung Great Family Movie review/text Bewertungenstext „This is a fantastic movie for...“ 76 Sentiment Analyse in Apache Spark Tabelle 16: Tags in Datenbasis Innerhalb des Textfiles stehen die Informationen zu den Metadaten immer innerhalb einer Zeile. Die einzelnen Bewertungen sind durch eine Leerzeile voneinander getrennt. Abbildung 19: Aufbau der Datenbasis 4.1.4 Aufbereitung der Daten Die Daten sind in ihrer ursprünglichen Form nicht für die Klassifikation nutzbar. Zum einen beinhalten sie überflüssige Informationen und zum anderen sind sie in einem falschen Format. In einem ersten Schritt müssen nur die relevanten Informationen rausgefiltert werden. Dies ist zum einem der Review/Score und der Review/Text. Das Einlesen erfolgt auf dem lokalen System zeilenweise (Abbildung 20). Dabei werden die irrelevanten Zeilen übersprungen. 77 Sentiment Analyse in Apache Spark Abbildung 20: Einlesen der Daten in SciKit Learn In Spark ist dieses Vorgehen ungeeignet, da nicht sichergestellt werden kann, dass Reviews beim Partitionieren der Dateien nicht getrennt werden. Wie in Kapitel 3.3.3 beschrieben, werden Dateien in Spark aus den Data-Nodes des HDFS-Filesystem heraus erstellt und zeilenweise in blockgroße Partitionen aufgeteilt. In Abbildung 21 ist die oben beschriebene Situation vereinfacht anhand einer 160MB Textdatei dargestellt. Man nehme an, dass in Zeile 442 die maximale Blockgröße von 128MB erreicht wurde. Die Datei wird auf dem HDFS-Dateisystem also auf zwei Data-Nodes verteilt abgelegt. Für den Aufruf der Datei in Spark mit dem, Befehl bedeutet das, dass Zeile 1-441 in Partition 1 und alles ab Zeile 442 in Partition zwei zu finden ist. Mit den Befehlen getNumpartitions() und partitions.collect() kann dieses Verhalten nachvollzogen werden. 78 Sentiment Analyse in Apache Spark Abbildung 21: Aufteilung einer Datei in HDFS Diese Information ist wichtig, weil es durch dieses Verhalten vorkommen kann, dass ein Review/Score einem Review/Text nicht eindeutig zugeordnet werden kann. Um dieses Problem zu umgehen, wird in Spark ein zusätzlicher Bearbeitungsschritt durchgeführt. Die ursprüngliche Datei wird zunächst nach den relevanten Zeilen gefiltert und dann repartioniert, damit sich alle Daten an einem Punkt befinden. 79 Sentiment Analyse in Apache Spark Abbildung 22: Datenvorbereitung Spark Aus der Partition wird nun ausgehend von der in Python implementierten Logik, dass ein Review/Text immer auf den dazugehörigen Review/Score folgt, eine neue Datei erzeugt, die wieder im HDFS gespeichert wird. Nun sind alle zusammengehörigen Informationen in einer Zeile und können nicht mehr getrennt auftreten. Der Aufbau der Daten ist nun ID[;]Score[;]Review/Text. Dieser Vorgang muss für jede Datei nur einmal durchgeführt werden. Sowohl in Spark als auch in SciKit Learn werden Review/Text und Review/Scores für die Weiterverarbeitung getrennt gehalten und erst bei der Vorbereitung zur Klassifikation wieder zusammengeführt. Dies wird in Spark nun durch eine eindeutige Zeilennummer ermöglicht (Review/Text und Review/Score von Bewertung 1 befindet sich in Zeile 1 der ursprünglichen Datei). Der Review/Score ist bei der Klassifikation die erwünschte Klasse. Die Klassifikation soll ein binäres Problem sein. Das heißt, dass in den Dokumenten nur zwischen „positiv“ und „negativ“ unterschieden werden soll. Dabei gilt ein Score von über 3.0 als positiv und ein Score von 3.0 oder niedriger als negativ. Aus dem Review/Text werden die Features gebildet. Der Text wird in einzelne Wörter unterteilt und weiter bearbeitet. Es werden verschiedene Bearbeitungsschritte unternommen, die zum Testen der Skalierbarkeit allerdings teilweise weggelassen werden. Darunter sind das Entfernen von Punktation, Lemmatisierung, das Zuordnen der Wortart und das Entfernen häufiger Wörter, wie „and“, „or“ und „is“, die 80 Sentiment Analyse in Apache Spark höchstwahrscheinlich keinen Einfluss auf das Ergebnis der Sentiment Klassifikation haben werden (stopwords). Abbildung 23: Funktionen zur Datenvorbereitung in Spark Anschließend muss der Text in ein für den Klassifikator lesbares Datenformat gebracht werden. Bei SciKit Learn geschieht dies über einen TFID-Vectorizer, der für jedes Wort im Dokument das TFID berechnet und abspeichert. Um ihn Spark ein ähnliches Verfahren hinzukriegen, müssten mehrere Schritte durchgeführt werden. Abbildung 24: Ermittlung TFIDF in Spark Zunächst werden die Dokumente mit einem Hash-Vectorizer gehasht. Das heißt, dass ein beliebiges Wort gemappt wird, indem mithilfe einer Hashfunktion ein Index 81 Sentiment Analyse in Apache Spark zugewiesen wird. Anschließend wird die Häufigkeit jedes Wortes anhand der Indizes berechnet. Der Vorteil dieser Funktion besteht darin, dass sie effizient ist, da keine globale Index-zu-Wort-Zuordnung berechnet werden muss. Es kann jedoch passieren, dass es zu Hash-Kollisionen kommt, also dass zwei unterschiedliche Wörter einen gleichen Hash-Wert erhalten und somit gleichgesetzt werden. Durch die Nutzung des HashingTF() entsteht in Spark ein Vektor, dessen StringRepräsentation in unten zu sehen ist. Vorne stehen die Hashwerte und hinten die Häufigkeit des Auftretens in dem Dokument. {1048576, [51713, 91349, 113450], [1.0, 2.0, 1.0]} IDF und TFIDF sind in Spark getrennt. Zunächst muss IDF gebildet werden, indem die vorher berechneten Hash-Werte mit der Funktion .fit() in das IDF-Model geladen werden. Dadurch wird der IDF-Vektor berechnet, der anschließend mit der .transform() Anweisung skaliert werden kann. Das Ergebnis ist der TFIDF-Vektor: (u‘4‘, SparseVector(1048576, {51713: 2.5257, 91349: 1.4271, 113450: 3.2189})) dem an erster Stelle bereits seine ursprüngliche ID bzw. Zeilennummer hinzugefügt wurde. Zusätzlich zum Hash-Wert jedes Worts ist nun der TFIDF-Wert (siehe Kapitel 2.2.4.9) angegeben. Spark erwartet für die Klassifikation Daten im Format LabeledPoint40. Ein LabeledPoint besteht aus einem Double-Wert, der die Klasse bildet und einem Double-Array, das die Features enthält. Um diese benötigten Daten bereitzustellen, müssen zunächst die Review/Scores- und Review/Text-Einträge, die nun in der Form eines TFIDF-Vektors sind, wieder zusammengeführt werden. Dies geschieht mithilfe der join()-Funktion über die anfangs zugeordneten IDs. Der LabeledPoint wird nun so dargestellt: 40 https://spark.apache.org/docs/0.8.1/api/mllib/org/apache/spark/mllib/regression/LabeledPoint.html 82 Sentiment Analyse in Apache Spark (1.0,(1048576,[51713,91349,113450], [2.5257, 1.4271, 3.2189])) Dieses Format kann anschließend von Spark zum maschinellen Lernen verwendet werden. In SciKit Learn wird statt des HashVectorizers ein CountVectorizer genutzt, der zum selben Ergebnis führt. Die Anwendung des TFID-Vectorizers ist ähnlich. 4.1.5 Klassifikation Die Klassifikation findet sowohl in Python als auch in Spark mit dem naiven Bayes und einer Support Vector Machine statt. Diese Klassifikatoren wurden aufgrund ihrer häufigen Nutzung in der Text Klassifikation und der generell hohen Genauigkeit ausgewählt. Während in SciKit Learn die auf hohe Datenmenge ausgerichtete CImplementierung der LIBLINEAR-SVM41 nutzt, wird in Spark eine eigene Implementierung mit SGD verwendet. Die unterliegenden mathematischen Funktionen sind auf der Spark-Seite dokumentiert42. 41 42 http://www.csie.ntu.edu.tw/~cjlin/liblinear/#document https://spark.apache.org/docs/1.1.0/mllib-linear-methods.html#mjx-eqn-eqregPrimal 83 Sentiment Analyse in Apache Spark 4.1.6 Durchführung Die Tests für die Skalierbarkeit werden in verschiedenen Phasen durchgeführt. In Phase 1 wird die Python-Implementierung auf dem lokalen System und Apache Spark auf einem einzelnen Rechner des Computer-Clusters getestet. Hiermit soll ermittelt werden, wie die Leistung von Spark sich mit der von SciKit Learn bei ähnlicher Hardware vergleichen lässt. Danach wird nur noch auf Spark mit unterschiedlichen Einstellungen getestet. Die Parameter für Driver Memory und Executor Memory werden angepasst. Des Weiteren wird die Partitionierung der eingelesen Datei manuell beeinflusst. Die Ergebnisse sind in den jeweiligen Tabellen zu sehen. Es werden unterschiedlichen Dateigrößen getestet. Die Genauigkeit des Klassifikators wird der Vollständigkeit halber mit angegeben. Die einzelnen Versuche werden im Folgenden genauer beschrieben. Versuch 1: Datenvorbereitung: Einlesen, Sätze in Wörter splitten, Entfernen von Punktation, Entfernen von Stop-Wörtern, Lemmatisierung, Part-of-Speech-Tagging Spark I: 1 Rechner des Clusters, 2 Threads, 6 GB Driver Memory, 6 GB Executor Memory, Apache Spark 1.2 Lokales System: Auslastung CPU: max. 29%, Auslastung RAM: max. 450 MB, SciKit Learn mit Python 2.7 84 Sentiment Analyse in Apache Spark Dateigröße Datenvorbereitung 35MB, 58,621 Reviews Lokales System Spark I 13min 8sek 12min 20sek (davon 12min 35sek (davon 11min 10sek für POS-Tagging) für POS-Tagging) Naive Bayes (inkl. Erstellung des 1sek TFIDS-Vektors) 83% Genauigkeit 30min 44sek (davon 30min 17sek für TFID) 83% Genauigkeit Support Vector Machine (inkl. 1sek Erstellung des TFIDS-Vektors) 87% Genauigkeit 30min 32sek (davon 30min 17sek für TFID) 84% Genauigkeit Tabelle 17: Performance-Test 1 Versuch 2: Änderung: größere Datei Datenvorbereitung: Einlesen, Sätze in Wörter splitten, Entfernen von Punktation, Entfernen von Stop-Wörtern, Lemmatisierung, Part-of-Speech-Tagging Spark I: 1 Rechner des Clusters, 2 Threads, 6 GB Driver Memory, 6 GB Executor Memory, Apache Spark 1.2 Lokales System: Auslastung CPU: max. 31%, Auslastung RAM: max. 700 MB, SciKit Learn 85 Sentiment Analyse in Apache Spark Dateigröße Datenvorbereitung 93MB, 95,084 Reviews Lokales System Spark I 58min 10sek 53min 58sek (davon 56min 15sek (davon 49min 58sek für POS-Tagging) für POS-Tagging) Naive Bayes (inkl. Erstellung des 5sek TFIDS-Vektors) 77% Genauigkeit 1h 48min 37sek (davon 1h 48min 6sek für TFID) 75% Genauigkeit Support Vector Machine (inkl. 6sek Erstellung des TFIDS-Vektors) 81% Genauigkeit 1h 48min 19sek (davon 1h 48min 6sek für TFID) 71% Genauigkeit Tabelle 18: Performance-Test 2 Versuch 3: Änderung: größere Datei, kein Part-of-Speech-Tagging Datenvorbereitung: Einlesen, Sätze in Wörter splitten, Entfernen von Punktation, Entfernen von Stop-Wörtern, Lemmatisierung Spark I: 1 Rechner des Clusters, 2 Threads, 6 GB Driver Memory, 6 GB Executor Memory, Apache Spark 1.2 Lokales System: Auslastung CPU: max. 30%, Auslastung RAM: max. 2,2 GB, SciKit Learn 86 Sentiment Analyse in Apache Spark Dateigröße Datenvorbereitung 186MB, 160,793 Reviews Lokales System Spark I 3min 55sek 6min 40sek Naive Bayes (inkl. Erstellung des 14sek TFIDS-Vektors) 80% Genauigkeit 1h 7min Support Vector Machine (inkl. 19sek 56min 82% Genauigkeit Erstellung des TFIDS-Vektors) 86% Genauigkeit 78% Genauigkeit Tabelle 19: Performance-Test 3 Aufgrund der enormen Laufzeiten in Spark wird für die folgenden Versuche der Code angepasst. Statt Scores und Review-Texte getrennt zu halten und am Ende zu joinen, werden sie nun in einem RDD geführt. Des Weiteren werden keine TFIDFWerte mehr berechnet, sondern nur die reinen Hash-Häufigkeitswerte genutzt. Die betroffenen Stellen sind in Abbildung 25 zu sehen. Abbildung 25: Code-Anpassung 1 87 Sentiment Analyse in Apache Spark Das bedeutet nun auch, dass die jeweiligen Punkte „Naive Bayes“ und „SVM“/“Support Vector Machine“ nun nur noch folgende Operationen umfassen: Tranieren des Modells, Prognose und Berechnung der Genauigkeit. Im Code sind diese Elemente wie in Abbildung 26 (respektive auch für die Support Vector Machine) zu sehen umgesetzt. Abbildung 26: Bayes in Spark Versuch 4: Änderung: größere Datei Datenvorbereitung: Einlesen, Sätze in Wörter splitten, Entfernen von Punktation, Entfernen von Stop-Wörtern, Lemmatisierung Spark I: 1 Rechner des Clusters, 2 Threads, 6 GB Driver Memory, 6 GB Executor Memory, Apache Spark 1.2 Lokales System: Auslastung CPU: max. 30%, Auslastung RAM: max. 6,6 GB, SciKit Learn 88 Sentiment Analyse in Apache Spark Dateigröße 1,085GB, 1,2 Mio Reviews Lokales System Spark I Datenvorbereitung 20min 53sek 10min 32sek Naive Bayes 1min 25sek 21min 41sek 80% Genauigkeit 83% Genauigkeit 2min 6sek 21min 30sek 88% Genauigkeit 75% Genauigkeit Support Vector Machine Tabelle 20: Performance-Test 4 Diese Datei ist die letzte Datei, die mit dem lokalen System bearbeitet werden kann. Die darauffolgenden Dateien führen beim Trainieren der Klassifikatoren zu Out-ofMemory-Fehlern. Es beginnt Phase zwei der Durchführung, bei der verschiedene Einstellungen des Spark-Clusters gegeneinander getestet werden. Versuch 1: Spark 1: 3GB Executor Memory, Partitionen wie in HDFS (50) Spark 2: 6GB Executor Memory, Partitionen wie in HDFS (50) Spark 3: 12GB Executor Memory, Partitionen wie in HDFS (50) Spark 4: 12GB Executor Memory, neue Partitionierung (150) 89 Sentiment Analyse in Apache Spark Dateigröße 9,114GB, 7,85 Mio Reviews Spark 1 Einlesen Daten der 12min 48sek Spark 2 Spark 3 Spark 4 12min 36sek 12min 44sek 8min 47sek Naive Bayes 21min 29sek 21min 33sek 21min 37sek 8min 26sek SVM 21min 37sek 21min 32sek 21min 25sek 8min 37sek Tabelle 21: Performance-Test 5 Versuch 2: Da Versuch 1 gezeigt hat, dass die bloße Änderung des zur Verfügung stehenden Speichers kaum Einfluss auf die Leistung hat, wird in Versuch zwei eine etwas größere Datei in Hinblick auf Partitionierung getestet. Spark 1: 12GB Executor/Driver Memory, Partitionen wie in HDFS (81) Spark 2: 12GB Executor/Driver Memory, Partitionen wie in HDFS (125) Spark 3: 12GB Executor/Driver Memory, Partitionen wie in HDFS (200) Spark 4: 12GB Executor/Driver Memory, neue Partitionierung (300) 90 Sentiment Analyse in Apache Spark Dateigröße 14,3 GB, 12,8 Mio Reviews Spark 1 Einlesen Daten der 16min 53sek Spark 2 Spark 3 Spark 4 14min 12sek 13min 38sek 11min 55sek Naive Bayes 26min 40sek 26min 31sek 25min 12sek 23min 55sek SVM 26min 34sek 26min 15sek 25min 23sek 23min 37sek Tabelle 22: Performance-Test 6 Versuch 3: Mit diesem Versuch soll die Auswirkung des Zwischenspeicherns von RDDs untersucht werden. Wenn ein RDD nicht gecached wird, muss es bei jeder auf ihm ausgeführten Aktion alle Transformationen erneut durchführen. Zur Untersuchung wird das RDD an drei in Abbildung 27 gezeigten Stellen in den Cache geladen. Abbildung 27: Caching in Spark Der nun endgültige Code ist in Teil A des Anhangs zu sehen. Versuch 4: Spark 1: 12GB Executor/Driver Memory, Partitionen wie in HDFS (81) Spark 2: 12GB Executor/Driver Memory, Partitionen wie in HDFS (125) Spark 3: 12GB Executor/Driver Memory, Partitionen wie in HDFS (200) 91 Sentiment Analyse in Apache Spark Spark 4: 12GB Executor/Driver Memory, neue Partitionierung (300) Dateigröße 14,3 GB, 12,8 Mio Reviews Spark 1 Einlesen Daten der 16min 55sek Spark 2 Spark 3 Spark 4 13min 38sek 13min 38sek 12min 06sek Naive Bayes 57sek 46sek 46sek 52sek SVM 47sek 35sek 35sek 1min 46sek Tabelle 23: Performance-Test 7 Versuch 5: Mit der in Versuch 4 neu gewonnenen Information, dass das Caching eines enormen Einfluss auf die Skalierbarkeit hat, werden nun noch unterschiedlichen Datenmengen mit den gleichen Einstellungen getestet. Die Einstellungen sind annähernd die maximalen Einstellungen des Clusters mit Rücksicht auf eventuell andere laufende Prozesse und das Betriebssystem. 14GB Driver-Memory/Executor Memory Partitionen anhand der Datei Datei 1: 17 GB (137 Partitionen) Datei 2: 34GB (237 Partitionen) Datei 3: 68GB (548 Partitionen) 92 Sentiment Analyse in Apache Spark Test der Skalierbarkeit Datei 1 Einlesen Daten der 22min 10sek Datei 2 Datei 3 34min 19sek 52min 32sek Naive Bayes 1min 10sek 12min 5sek 2h 32min SVM 2min 56sek 3min 51sek 2h 35min Tabelle 24: Performance-Test 8 Bei der letzten Datei kam es zu häufigen Failed Stages, die zur erneuten Ausführung von Transformationen führten. Des Weiteren war es ob der großen Datenmenge nicht mehr möglich, die RDDs im Cache zu halten. Eine Alternative würde hier die Funktion persist() geben. Dieser Test zeigt, dass sich Spark, mit Ausnahme einiger Ausreißerwerte, die zum Beispiel durch konkurrierende Prozesse (es herrscht das First in First-out-Prinzip) entstanden sein können, bei kleineren Datenmengen linear skalieren lässt. 4.1.7 Bewertung der Ergebnisse Im Folgenden werden die Ergebnisse der Untersuchungen diskutiert. Dafür soll zuerst gezeigt werden, wie Spark den Programmablauf plant und durchführt. Wie bereits in Kapitel 3.3.1 beschrieben wurde, verteilt der Driver Jobs und Tasks an die Executor Nodes. Diese Jobs werden in Stages eingeteilt, da man in Spark zwischen Transformationen und Aktionen unterscheidet. Alle Transformationen sind lazy. Das heißt, sie werden erst dann ausgeführt, wenn sie wirklich ausgeführt werden müssen. Es ist dadurch möglich mehrere Transformationen auszuweisen ohne dass sie direkt umgesetzt werden. Sobald eine Aktion ausgeführt wird, müssen die vorher angegebenen Transformationen ausgeführt werden. Der DAG, also der interne Prozessplaner von Spark, ermittelt an dieser Stelle den besten Weg, um die 93 Sentiment Analyse in Apache Spark Transformationen und anschließend die Aktionen durchzuführen. Der Bereich zwischen jeder Aktion ist eine Stage. In den durchgeführten Versuchen sind die Stages nach join() und collect() aufgeteilt. Innerhalb der Stages werden von den Executoren Tasks ausgeführt. Dem Cluster stehen insgesamt sieben Executoren zur Verfügung. Abbildung 28: Executoren im Cluster Dabei wird Hadoop03 einmal als Executor und einmal als Driver aufgeführt. In der Rolle als Driver ist dieser nur für das Sammeln von Daten und Verteilen von Aufgaben zuständig. Es wird kein Datenverarbeitung durchgeführt. Die Anzahl der verteilten Tasks hängt mit dem Level der Parallelisierung zusammen. Problemstellen im Code Bei der Durchführung der Versuche wurde schnell klar, dass die Leistung von Spark im Cluster und auf einem einzelnen Rechner stark hinter der lokalen Lösung mit Python bleibt. Der Grund hierfür wurde zuerst im Quellcode der Applikation gesucht. Dort gab es vor allem zwei Problemstellen: die Berechnung des TDIDF und das 94 Sentiment Analyse in Apache Spark anschließende zippen der Werte, sowie den Join der neu berechneten ReviewWerte mit den Scores. Bei einem Join entsteht, wie in [75] beschrieben, eine hoher Datenaustausch im Netzwerk, da die Schlüssel beider zu joinenden Datasets über das Netzwerk an eine Maschine geschickt und dann dort zusammengeführt werden. Abbildung 29: Join in Spark Dieses Verhalten lässt sich zum einen mit der partitionBy()-Funktion beeinflussen, indem ein vorher definierter Partitionierer mitgegeben wird. So ist bekannt, welche Keys sich wo befinden und es muss statt beiden Datasets nur eines über das Netzwerk gesendet werden. Dieses Verhalten ließ sich während der Versuche leider nicht replizieren, weswegen der Join, wie bereits erklärt, schlichtweg weggelassen wurde. Lokalität der Daten In Spark werden unterschiedlichen Lokalitäten der Daten unterschieden. Die nicht repartitonierten Daten haben bei den durchgeführten Versuchen alle automatisch 95 Sentiment Analyse in Apache Spark die zwei besten Level, Process_Local und Nodel_Local, zugeordnet bekommen. Neben der tatsächlichen Lokalität der Daten hat auch die Einstellung „spark.locality.wait“ Einfluss auf das Lokalitätslevel. Nach Ablauf der angegeben Zeit versucht Spark, die benötigten Informationen auf dem nächsten Level zu finden. Das heißt konkret, dass ein höher eingestellter Wert theoretisch dazu führen könnte, eine bessere Datenlokalität zu erreichen. Bei der Repartitionierung der Daten ist die Lokalität auf den niedrigsten Level, ANY, gesunken. Dennoch war die tatsächliche Ausführungszeit geringer. Driver Memory Die Größe des Driver Memory ist immer dann von Bedeutung, wenn für eine Action die Daten an einer Stelle gesammelt werden müssen. Das ist zum Beispiel bei collect() oder take() der Fall. In den durchgeführten Experimenten hatte Driver-Memory keinen großen Einfluss auf die Performance. Parallelisierung Beim Einlesen einer Datei aus dem HDFS-Filesystem sind die Partitionen eines RDDs zunächst die Block-IDs im HDFS (vgl [73]). Die dort eingestellte Blockgröße von 128MB führt dazu, dass eine 1GB große Datei in 9 Partitionen unterteilt wird und somit maximal 9 Threads erstellt werden können. Der optimale Level der Parallelisierung liegt allerdings weitaus höher. In der Spark-Dokumentation wird 2-3 Partitionen pro Kern das Cluster empfohlen, was sich beim verwendeten System auf über 300 Partitionen hochrechnen lässt. Die tatsächliche Auswirkung des Änderns der Partitionierung waren nicht so stark wie angenommen, dennoch konnten Unterschiede beobachtet werden. Dabei ist das anfängliche Neuverteilen der Daten kein großer Aufwand. Zum Repartionieren einer 14GB von 81 auf 300 Partitonen hat das System 14 Sekunden benötigt. Executor 96 Sentiment Analyse in Apache Spark Zunächst muss erwähnt werden, dass der in der Befehlszeile angegebene Speicher nicht der Speicher ist, den der Executor zum Bearbeiten der Daten zur Verfügung hat. In dieser Zeile wird angegeben, dass jeder Executor einen Speicher von 1GB haben soll. Daraus ergeben sich dann die in der nächsten Zeile gezeigten 530.3MB Speicher, der für Daten zur Verfügung steht. Grund hierfür ist die im Spark.storage43 hinterlegte und in Abbildung X gezeigte Funktion, durch die vom gesamten zur Verfügung gestellten Speicher ein Teil der Memory Fraction (Standard 0,6) und ein Teil der Safety Fraction (Standard 0,9) bereitgestellt wird. Abbildung 30: Berechnung des Executor-Speichers Die Einstellungen des Executor-Memory hatten bei den Tests nur marginale Auswirkungen. Es müsste eventuell eine größere Datenmenge getestet werden. Speichern von RDDs Die größten Performancegewinne sind durch das Cachen von RDDs zu erzielen. Das liegt daran, dass ansonsten die jeweiligen RDDs in ihrer gesamten Historie 43 https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/storage/BlockManager.scala#L1152 97 Sentiment Analyse in Apache Spark erneut berechnet werden müssen. Mit der Funktion cache() wird der derzeitige Berechnungsstand eines RDDs im RAM gespeichert. Mit der Funktion persist() könnte er auf der Festplatte hinterlegt werden. 4.2 Implementierung eines Algorithmus zur Sentiment Lexikon Generierung In diesem Kapitel wird der Ablauf und die Implementierung eines einfachen Algorithmus zur Sentiment Lexikon Generierung in Apache Spark beschrieben. Die Schlüsselkonzepte dafür wurden bereits in Kapitel 2.1.4 beschrieben. 4.2.1 Grundlage Die Grundlage für den Algorithmus ist die Annahme, dass positive Stimmungswörter häufig mit anderen positiven Stimmungswörtern auftreten, während negative Stimmungswörter häufiger mit anderen negativen Stimmungswörtern auftreten. Des Weiteren bildet die im Kapitel 2.2.4.5 und 2.1.4 untersuchte Aussage, dass Stimmungswörter sehr häufig Adjektive sind, die Basis des Algorithmus. 4.2.2 Datenbasis Als Datenbasis dienen die im vorherigen Kapitel beschriebenen Amazon-Kundenbewertungen. Um die Laufzeit des Algorithmus zu verkürzen, werden die Daten vorbereitet. Die Vorbereitung wurde mit einer ursprünglich 35MB und einer ursprünglich 1GB großen Datei durchgeführt und ähnelt den Anfängen der in 4.1.4 beschriebenen Datenaufbereitung. Aus Reviews werden alle Zeilen, die nicht Review/Score oder Review/Text sind entfernt. Anschließend wird mithilfe des POS-Taggers aus dem NLTK das POS-Tagging für die gesamte Datei durchgeführt. Dieser Vorgang 98 Sentiment Analyse in Apache Spark wurde auf dem lokalen System ausgeführt und hatte bei der 1GB großen Datei eine Gesamtlaufzeit von 1 Tag 4h 26min. Die hohe Laufzeit ist der Hauptgrund, warum keine größere Datei als Datenbasis verwendet wurde. Eine einzelne Zeile aus den jeweiligen Dateien hat nun das in Abbildung 31 gezeigte Muster. Abbildung 31: Dictionary: Datenbasis Im Gegensatz zu den Dateien in Kapitel 4.1 wurde die Reduktion der Review/Scores auf 1.0 für positiv und 0.0 für negativ noch nicht vorgenommen. 4.2.3 Umsetzung Nachdem die vorbereitete Datei in Spark eingelesen wurde, wird einer Trennung der positiven und negativen Reviews vorgenommen. Da in der kleineren Datei zum Beispiel dreimal so viele positive wie negative Reviews enthalten sind muss nun eine Anpassung der Anzahl der Reviews vorgenommen werden. Dafür wird aus der größeren Kategorie (positiv) nur ein Sample entnommen, während die kleinere Kategorie komplett erhalten bleibt. Abbildung 32: Dictionary: Daten einlesen und verteilen 99 Sentiment Analyse in Apache Spark Mit diesen Daten wird nun der eigentliche Algorithmus begonnen. Ausgehend von einem positiven („good“) und einem negativen („bad“) Seed werden nun die Bewertungen auf häufig vorkommende Adjektive durchsucht. Dazu wird für jedes positive Review geprüft, ob es das Wort „good“ enthält und für jedes negative Review, ob es das Wort „bad“ enthält. Alle Bewertungen in denen dies der Fall ist, enthalten potentielle Kandidaten zur Erweiterung der Seed-Liste und werden deswegen weiter untersucht. Es werden alle Adjektive, die nicht auf eine Negation folgen, extrahiert. Die Negationsliste ist dabei starr vorgegeben und enthält die Wörter {"not", "isnt", "doesnt", "isn't", "doesn't", "hasnt", "hasn't", "dont", "don't", "havent", "haven't"}. Für jedes ausgesuchte Adjektiv wird die Häufigkeit des Vorkommens in positiven und in negativen Reviews festgehalten. Die 5 häufigsten Adjektive jeder Seite werden in die Seed-Liste übernommen und der Algorithmus kann erneut starten. Bei der Implementierung in Spark wurden RDDs und RDD-Funktionen genutzt. Zunächst werden Reviews mit der in Abbildung 32 gezeigten Funktion in einzelne Wörter geteilt und so gefiltert, dass nur Bewertungen, die Seeds enthalten weiterverarbeitet werden (Abbildung 33 und 34). Abbildung 33: Dictionary: Filter Abbildung 34: Dictionary: Filtern von positiven Reviews 100 Sentiment Analyse in Apache Spark Anschließend werden erneut mithilfe der map() und filter() Funktion alle Adjektive, die nicht auf eine Negation folgen, extrahiert, wie auf den Abbildungen 35 und 36 zu sehen ist. Abbildung 35: Dictionary: Filtern von Negation und POS-Tags Abbildung 36: Dictionary: Funktionen zur Filterung Auf die beiden RDDs, die nun vermutlich positive und vermutlich negative Adjektive enthalten, wird die reduceByKey()-Funktion so angewandt, dass für jedes Adjektiv ein Tupel bestehend aus (Adjektiv, Anzahl) entsteht. Dabei werden für positive Adjektive positive Zahlen hoch gezählt (2mal „good“ -> (good, 2)), während für negative Adjektive negative Zahlen runtergezählt werden (2mal „bad“ -> (bad, -2). Abbildung 37: Dictionary: Berechnung der Wortanzahl Am Schluss werden beide RDDs per union() zusammengeführt. Dadurch kann es nun vorkommen, dass es zwei Tupel mit dem gleichen Adjektiv gibt, da sie sowohl in positiven als auch in negativen Reviews vorkamen. Eine zweite Anwendung des reduceByKey() zieht nun die Anzahl der gleichen negativen Adjektive von den gleichen positiven Adjektiven ab. 101 Sentiment Analyse in Apache Spark Abbildung 38: Dictionary: Abgleich positiver und negativer Wörter Dadurch haben nun Adjektive, die häufig in negativen Reviews vorkamen, eine möglichst niedrige negative Zahl, während positive Adjektive eine hohe positive Anzahl aufweisen. Adjektive, deren Anzahl näher zu 0 liegt, kamen entweder generell selten, oder häufig in positiven und negativen Reviews vor. In beiden Fällen kann keine Aussage über ihre Orientierung getroffen werden. Um diese Adjektive auszuschließen, werden nun nur die 5 höchsten und niedrigsten Adjektive extrahiert. Abbildung 39: Dictionary: Erweiterung der Seeds Anschließend wird der Algorithmus erneut mit der erweiterten Seed-Liste durchgeführt. Die so gefundenen positiven und negativen Adjektive sollten anschließend manuell geprüft werden. Der gesamte Quellcode ist dieser Arbeit ist digitale Anlage beigelegt. 4.2.4 Bewertung Der Algorithmus ist in der Lage, häufig genutzte Adjektive zu finden. Allerdings werden auch nicht geeignete Wörter gefunden. Eine Liste der ersten 50 positiven und negativen gefundenen Wörter befindet sich im Anhang B. An dieser Stelle sollen einmal die ersten Iterationsrunden der Kategorie „Electronics“ diskutiert werden. 102 Sentiment Analyse in Apache Spark Runde neu positiv neu negativ Seed good bad 1 great, other, easy, small, nice defective, horrible, terrible, poor, unusable 2 many, cable, few, new, little awful, told, unacceptable, disappointing, unreliable 3 old, only, big, happy, able unable, tech, useless, dissapointed, technician Tabelle 25: Dictionary: gefundene Adjektive Wie in Tabelle 25 zu erkennen ist, wurden neben vielen korrekten Wörtern auch nicht unbedingt korrekte Wörter gefunden. So ist „other“ nicht generell positiv. „Cable“ und „technician“ sind keine Adjektive. Das heißt, dass einigen Wörtern nicht die richtige Wortart zugeordnet wurde. Es fällt positiv auf, dass domänenspezifische Wörter wie „tech“ und später „technical“ gefunden werden. Der Algorithmus könnte in einer weiteren Implementierungsphase durch mehrere Maßnahmen verbessert werden. Zum einen können die relevanten Wortarten ausgeweitet werden. Wie in Kapitel 2.2.4.5 beschrieben, kommen auch Substantive als Stimmungswörter in Frage. Darüber hinaus können vergleichende Verben („/jjs“, „jjr“) mit einbezogen werden. Dabei muss allerdings eine genauere Prüfung der Relevanz erfolgen, da „besser“ nicht gut sein muss. Auch die Behandlung der Negation kann flexbiler gestaltet werden. Des Weiteren sollten semantische Regeln zur Prüfung von Stimmungswörtern genutzt werden. Die einfachen Beispiele in Englisch sind hierfür die „and“, „or“, „neither“, „nor“. Wenn beispielsweise ein „and“ auf ein Stimmungswort folgt, ist das darauffolgende oftmals auch ein Stimmungswort mit der gleichen Orientierung. Diese Regeln können mit anderen Mustern auch über Satzgrenzen hinweg genutzt werden. 103 Sentiment Analyse in Apache Spark 104 Schlussbemerkungen und Ausb 5 Schlussbemerkungen und Ausblick Diese Arbeit hat einen Einblick in das Forschungsgebiet der Sentiment Analyse, das maschinelle Lernen und die Arbeit mit Apache Spark gegeben. Anfangs wurden die Kernkonzepte der Sentiment Analyse beschrieben. Dennoch gibt es Bereiche, wie die Meinungszusammenfassung, Meinungsbeschaffung und SPAM-Filterung, die nicht abgedeckt werden konnten. Die Sentiment Analyse wird aufgrund der Wichtigkeit von Meinung und der hohen Datenverfügbarkeit durch das Web 2.0 auch in Zukunft ein wichtiger Forschungsbereich bleiben. Das gleiche gilt auch für das maschinelle Lernen. Generierung von Wissen aus Daten weiterhin ein relevantes Thema bleiben und durch verbesserte und billigere Technologie voranschreiten. Ebenso wie die vorgestellten Forschungsbereiche wird auch das Framework Apache Spark weiterhin relevant sein. In dieser Arbeit wurde die Architektur von Spark erläutert und Performancetests auf einem Cluster durchgeführt. Im Ergebnis dieser Tests blieb Spark anfangs hinter den Erwartungen zurück. Die Performance konnte allerdings noch durch Anpassung diverser Parameter verbessert werden. Die Ergebnisse dieser Tests sollten grundlegendes Wissen über die Arbeit mit der Plattform vermitteln und somit einen guten Einstiegspunkt für neuer Benutzer von Spark bieten. Des Weiteren wurde ein einfacher Algorithmus zur Sentiment Lexikon Generation implementiert. Mit ihm ist es möglich, korpusbasierte positive und negative Adjektive zu finden. Dabei sind die einzelnen Schritte der Implementierung beschrieben worden, so dass sich der Algorithmus auf dieser Basis erweitern lässt. 105 Literaturverzeichnis 6 Literaturverzeichnis [1] L. Zhang und B. Liu, „Extracting and Ranking Product Features in Opinion Documents.,“ in Proceedings of the 23rd International Conference on Computational Linguistics (COLING2010), Beijing, 2010. [2] M. Zaharia, R. Xin, J. Rosen, M. J. Franklin, S. Shenker und I. Stoica, „Shark: SQL and Rich Analytics at Scale,“ in Proceedings of the 2012 ACM SIGMOD International Conference on Management of Data, New York, 2013. [3] M. Zaharia, R. Xin, A. Lupher, C. Engle, M. J. Franklin, S. Shenker und I. Stoica, „Shark: Fast Data Analysis Using Coarse-grained Distributed Memory,“ in Proceedings of the 2012 ACM SIGMOD International Conference on Management of Data, Scottsdale, 2012. [4] M. Zaharia, M. Chowdhury, T. Das, A. Dave, J. Ma, M. McCauley, M. J. Franklin, S. Shenker und I. Stoica, „Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing,“ in Proceedings of the 9th USENIX Symposium on Networked Systems Design and Implementation, San Jose, 2012. [5] T. Zagibalov und J. Carroll, „Automatic Seed Word Selection for Unsupervised Sentiment Classification of Chinese Text,“ in Proceedings of the 22nd International Conference on Computational Linguistics (Coling 2008), Manchester, 2008. [6] N. Yussupova, D. Bogdanova und M. Boyko, „Applying of Sentiment Analysis for Texts in Russian Based on Machine Learning Approach,“ in IMMM 2012 : The Second International Conference on Advances in Information Mining and Management, Venedig, 2012. [7] K. Yessenov und S. Misailovic, Sentiment Analysis of Movie Review Comments, 2009. [8] G. Xu, Y. Zhang und L. Li, Web Mining and Social Networking, Springer, 2011. [9] H. F. Witschel, „Using Decision Trees and Text Mining Techniques for Extending Taxonomies,“ in Proceedings of the Workshop on Learning and Extending Lexical Ontologies by using Machine Learning OntoML, Bonn, 2005. [10] J. Wiebe, E. Riloff und T. Wilson, „Learning Subjectivity Nouns using Extraction Pattern Bootstrapping,“ in Proceedings of the Seventh Conference on Natural Language Learning (CoNLL-2003), Edmonton, 2003. VI Literaturverzeichnis [11] W. Wang, H. Xu und X. Huang, „Implicit Feature Detection via a Constrained Topic Model and SVM,“ in Proceedings of the 2013 Conference on Empirical Methods in Natural Language Processing, Seattle, 2013. [12] P. D. Turney, „Thumbs Up or Thumbs Down? Semantic Orientation Applied to Unsupervised Classification of Reviews,“ in Proceedings of the 40th Annual Meeting of the Association for Computational Linguistics (ACL), Philadelphia, 2002. [13] I. Steinwart und A. Christmann, Support Vector Machines, New York: Springer, 2008. [14] R. Socher, A. Perelygin, J. Wu, J. Chuang, C. Manning, A. Ng und C. Potts, „Recursive Deep Models for Semantic Compositionality Over a Sentiment Treebank,“ in Proceedings of the Conference on Empirical Methods in Natural Language Processing, Seattle, 2013. [15] F. Sebastiani, „Machine Learning in Automated Text Categorization,“ ACM Computing Surveys Vol. 34, pp. 1-47, März 2002. [16] S. Schrauwen, „Machine Learning Approaches to Sentiment Analysis using the Durch Netlog Corpus,“ Clips CTRS, Juli 2010. [17] K. Schouten und F. Frasincar, „Implicit Feature Detection for Sentiment Analysis,“ in Proceedings of the International World Wide Web Conference, Seoul, 2014. [18] K. Schouten und F. Frasincar, „Finding Implicit Features in Consumer Reviews for Sentiment Analysis,“ in Proceedings of the International Conference on Web Engineering, Toulouse, 2014. [19] B. Santorini, M. P. Marcus und M. A. Marcinkiewicz, „Building a Large Annotated Corpus of English: The Penn Treebanl,“ Computational Linguistics - Special issue on using large corpora: II, pp. 313-330, Juni 1993. [20] B. Santorini, Part-of-Speech Tagging Guidelines for the Penn Treebank Project, 1990. [21] E. Riloff, A. Qadir, P. Surve, L. De Silva, N. Gilbert und R. Huang, „Sarcasm as Contrast between a Positive Sentiment and Negative Situation,“ in Proceedings of the 2013 Conference on Empirical Methods in Natural Language Processing, Seattle, 2013. [22] E. Riloff, J. Wiebe und W. Phillips, „Exploiting Subjectivity Classifcation to Improve Information Extraction,“ in Proceedings of the 20th National Conference on Artificial Intelligence (AAAI05), Pittsburgh, 2005. VII Literaturverzeichnis [23] R. Remus, „Improving Sentence-level Subjectivity Classification through Readability Measurement,“ in Proceedings of the 18th International Nordic Conference of Computational Linguistics (NODALIDA), 2011. [24] G. Qiu, L. Bing, J. Bu und C. Chun, „Expanding Domain Sentiment Lexicon through Double Propagation,“ in Proceedings of the 21st International Joint Conference on Artificial Intelligence (IJCAI-09), Pasadena, Kalifornien, 2009. [25] B. Pang, L. Lee und S. Vaithyanathan, „Thumbs up? Sentiment Classification using Machine Learning Techniques,“ in Proceedings of the Conference on Empirical Methods in Natural Language Processing , Philadephia, 2002. [26] B. Pang und L. Lee, „Opinion mining and sentiment analysis,“ in Foundations and Trends in Information Retrieval, Boston, James Finlay, 2008, pp. 1-135. [27] R. Narayanan, B. Liu und A. Choudhary, „ Sentiment Analysis of Conditional Sentences,“ in Proceedings of Conference on Empirical Methods in Natural Language Processing (EMNLP-09), Singapore, 2009. [28] J.-C. Na, H. Sui, C. Khoo, S. Chan und Y. Zhou, „Effectiveness of simple linguistic processing in automatic sentiment classification of product reviews,“ in Knowledge Organization and the Global Information Society: Proceedings of the Eighth International ISKO Conference, Würzburg, 2004. [29] N. Mishra und C. Jha, „Classification of Opinion Mining Techniques,“ International Journal of Computer Applications, Oktober 2012. [30] B. Liu, Web DataMining, Berlin: Springer, 2007. [31] B. Liu, „Sentiment Analysis: A Multifaceted Problem,“ IEEE Intelligent Systems, pp. 76-80, 2010. [32] B. Liu, „Sentiment Analysis and Subjectivity,“ in Handbook of Natural Language Processing, Chapman & Hall, 2010. [33] B. Liu, Sentiment Analysis and Opinion Mining, Morgan & Claypool Publisher, 2012. [34] K. Latha und A. Sujitha, „Real-Time Twitter Sentiment Classification Using Unsupervised Reviews,“ International Journal of Emerging Technology and Advanced Engineering, Mai 2014. VIII Literaturverzeichnis [35] S.-M. Kim und E. Hovy, „Determining the Sentiment of Opinions,“ in Proceedings of the COLING conference, Genf, 2004. [36] A. Kamal, „Subjectivity Classification using Machine Learning Techniques for Mining FeatureOpinion Pairs from Web Opinion Sources,“ International Journal of Computer Science Issues (IJCSI), September 2013. [37] J. Jotheeswaran und Y. Kumaraswamy, „Opinion Mining using decision tree based feature selection through Manhattan hierachical cluster mesaure,“ Journal of Theoretical and Applied Information Technology, 10 Dezember 2013. [38] T. Joachims, „Text Categorization with Support Vector Machines: Learning with Many Relevant Features,“ in Proceedings of the European Conference on Machine Learning (ECML), 1998. [39] N. Jindal und B. Liu, „Mining Comprative Sentences and Relations,“ in Proceedings of 21st National Conference on Artificial Intellgience (AAAI-2006), Boston, 2006. [40] N. Jindal und B. Liu, „Identifying Comparative Sentences in Text Documents,“ in Proceedings of the 29th Annual International ACM SIGIR Conference on Research & Development on Information Retrieval (SIGIR-06), Seattle, 2006. [41] X. Hu, J. Tang, H. Gao und H. Liu, „Unsupervised Sentiment Analysis with Emotional Signals,“ in Proceedings of the 22nd International World Wide Web Conference (WWW), Rio, 2013. [42] M. Hu und B. Liu, „Mining Opinion Features in Customer Reviews,“ in Proceedings of Nineteeth National Conference on Artificial Intellgience (AAAI-2004), San Jose, 2004. [43] M. Hu und B. Liu, „Mining and Summarizing Customer Reviews,“ in Proceedings of the ACM SIGKDD International Conference on Knowledge Discovery & Data Mining (KDD-2004, full paper), Seattle, 2010. [44] D. E. Holmes und L. C. Jain, Data Mining: Foundations and Intelligent Paradigms Volume 2, Heidelberg: Springer, 2012. [45] D. E. Holmes und L. C. Jain, Data Mining: Foundations and Intelligent Paradigms Volume 1, Heidelberg: Springer, 2012. [46] R. Hausser, Computational Linguistics and Talking Robots, Heidelberg: Springer, 2011. [47] J. Fischer, Support Vector Machines (SVM), 2007. IX Literaturverzeichnis [48] F. Fieber, M. Huhn und B. Rumpe, „FB Informatik Universität Braunschweig,“ 31 5 2008. [Online]. Available: http://www.sse-tubs.de/publications/FHR08.pdf. [49] J. Ecktstein, Agile Softwareentwicklung mit verteilten Teams, dPunkt Verlag, 2009. [50] J. Dean, Big Data, Data Mining and Machine Learning, Wiley, 2014. [51] D. Davidov, O. Tsur und A. Rappoport, „Semi-Supervised Recognition of Sarcastic Sentences in Twitter and Amazon,“ in Proceedings of the Fourteenth Conference on Computational Natural Language Learning, Uppsala, 2010. [52] D. Davidov und A. Rappoport, „Efficient Unsupervised Discovery of Word Categories Using Symmetric Patterns and High Frequency Words,“ in Proceedings of the 21st International Conference on Computational Linguistics and 44th Annual Meeting of the ACL,, Sydney, 2006. [53] E. Cambria, B. Schuller, Y. Xia und C. Havasi, „New Avenues in Opinion Mining and Sentiment Analysis,“ IEE Intelligent Systems, 2013. [54] J. Broß, Aspect-Oriented Sentiment Analysis of Customer Reviews Using Distant Supervision Techniques, Berlin, 2013. [55] S. Brody und N. Diakopoulos, „Cooooooooooooooollllllllllllll!!!!!!!!!!!!!! Using Word Lengthening to Detect Sentiment in Microblogs,“ in Proceedings of the Conference on Empirical Methods on Natural Language Processing, Edinburgh, 2011. [56] M. Bramer, Principles of Data Mining, Springer, 2007. [57] S. Blair-Goldensohn, K. Hannan, R. McDonald, T. Neylon, G. A. Reis und J. Reyna, „Building a sentiment summarizer for local service reviews,“ in Building a sentiment summarizer for local service reviews, Peking, 2008. [58] S. Bird, E. Klein und E. Loper, Natural Language Processing, Sebastapol: O’Reilly Media, 2009. [59] A. Bagheri, M. Saraee und F. de Jong, „Latent Dirichlet Markov allocation for sentiment analysis,“ in Proceedings of the Fifth European Conference on Intelligent Management Systems in Operations, Salford, 2013. [60] A. Bagheri, M. Saraee und F. de Jong, „An Unsupervised Aspect Detection Model for Sentiment Analysis of Reviews,“ in Natural Language Processing and Information Systems, Salford, Springer, 2013, pp. 140-151. [61] C. C. Aggarwal und C. Zhai, Mining Text Data, Springer, 2012. X Literaturverzeichnis [62] A. Abbasi, H. Chen und A. Salem, „Sentiment Analysis in Multiple Languages: Feature Selection for Opinion Classification in Web Forums,“ ACM Transactions on Information Systems, 2008. [63] V. Hatzivassiloglou und K. R. McKeown, „Predicting the semantic orientation of adjectives,“ in Proceedings of the 35th Annual Meeting of the Association for Computational Linguistics and Eighth Conference of the European Chapter of the Association for Computational Linguistics , Stroudsburg, 1997. [64] D. R. Rice und C. Zorn, „Corpus-Based Dictionaries for Sentiment Analysis of Specialized Vocabularies,“ in Proceedings of the New Directions in Analyzing Text as Data Workshop, London, 2013. [65] A. Neviarouskaya, H. Prendinger und M. Ishizuka, „Recognition of Affect, Judgment, and Appreciation in Text,“ in Proceedings of the 23rd International Conference on Computational Linguistics (COLING 2010), Peking, 2010. [66] Z. Hai, K. Chang und J. Kim, „Implicit Feature Identification via Co-occurrence Association Rule Mining,“ in Proceedings of the 12th International Conference on Computational Linguistics and Intelligent Text processing (CICLing 2011), 2011. [67] A. Valitutti, C. Strapparava und O. Stock, „Developing affective lexical resources,“ PsychNology Hournal, pp. 61-83, 2004. [68] N. Godbole, M. Srinivasaiah und S. Skiena, „Large-Scale Sentiment Analysis for News and Blogs,“ in International Conference on Weblogs and Social Media, Boulder, 2007. [69] J. Rothfels und J. Tibshirani, „Unsupervised sentiment classification of English movie reviews using automatic selection of positive and negative sentiment items,“ 2 Juni 2010. [Online]. Available: http://nlp.stanford.edu/courses/cs224n/2010/reports/rothfels-jtibs.pdf. [Zugriff am 12 Februar 2015]. [70] L. Bottou, „Large-Scale Machine Learning with Stochastic Gradient Descent,“ in Proceedings of the 19th International Conference on Computational Statistics (COMPSTAT'2010), Paris, 2010. [71] R. Bekkerman, M. Bilenko und J. Langford, Scaling up Machine Learning, Cambridge: Cambridge University Press, 2012. [72] X. Meng, „Sparse data support in MLlib,“ in Spark Summit 2014, San Francisco, 2014. XI Literaturverzeichnis [73] M. Zaharia, M. Chowhury, M. J. Frankling, S. Shenker und I. Stoica, „Spark: Cluster computing with working sets,“ in Proceedings of the 2nd USENIX conference on Hot Topics in Cloud Computing, Berkeley, 2010. [74] S. Matsumoto, H. Takamura und M. Okumura, „Sentiment Classification Using Word Subsequences and Dependency Sub-trees,“ in Advances in Knowledge Discovery and Data Mining, Heidelberg, Springer, 2005, pp. 301-311. [75] H. Karau, A. Konwinski, P. Wendell und M. Zaharia, Learning Spark, Sebastpol: O'Reilly Media Inc, 2015. [76] J. McAuley und J. Leskovc, „Hidden Factors and Hidden Topics: Understanding Rating Dimensions with Review Text,“ in Proceedings of the 7th ACM conference on Recommender systems, New York, 2013. [77] P. Wendell, „Understanding the Performance of Spark Applications,“ 12 Dezember 2013. [Online]. Available: https://www.youtube.com/watch?v=NXp3oJHNM7E. [Zugriff am 13 März 2015]. [78] M. Zaharia, „The State of Spark, and Where We're Going Next,“ 12 Dezember 2013. [Online]. Available: https://www.youtube.com/watch?v=nU6vO2EJAb4. [Zugriff am 05 März 2015]. [79] A. Davidson, „A Deeper Understanding of Spark Internals,“ 17 Juli 2014. [Online]. Available: https://www.youtube.com/watch?v=dmL0N3qfSc8. [Zugriff am 13 März 2015]. [80] S. Ryza, „Apache Spark Resource Management and YARN App Models,“ 30 Mai 2014. [Online]. Available: http://blog.cloudera.com/blog/2014/05/apache-spark-resource-managementand-yarn-app-models/. [Zugriff am 25 Februar 2015]. [81] Apache Spark Foundation, „Spark Programming Guide,“ [Online]. Available: http://spark.apache.org/docs/1.2.0/programming-guide.html. [Zugriff am 25 Februar 2015]. [82] C. D. Manning, P. Raghavan und H. Schütze, An Introduction to Information Retrieval, Cambrigde: Cambridge Universitry Press, 2009. XII Anhang Anhang A Code der Spark Sentiment Klassifikation XIII Anhang B Dictionary Positive Adjektive Good, great, other, easy, small, nice, many, cable, few, new, little, old, only, big, happy, able, much, high, digital, clear, music, light, extra, comfortable, long, large, worth, simple, low, expensive, perfect, full, top, sure, portable, such, solid, fantastic, heavy, manual, sharp, wonderful, available, fast, standard, free, quick, optical, glad, overall, useful Negative Adjektive bad, defective, horrible, terrible, poor, unusable, awful, told, unacceptable, disappointing, unreliable, unable, tech, useless, disappointed, technician, technical, impossible, later, d-link, static, dead, refurbished, ridiculous, website, hold, stupid, e-mail, stuck, lousy, blurry, lucky, third, sad, worthless, slow, same, sudden, sorry, english, unhappy, next, exact, positive, common, site, drive, second, first, major, weak XIV Eidesstattliche Versicherung Ich versichere hiermit, dass ich die vorliegende Masterthesis selbstständig und ohne fremde Hilfe angefertigt und keine andere als die angegebene Literatur benutzt habe. Alle von anderen Autoren wörtlich übernommenen Stellen wie auch die sich an die Gedankengänge anderer Autoren eng anlehnenden Ausführungen meiner Arbeit sind besonders gekennzeichnet. Diese Arbeit wurde bisher in gleicher oder ähnlicher Form keiner anderen Prüfungsbehörde vorgelegt und auch nicht veröffentlicht. Berlin, den 16. März 2015