In diesem Blog wird die Lernerfahrung beschrieben aus dem Online-Kurs „Machine Learning A-Z™: Hands-On Python & R In Data Science”. Ich gehe in diesem Blog der Frage nach, inwieweit sich dieser Kurs für IT Projektleiter und Product Owner eignet, um ein besseres Verständnis für Maschinenlernen / Künstliche Intelligenz zu bekommen – und zwar ohne tiefere Vorkenntnisse. Denn: Maschinenlernen bzw. Künstliche Intelligenz wird in der Softwareentwicklung eine wachsende Bedeutung einnehmen; in absehbarer Zeit dürfte es nur noch wenige Softwareprojekte geben, die gänzlich ohne Maschinenlernen auskommen. In den Worten von Google-Chef Sundar Pichai: „Wir werden uns von einer Mobile-first-Welt in eine KI-first-Welt bewegen“, wo der Computer ein mit Künstlicher Intelligenz (KI) ausgestatteter Sprachassistent sein wird.

In dieser Artikelserie zum udemy Academy-Kurs vermittele ich einige ausgewählte, wesentliche Knowledge Nuggets, die ein gutes Verständnis von der inhaltlichen Ausrichtung des Online-Kurses und gleichzeitig einige wesentliche Lerninhalte vermitteln. Dieser Überblick ist ein Appetizer und soll den Online-Kurs selbstverständlich nicht ersetzen.

Hier geht’s zu den ersten sechs Teilen der Serie:

Maschinenlernen / Künstliche Intelligenz – Natural Language Processing

Der siebte Teil des Online-Kurses zum Maschinenlernen widmet sich dem Natural Language Processing, also der Verarbeitung von Text bzw. Sprache. Natural Language Processing wird eingesetzt, um – im einfachsten Fall – eine Stimmungsanalyse vorzunehmen, viele Unternehmen werten etwa die Bewertung von Marken oder Produkten auf Social Media Netzwerken aus. Natural Language Processing kann auch genutzt werden, um das Genre eines Buchs zu bestimmen, um in Chatbots Antworten zu gestellten Fragen zu generieren oder um den Inhalt von Dokumenten zu erstellen. Bekannt sind etwa Siri oder Alexa, wo eben diese Methodik zum Einsatz kommt.

Es gibt für Programmierer von Natural Language Processing Modellen eine Reihe von verfügbaren Bibliotheken, zu den meistgenutzten zählen: Natural Language Toolkit – NLTK (sehr bekannt), SpaCy, Stanford NLP oder OpenNLP. In diesem Kurs von udemy Academy wird das sogenannte Bag of Words Modell umgesetzt: Hierbei wird ein Klassifizierungs-Modell so trainiert, dass Restaurantbewertungen entweder als „positiv“ oder „negativ“ klassifiziert werden können. Die praktische Umsetzung in Python wird nachfolgend überblicksartig dargestellt.

Ausgangspunkt ist eine umfangreiche Textdatei mit 1.000 Restaurantbewertungen; zu diesen Bewertungen ist jeweils die Bewertung „positiv“ (hier: „1“) oder „negativ“ (hier: „0“) bekannt, so dass diese Daten für das „Training“ des Klassifizierungsmodells genutzt werden können. So sehen diese Daten aus:

Maschinenlernen. Natural Language Processing. Bad of Works Model – Umsetzung in Python – Schritt 1Abbildung: Natural Language Processing mit dem “Bag of Words” Modell. Datensatz mit Restaurantbewertungen.

In einem ersten Schritt erfolgt das „Data Preprocessing“, heißt: Die Texte / Restaurantbewertungen werden bereinigt. Ziel dieser Bereinigung ist es, die Texte um all jene Elemente zu bereinigen, die keine Aussagekraft für eine Positiv-/Negativbewertung haben. Hier das Ergebnis, die Erläuterung folgt:

Maschinenlernen. Natural Language Processing. Bad of Works Model – Umsetzung in Python – Schritt 2Abbildung: Natural Language Processing mit dem “Bag of Words” Modell. Der bereinigte Datensatz mit Restaurantbewertungen.

Die Bereinigung beginnt damit, dass Satzzeichen wie Punkte, Kommas, Ausrufezeichen und Ähnliches entfernt werden. Ebenso werden sogenannte Stopwords entfernt, darunter fallen Wörter wie „und“, „in“, „das“, „ein“ undsoweiter. Eine Liste von üblicherweise zu entfernenden Stopwords findet sich (für jede Sprache) in den Bibliotheken, die ich bereits aufgezählt habe. Es wird außerdem das sogenannte Stemming durchgeführt, die Worte werden auf den Wortstamm zurückgeführt (Beispiele für obigen Ausgangstext): Aus „loved“ wird „love“, aus „disgusted“ wird „disgust“.

Das Ziel dieser Bereinigung ist einfach nachvollziehbar: Die Texte von Restaurantbewertungen werden auf die wenigen relevanten Sprachelemente reduziert, diese Sprachelemente werden auf einer abstrahierten Ebene miteinander vergleichbar (indem alle Sprachelemente auf die Wortstämme zurückgeführt werden). Würde man etwa den Schritt des Stemming nicht durchführen, dann könnte eine Klassifizierungs-Maschinemodell nicht erkennen, dass etwa die Worte „ich mochte“, „wir mochten“, „ich mag“ das Gleiche ausdrücken (positive Bewertung).

Diese Bereinigung lässt sich in Python mit wenigen Codezeilen implementieren, die Grundstruktur ist eine Schleifen-Konstruktion, mit der man durch jede Bewertung bzw. durch jedes Wort läuft und die oben genannten Bereinigungsschritte durchführt. In Python sieht dies wie folgt aus:

Maschinenlernen. Natural Language Processing. Bad of Works Model – Umsetzung in Python – Schritt 3Abbildung: Natural Language Processing mit dem “Bag of Words” Modell. Der Python-Code zur Bereinigung der Ausgangstexte.

Nach diesem Bereinigungsprozess kann nun das Bag of words Modell implementiert werden. Hierzu wird im Grunde eine sehr große Matrix erstellt. Jede Spalte steht für genau ein Wort, das in dem gesamten Textkorpus der bereinigten Restaurantbewertungen einmalig vorkommt. Also etwa „toll“, „kross“, „Service“ oder „unfreundlich“. Jede Zeile entspricht einer einzelnen Restaurantbewertung. Wenn in der Restaurantbewertung eines der Wörter vorkommt, das in den Spalten steht (z.B. „toll“), dann steht dort ein „1“, sonst „0“. Für 1.000 Restaurantbewertungen waren dies 1.500 einmalig vorkommende Wörter (bzw. Wortstämme). Die Matrix besteht insofern aus ziemlich vielen Nullen („0“), in der Sprache eines Datenwissenschaftlichers eine sogenannte sparse matrix (heißt: nur wenige Zellen befüllt).

Diese Matrix entspricht nun der Matrix of Features, welche man in ein Klassifzierungs-Maschinenlernmodell aus Teil 3 (LINK!) einspeisen kann. Jede Spalte ist insofern eine unabhängige Variable. Besonders geeignet für Klassifzierungsmodelle für Natural Language Processing sind Naive Bayes, Entscheidungsbaum und Random Forest. Für das in Python umgesetzte Beispiel im Kurs wird Naive Bayes angewandt, heißt: Das Naive-Bayes-Klassifizierungsmodell wird mithilfe der Matrix of Features trainiert.

Das Ergebnis ist ein Klassifizierer, der für das Testset (von 200 Bewertungen) folgende Genauigkeit („accuracy“) erreicht, vergleiche nachfolgende Confusion Matrix.

Maschinenlernen. Natural Language Processing. Bad of Works Model – Umsetzung in Python – Schritt 4Abbildung: Natural Language Processing mit dem “Bag of Words” Modell. Die Confusion Matrix.

False Positives: 42. False Negatives: 12. Die Genauigkeit (“accuracy”) beträgt hier: (55 + 91) / 200, also 73%. Das ist ok, wenn auch nicht berauschend. Mit einer höheren Anzahl von Bewertungen für das Training lässt sich eine höhere Genauigkeit erzielen.

Es gilt aber auch, dass dieses Maschinenlernmodell des Bag of Words einen „blinken Fleck“ hat. Das Wort „nicht“ (im Englischen: „not“) wird über die Stopwords-Liste eliminiert. Eine Bewertung wie „nicht gut“ oder „nicht frisch“ wird also verfälscht. Das Bag of Words-Modell kennt allerdings keine Reihenfolge, die Klassifizierung basiert ausschließlich darauf, ob bestimmte Wörter enthalten sind oder nicht.

Mit Abschluss von Teil 7 sind 70% des Kurses absolviert!
Hier geht’s zum Erfahrungsbericht für Teil 8 des Kurses. Hier wird der Nutzer in Deep Learning eingeführt, hier bauen wir ein Künstliches Neuronales Netzwerk auf! Es geht auch um Konzepte wie Forward-Propagation, Backward-Propagation, Gradient Descent und mehr.
Veröffentlichung am 19.08.2019.

Sebastian Zang
Author

Der Autor ist Manager in der Softwareindustrie mit internationaler Expertise: Prokurist bei einem der großen Beratungshäuser - Verantwortung für den Aufbau eines IT Entwicklungszentrums am Offshore-Standort Bangalore - Director M&A bei einem Softwarehaus in Berlin.