Recap SAP CodeJam Machine Learning

Am 15 Juni 2018 veranstaltete die Consetto GmbH ein SAP CodeJam zum Thema Machine Learning im HUB 31. Neben Consetto-Mitarbeitern stand die Veranstaltung weiteren interessierten Externen offen.  Die Veranstaltung wurde geleitet von Abdel Dadouche, einem Machine Learning-Experten der SAP, welcher eigens für das Event aus Frankreich anreiste. Nach einer kurzen Vorstellung der Consetto GmbH durch unseren Geschäftsführer Michael Scharf stellte Abdel Dadouche die vielfältigen Möglichkeiten von SAP Leonardo Machine Learning und von SAP HANA vor. Anschließend konnten die Teilnehmer in Gruppen an verschiedenen Anwendungsfällen arbeiten. Herr Dadouche beantwortete Fragen und leitete die Teilnehmer durch das Event.Wir bedanken uns bei allen Teilnehmern und der SAP für die sehr gelungene Veranstaltung!

 

2

Wie funktioniert Deep Learning? Eine konzeptionelle Einführung

Deep Learning ist ein Verfahren des maschinellen Lernens, das neuronale Netze einsetzt, um von Trainingsdaten zu lernen und aufgrund der gelernten Generalisierungen Entscheidungen zu treffen.

 

Was ist ein neuronales Netz?

Abbildung: Ein einfaches neuronales Netz

Ein neuronales Netz kann man sich als eine Art Black-Box vorstellen, in die eine Reihe von Input-Features eingegeben wird, und die nach Durchlauf aller verborgenen Ebenen ein Output liefert.  Jeder Input-Knoten stellt dabei ein Merkmal, ein „Feature“ jenes Objektes dar, über das die Entscheidung getroffen werden soll.

 

Ein klassisches Beispiel einer solchen Entscheidung ist die Klassifizierung, bei der es darum geht, Input-Objekte einer vorher bestimmten Klasse zuzuordnen. Bei einer Klassifizierung von Graustufen-Bildern z.B. gibt es im neuronalen Netz einen Input-Knoten für jeden Pixel des Bildes, wobei jeder Knoten einen Wert zwischen 0 und 1 aufweist, je nach seiner Helligkeit. Nehmen wir an, all diese Bilder würden handgeschriebene Ziffern zwischen 0-9 darstellen; dann haben wir auf der Output-Seite unseres Netzes zehn Knoten, die je für eine andere Zahl stehen. Der Output-Knoten mit dem höchsten Wert gewinnt, und das System liefert diese Zahl als Ergebnis zurück.

Soviel zum Input und Output. Doch was passiert eigentlich innerhalb der verborgenen Ebenen der Black-Box? Wie man dem obigen Bild entnehmen kann, geht der Wert aus jedem Knoten einer vorigen Ebene in jeden Knoten der nächsten Ebene hinein. Das Entscheidende an dieser Stelle, und das Entscheidende überhaupt an Deep Learning, ist das die einzelnen Knotenwerte mit Koeffizienten multipliziert werden, die später wie Reglerknöpfe justiert werden können, um die Ausgaben des Netzes an die korrekten Trainingslabels anzupassen. Diese nennen sich Gewichte.

Da man für die Trainingsdaten den richtigen Output schon kennt, hat man die Möglichkeit, das Output eines Leerdurchlaufs (mit unjustierten Reglerknöpfen) für ein Trainingselement mit dem des korrekten Outputs für das Element zu vergleichen. Man weiß also, wie groß die Fehlerspanne ist und kann daran arbeiten, diese zu schließen. Das Schließen dieser Fehlerspanne nennt sich Optimierung, und sie hat zum Ziel, den Beitrag jedes der Knotenkoeffizienten (Gewichte) zur Fehlerspanne zu minimieren. Hierzu werden zunächst für jedes Gewicht partielle Ableitungen errechnet, die die Änderungsrate der Fehlerspanne abhängig vom jeweiligen Gewicht darstellen.

In einem zweiten Schritt wird diese Änderungsrate, die den Anteil des jeweiligen Gewichts an der Fehlerspanne darstellt, mal ein Koeffizient namens Learning Rate multipliziert, und vom alten Wert des Gewichts abgezogen. Die Learning Rate bestimmt dabei die Geschwindigkeit und Kleinschrittigkeit der Fehlerminimierung.

Indem diese Gewichtsoptimierung für jedes Gewicht des Netzes ausgeführt wird, werden die Outputs immer korrekter und die Fehlerspanne wird immer kleiner. Nach abgeschlossenem Training kann das neuronale Netz akkurat Klassen vorhersagen.

1

Social Media Analyse – Wie viele Unternehmen folgen mir auf Twitter?

Obwohl Soziale Netze für Menschen gemacht wurden, finden sich dort heute auch ziemlich viele Unternehmen. Diese nutzen die Sozialen Netzwerke hauptsächlich, um Information über ihr Unternehmen zu verteilen und Werbung zu machen. Leider lässt sich nicht immer feststellen, ob ein Profil zu einem Unternehmen oder eine Person gehört. Gerade auf Twitter wird kein Unterschied zwischen einem Unternehmensprofil und einer Person gemacht.

In diesem Artikel zeigen wir Ihnen, wie Sie einen Klassifizierer entwickeln können, der zwischen einer Person und einem Unternehmen unterscheiden kann. Mit dem fertigen Code können Sie anschließend analysieren wie viele Follower eines beliebigen Twitter-Accounts Unternehmen bzw. Personen sind. Den kompletten Code dieses Projektes finden Sie wie üblich auf Github.

black-and-white-city-man-people

Problem-Definition und Analyse

Um das Problem besser zu verstehen, schauen wir uns erst einmal einige Twitter-Accounts an. Unternehmensprofile lassen sich meistens sehr gut an dem Logo im Profilbild erkennen, wie z.B. bei dem Twitter-Account von Consetto. Die Profilbilder von Personen zeigen hingegen meistens Gesichter (Beispiel https://twitter.com/BarackObama). Allerdings gibt es immer wieder Ausnahmen. Die wohl größte Ausnahme stellen Freiberufler da. Diese haben meisten ein Gesicht als Profilbild, twittern aber ausschließlich über ihr Unternehmen und nie über Privates. Hier stellt sich oft die Frage: Ist das jetzt eine Person oder ein Unternehmen? Wir definieren das Problem, das im Folgenden gelöst werden soll, also so: Handelt es sich bei einem Twitter-Account um ein Unternehmen, das, z.B. durch ein Logo, als solches klar zu erkennen ist oder es handelt sich um etwas Anderes, wie z.B. um eine Person oder eine Person, die ein Unternehmen promotet?

Daten sammeln und manuell klassifizieren

Bevor wir richtig loslegen können, müssen wir zunächst einmal Daten über verschieden Twitter-Profile sammeln. Dazu nutzten wir die Twitter API, um möglichst viele Twitter-Profile herunterzuladen. Für jedes Profil speichern wir die Profilinformationen, die letzten Tweets und das Profilfoto. Den Code für den Crawler finden Sie auch eim Github Repository.

Anmerkung: Aus datenschutzrechtlichen Gründen veröffentlichen die heruntergeladenen Profile nicht.

Anschließend kommt wohl die unangenehmste Aufgabe des Machine Learnings, nämlich jedes heruntergeladene Profil manuell zu klassifizieren. Dazu erstellen wir eine Excel-Liste mit den Links zu allen Profilen, die wir heruntergeladen haben. Für jedes Profil tragen wir dann in der Excel-Liste ein, ob es sich um ein Unternehmen (C) oder eine Person (P) handelt. Auf diese Art klassifizieren wir mindestens 100 Profile. Je mehr wir klassifizieren, desto besser kann der Machine Learning Algorithmus aus den Daten lernen. In unserem Beispiel haben wir 450 Profile manuell klassifiziert.

Auswertungskriterien festlegen

Nachdem das Problem nun definiert ist und alle Daten vorbereitet sind, müssen wir uns zunächst ein paar Gedanken über die Auswertung machen.

Da jeder Machine Learning Algorithmus nur mit einer gewissen Wahrscheinlichkeit das richtige Ergebnis zurückgibt, können wir uns nie sicher sein, ob das Klassifikations-Ergebnis eines Profils auch richtig ist. Allerdings können wi reine Aussage darüber treffen, mit welcher Wahrscheinlichkeit ein Klassifikations-Ergebnis richtig ist. Genau diese Wahrscheinlichkeit müssen wir messen und versuchen zu verbessern. Wir messen die Genauigkeit (Accuracy). Diese berechnet das Verhältnis von richtig klassifizierten Profilen und der Gesamtzahl der Profile, die wir getestet haben. Ist das Verhältnis 0 haben wir alle Beispiele falsch klassifiziert. Ist das Verhältnis 1 haben alle Beispiel richtig klassifiziert.

Die Genauigkeit, sowie alle anderen möglichen Auswertungskriterien, müssen immer an Beispielen getestet werden, die nicht zum Trainieren des Machine Learning Algorithmus verwendet wurden. Dazu teilen wir die manuell klassifizierten Twitter-Profile in zwei Teile auf. Im ersten Teil sollten nur Profile zum Trainieren des Algorithmus enthalten sein und im zweiten Teil sollten ausschließlich Profile, die zum Testen genutzt werden, enthalten sein. Oft nimmt man 2/3 der Daten zum Trainieren und 1/3 der Daten zum Testen. Wenn Sie nur sehr wenig Daten manuell klassifiziert haben, können Sie auch eine sogenannte Cross-Validation benutzen.

Des Weiteren müssen wir uns im Voraus Gedanken darüber machen, ab welcher Genauigkeit unser Algorithmus wirklich etwas gebracht hat. Wenn wir insgesamt 100 Profile manuell klassifiziert haben und davon 34 Profile Unternehmen und 66 Profile Personen waren, muss unser Machine Learning Algorithmus eine Genauigkeit von mehr als 66% erreichen. Wenn unser Machine Learning Algorithmus nämlich eine Genauigkeit von unter 66% erreichen würde, könnten wir ihn einfach verbessern, indem wir immer alle Profile als Person klassifizierst. Dann hätten wir die Genauigkeit auf genau 66% gesteigert.

Frau klassifiziert Daten

Eine Maschine lernen lassen

Nun kommen wir zu dem Schritt, an dem wir der Maschine beibringen, zwischen einem Unternehmen und einer Person, zu unterscheiden. Als erstes legst wir fest, welchen Machine-Learning-Algorithmus wir verwenden möchten. Wir können den Algorithmus natürlich später immer wieder austauschen, allerdings lassen sich dadurch meistens keine großen Verbesserungen erzielen. In unserem Fall, verwenden wir dir den Random-Forest-Tree-Algorithmus. Geeignet wären auch der Support-Vector-Machine-Algorithmus oder der XGBoost-Algorithmus.
Bevor wir den Machine-Learning-Algorithmus verwenden können, müssen wir aus den Twitter-Profilen Eigenschaften extrahieren. Diese Eigenschaften nennt man in der Fachsprache Features und das Erstellen und Erzeugen dieser Features heißt Feature-Engineering. Das Feature-Engineering ist der wichtigste Prozess für fast alle Machine-Learning-Klassifizierer. Denn dieser Prozess entscheidet darüber wie gut unser Algorithmus am Ende funktioniert. Bei Feature-Engineering ist es wichtig Eigenschaften (Features) zu finden, die zwischen zwei Klassen unterscheiden. Eine prägnante Eigenschaft haben wir schon in der Problemdefinition gefunden: Nämlich ob ein Profilbild ein Gesicht enthält oder nicht. Um gute Features zu finden, ist oft viel Kreativität und Geschick gefragt. Mit den Jahren sammelt man hier aber einiges an Erfahrung und kann so schneller gute Features identifizieren. Weitere Features, die wir umsetzen können, wären z.B.: Hat das Profile eine URL, Anzahl der Follower, Verwendet das Profil ein Profil-Hintergrundbild. Die komplette Liste der Features, die bei uns umgesetzt worden sind, finden Sie auf Github.

Wenn wir alle Features definiert haben, nehmen wir dir die Profile, die wir zum Trainieren verwenden möchten und konvertiert diese in die Eigenschaften. Diese Eigenschaften können wir dann an unseren Machine-Learning-Algorithmus übergeben. Der Machine-Learning-Algorithmus macht daraus anschließend ein statistisches Modell, das wir später in einer Anwendung nutzen können. Bevor wir das Modell aber in einer Anwendung nutzen, sollten wir es vorher mit unserem Auswertungskriterium evaluieren. Dazu nehmen wir die Test-Profile, konvertieren diese zu Eigenschaften und übergeben sie dem Modell. Das Modell sagt uns dann welche Klasse es dem Profil zuweisen würde. Diese Ausgabe vergleichen wir dann mit der manuell vergeben Klasse. Wenn beide übereinstimmen, hat der Machine-Learning-Algorithmus richtig gehandelt. Wenn sie sich unterscheiden, hat der Algorithmus einen Fehler gemacht.

Wenn wir mit der Genauigkeit noch nicht zufrieden sind, können wir versuchen noch weitere oder bessere Features zu finden. Anschließend trainieren und evaluieren wir wieder den Algorithmus.

Zusammenfassung und Ausblick

Mit dem Code der auf Github veröffentlicht wurde, haben wir eine Genauigkeit von 90% erreicht. Dazu haben wir 37 Features aus jedem Profil erzeugt und mittels eines Random-Forest-Tree-Algorithms trainiert. Das bedeutet, dass wir in circa 9 von 10 Fällen ein Profil richtig klassifizieren können. Sicher ist hier noch Raum für Verbesserungen, aber vorerst sind wir mit dem Ergebnis zufrieden.
Möchtest Sie mehr über die Möglichkeiten von Machine Learning erfahren? Dann nehmen Sie mit uns Kontakt auf. Wir beraten Sie gerne bei der Durchführung von Machine Learning-Projekten.

2

Einführung in die künstliche Intelligenz

Künstliche Intelligenz: Wie lernt eigentlich ein Computer?

Vor ungefähr 50 Jahren wurde das erste intelligente Computerprogramm vorgestellt. Es war ein einfacher Chatbot der hauptsächlich mit Gegenfragen antwortete um den Benutzer zum Weitermachen zu bewegen. Wirkliche Intelligenz war natürlich nicht vorhanden. Es zeigte aber bereits, wie die Kommunikation zwischen Computer und Mensch aussehen kann.

Seitdem hat sich natürlich vieles verändert. Der heute wohl bekannteste Chatbot heißt Siri und befindet sich auf einem Apple iPhone. Auch abseits von Chatbots hat sich einiges getan. Intelligente Computersystem sind aus unserer heutigen Gesellschaft kaum noch wegzudenken und werden immer wichtiger. Täglich interagiert jeder von uns mehrmals mit solchen Systemen, bewußt oder unbewußt. Wann haben Sie sich zum Beispiel die letzte Wettervorhersage angesehen? Haben Sie dazu sogar nach “Wetter” gegoogelt?

Der Entwicklung von immer mehr intelligenten Computersystemen steht aber auch eine immer größere Angst vor künstlicher Intelligenz gegenüber. Diese wird oft von Horrorszenarien oder Science-Fiction-Filmen befeuert. Das beste Bespiel sind wohl die Terminator Filme mit Arnold Schwarzenegger. Dort übernimmt zum Beispiel ein umfassendes Roboternetz die Weltherrschaft und versucht die Menschheit auszulöschen.

Die eigentliche Ursache dieser Ängste entsteht aber meistens durch Unwissenheit. Kaum jemand weiß was eine künstliche Intelligenz eigentlich ist oder wie man eine künstliche Intelligenz entwickelt. Diesem Unwissen möchten wir mit diesem Artikel ein bisschen entgegen wirken. Die Beispiele sind alle sehr einfach gehalten und sollten jedem zugänglich sein.

Wie definiert man eigentlich künstliche Intelligenz?

Bevor es richtig losgeht, möchten wir gerne noch ein paar Anmerkungen zur Definition von künstlicher Intelligenz machen. Diese Frage wird schon seit dem Beginn der künstlichen Intelligenz immer wieder kontrovers diskutiert. Die bis heute am meisten akzeptierte Aussage wurde während der Dartmouth Konferenz 1956 definiert:

Every aspect of learning or any other feature of intelligence can be so precisely described that a machine can be made to simulate it1

Ein wichtiger Aspekt dieser Aussage ist, dass man zunächst einmal eine Form von Intelligenz beschreiben muss. Wenn man das geschafft hat, muss man im zweiten Schritt zeigen, dass sich diese beschriebene Intelligenz auch simulieren lässt. Doch meistens scheitert man schon am der ersten Fragestellung: Was ist überhaupt Intelligenz?

Die Frage nach einer künstlichen Intelligenz hat uns also zunächst zu der Frage nach der Definition von Intelligenz geführt. Für Intelligenz existieren heutzutage aber eine Vielzahl von Ansichten2. Zudem hängt eine Definition von Intelligenz sehr stark von der Kultur ab, in der wir leben. Die Definition von künstlicher Intelligenz hängt also auch sehr stark von unser Lebensweise und unserem Umfeld ab. In 1000 Jahren wird der Begriff (künstliche) Intelligenz sicher ganz anders definiert sein.

Über die philosophische Fragestellen nach der Definition von Intelligenz lässt sich sicherlich noch viel diskutieren. Ein Ende der Diskussion wird es aber wohl nie geben. Deshalb überlassen  wir es Ihnen sich in dieses Thema weiter einzuarbeiten. Im Folgenden möchten wir lieber darauf eingehen, wie heutzutage intelligente Computerprogramme entwickelt werden.

Wie entwickelt man ein intelligentes Computerprogramm?

Ok. Los geht’s. Wie entwickelt man eine künstliche Intelligenz? Wir können es gleich vorwegsagen: Es gibt kein großes Geheimnis. Das einzige was wir machen müssen ist: Daten in eine mathematische Funktion zu konvertieren. Das ist alles! Wirklich!

Am besten lässt sich das an einem Beispiel veranschaulichen. Für einen Hersteller von Ballwurfmaschinen sollen wir die Flughöhe eines Balles zu einem bestimmten Zeitpunkt bestimmen. Dafür hat uns der Hersteller ein paar Messwerte gegeben, die uns zeigen welche Ballhöhe der Ball zu einem bestimmten Zeitpunkt hat. Allerdings sind die Messewerte des Herstellers nicht so genau und wir müssen diese Fehler berücksichtigen. Die Werte sehen wir in folgender Grafik.


012301234

In der Grafik lässt sich schon gut erkennen, dass der Verlauf des Balles fast immer dem selben Muster folgt. Doch es gibt immer wieder Abweichungen und es ist nicht für jeden Punkt genau bestimmt welche Höhe er hat. Die Höhe zum Zeitpunkt 1,2453454 oder zum Zeitpunkt 2,56743 lässt sich beispielsweise nur ungefähr abschätzen, indem wir Punkte in der Nähe betrachten. Was uns fehlt ist so etwas wie eine Berechnungsvorschrift, die uns für einen bestimmten Zeitpunkt die Höhe des Balles berechnet. Und genau das macht eine künstliche Intelligenz. Sie nimmt eine mehr oder weniger große Anzahl von Daten und erstellt uns daraus eine Berechnungsvorschrift, die die Daten besonders gut abbildet. In unserem Fall könnte eine solche Berechnungsvorschrift mit einer einfachen mathematischen Funktion abgebildet werden:

(Für Mathefans: Die Funktion ist in diesem Fall höhe=(zeitpunkt2)2+4höhe=−(zeitpunkt−2)2+4):

012301234

Doch warum nehmen wir genau diese Funktion und nicht zum Bespiel eine einfache Gerade oder eine Funktion die viel komplizierter ist und möglichst alle Punkte miteinander verbindet? Das ist genau die Frage die wir uns bei der Entwicklung einer künstlichen Intelligenz immer fragen müssen.

In diesem Fall haben wir bereits festgestellt, dass das Messverfahren ein paar Fehler hat und die Werte nicht genau sind. Deshalb macht es durchaus Sinn eine nicht so komplizierte Funktion zu nehmen. Des Weiteren versuchen wir eine Funktion zu finden, bei der die Fehler zu den gegeben Daten minimiert werden und möglichst wenige Abweichungen haben. Im Allgemeinen versucht man in der künstlichen Intelligenz immer eine möglichst einfache Funktion zu finden, die die Daten am besten abbildet.

Von den Daten zur Funktion

Das oben beschriebene Beispiel ist natürlich stark vereinfacht gewesen. Eine Funktion ließe sich dort durch einfaches Anschauen der Daten leicht erkennen. Das ist aber bei fast allen Anwendungen der künstlichen Intelligenz nicht der Fall. Bei den meisten Anwendungen gibt es eine sehr große Menge von Daten, deren Zusammenhänge sich meistens nicht erkennen lassen. Deshalb brauchen wir gute Verfahren um unsere Daten in eine Funktion zu transformieren. Die Wissenschaft hat dazu in den vergangenen Jahren eine Vielzahl von Verfahren entwickelt. Die meisten dieser Verfahren verwenden dazu heute oft komplizierte statistische Methoden. Um diese Verfahren benutzen zu können, müssen die gegebenen Daten aber vorverarbeitet und in das richtige Format gebracht werden. Mithilfe des statistischen Verfahrens und den transformierten Daten kann man dann ein sogenanntes Modell der Daten erstellen. Dieses Modell beschreibt unsere benötigte mathematische Funktion.

In komplexen Anwendungen wie Siri werden oft mehrere statistische Modelle benutzt. Das erste Model konvertiert zum Beispiel die Stimme des Handybesitzers in einen Text. Ein zweites Model transformiert den Text in einen Antworttext und das dritte Model verwandelt den Antworttext in die typische Siri Stimme.

Zusammenfassung

Künstliche Intelligenzen werden heute oft zu mehr gemacht als sie wirklich sind. Letztendlich sind sie nur Verfahren, die eine Menge von Daten in mathematische Funktionen transformieren. Mit wirklicher Intelligenz, wie wir sie von Menschen kennen, hat das noch wenig zu tun. Dennoch können diese künstlichen Intelligenzen im Alltag sehr hilfreich sein und unser Leben verbessern.

  1. McCarthy et al. 1955. Diese Aussage wurde erstmals im Programm der Dartmouth Konferenz von 1956 gedruckt. Diese Konferenz wird oft als die Geburtsstunde der Künstlichen Intelligenz angesehen.
  2. Definitionen von Intelligenz

 

0