Modellvalidierung und Overfitting

Modellvalidierung

Das Verfahren der Modellvalidierung beschreibt die Methode, ein statistisches oder datenanalytisches Modell auf Performance zu überprüfen.

Ein verbreitetes Verfahren zur Validierung von neuronalen Netzen ist die k-fold Cross Validation. Dabei teilt man Trainingsdatensatz in k Teilmengen auf. Dabei stellt eine der Teilmengen die Testmenge dar. Die restlichen Teilmengen dienen dann als Trainingsmenge. Die Trainingsmenge dient dabei zum Training des Modells. Durch das Verhältnis der richtigen Ergebnisse auf der Testmenge ist es möglich den Grad der Generalisierung des Modells zu bestimmen. Anschließend vertauscht man die Testmenge mit einer Trainingsmenge und bestimmt die Performance erneut, bis schließlich jede Menge als Testmenge fungiert hat. Am Ende des Vorgangs berechnet man nun den durchschnittlichen Grad der Generalisierung zur Abschätzung der Performance des Modells. Der Vorteil dieses Verfahrens ist, dass man eine relativ varianzfreie Performanceeinschätzung erhält. Grund dafür ist, dass verhindert möglichst verhindern wird, wichtige Strukturen in den Trainingsdaten auszuschließen.

Dieses Verfahren ist im Grunde eine Erweiterung der Holdout Methode. Die Holdout Methode teilt den Datensatz allerdings schlicht in eine Trainings- und in eine Testmenge auf. Gefahr bei dieser Methode ist im Gegensatz zur k-fold Cross Validation, dass wichtige Daten nicht zum Training zur Verfügung stehen könnten. Dies kann dazu führen, dass das Modell nicht ausreichend in der Lage zu generalisieren ist.

Beispielhafte Darstellung k-fold Cross Validation
Beispielhafte Darstellung k-fold Cross Validation

Overfitting

Von Overfitting (deutsch: "Überanpassung") spricht man, wenn ein Modell zu speziell an einen Trainingssatz angepasst ist. Bei neuronalen Netzen zum Beispiel, würde das bedeuten, dass ein Netz für Inputs aus dem Trainingsdatensatz sehr genau ist, für einen Testsatz allerdings nicht. Daraus folgt zwar, dass das Modell die trainierten Daten sehr genau abbilden kann, es aber nicht in der Lage ist, generalisierte Ergebnisse zu erzielen.

In der Regel tritt Overfitting dann auf, wenn der Trainingsdatensatz relativ klein und das Modell relativ komplex ist. Denn ein komplexes Modell kann die Trainingsdaten genauer abbilden, umgekehrt bildet ein simples Modell die Trainingsdaten nicht so genau ab (Underfitting). Also ist es allgemein sinnvoll, je nach dem vorhandenen Datensatz, das Modell so simpel wie möglich und gleichzeitig nicht zu simpel zu halten. Ein perfektes Modell, das heißt ein Modell, bei dem es weder zu Over, noch zu Underfitting kommt ist nahe zu unmöglich zu erstellen.

Um das Problem des Overfitting zu reduzieren und gleichzeitig das Underfitting gering zu halten, wurden mehrere Verfahren eingführt. So unter anderem das von Google patentierte Dropout. Das Prinzip des Dropout ist recht simpel. Es deaktiviert lediglich eine gewisse Anzahl, in der Regel zwischen 20% und 50%, je nach festgelegtem Faktor, der Neuronen zufällig. Diese Methode erreicht trotz ihrer Einfachheit eine signifikante Reduzierung von Overfitting.

Beispielhafte Darstellung für Overfitting
Beispielhafte Darstellung für Overfitting

Clustering mit Machine Learning

Definition

Unter dem Clusteringproblem versteht man das Zusammenfassen von Objekten oder Daten zu Gruppen, den Clustern. Sie werden im Gegensatz zur Klassifizierung nicht vorgegeben, sondern ergeben sich auf Grund der Ähnlichkeit der verschiedenen, betrachteten Objekte. Mit Ähnlichkeit ist dabei der räumliche Abstand der Objekte, als Vektoren dargestellt, gemeint. Es gibt verschiedene Verfahren diesen Abstand zu bestimmen wie z.B. die Euklidische- oder Minkowski-Metrik. Bereits beim Bestimmen der Ähnlichkeit stellt man fest, dass es keine eindeutige Clusterbestimmung gibt.

Beispiel Clustering
Beispiel für ein Clustering

Clusteringverfahren

Es gibt verschiedene Verfahren die einzelnen Objekte in Cluster einzuordnen, die jeweils ihre eigenen Vor- und Nachteile haben und andere Ergebnisse erzielen. Meistens muss man, um die besten Ergebnisse für einen Datensatz zu erzielen, verschiedene dieser Verfahren mit unterschiedlichen Parametern ausprobieren und sich danach für eines entscheiden. Es existiert nämlich kein Verfahren, dass allgemein am besten funktioniert. Zu den häufig vorkommenden Unsupervised Learning Verfahren zählen:

Hierarchisches Clustering

Beim hierarchischen Clustering wird zu Beginn entweder die Menge aller Objekte gesamt (top-down) oder die Menge aller einzelnen Objekte (bottom-up) als Cluster angenommen. Beim top-down Verfahren, wird der jeweils größte Cluster aufgeteilt, in dem das am weitesten Entfernte Objekt zum Zentrum des Clusters als ein neues Clusterzentrum ausgewählt wird. Danach ordnet der Algorithmus alle Objekte dem jeweils näheren Clusterzentrum zu. Beim bottom-up Verfahren werden die jeweils kleinsten und nähesten Cluster zu einem neuen Cluster zusammengefasst. Schwierig bei beiden Verfahren ist, einerseits festzulegen auf welche Art man den Abstand der einzelnen Objekte bestimmt, andererseits, wie weit man die Cluster aufteilen, bzw. zusammenfassen will. Schließlich sollte man den Vorgang nicht so lange wiederholen, bis so viele Cluster wie Objekte oder nur noch ein Cluster übrig bleiben.

Partitionierendes Clustering

Beim partitionierenden Clustering wird zunächst eine Zahl k festgelegt, die die Anzahl der Cluster vorgibt. Darauf bestimmt der jeweilige Algorithmus k Clusterzenten. Beispielsweise legt der K-Means-Algorithmus, einer der verbreitetsten partitionierenden Clusteringverfahren, die Clusterzentren zufällig fest. Diese Zentren werden anschließend so verschoben, dass die Summer der quadrierten Abstände der Objekte zu ihrem nächsten Clusterzentrum minimiert wird. Vorteil des partitionierenden Verfahrens ist, dass die Zugehörigkeit der einzelnen Objekte zu einem Cluster während der Clusterfindung veränderbar ist. Andererseits ist die Eigenschaft, dass bereits zu Beginn festgelegt die Anzahl der Clusterzentren festgelegt wird ein großer Nachteil, da man um optimale Ergebnisse zu erzielen, den Algorithmus mit verschiedenen Werten ausführen und anschließend eines auswählen muss.

Dichtenbasiertes Custering

Beim dichtebasierten Clustering werden die verschiedenen Cluster durch die Dichte der einzelnen Objekte im Raum bestimmt. Das populärste dieser Verfarhen ist der DBSCAN Algorithmus. Dabei wird ein Abstand ε zusammen mit einer Zahl k bestimmt. Objekte, die k Nachbarobjekte mit dem Abstand kleiner ε bestizen, stellen zusammen Kernobjekte dar. Wenn zwei Kernobjekte mit Abstand ε zueinander vorliegen, werden sie zu einem Cluster zusammengefasst. Objekte die keine Kernobjekte sind, sich aber in der Nähe eines Clusters befinden, ordnet man dem Cluster hinzu. Die Objekte die keinem Cluster zugehörig sind, gelten als Rauschobjekte.

Anwendungen

Da Clusteringverfahren abstrakte Zusammenhänge in Daten finden, die ein Mensch so womöglich nicht offensichtlich wahrnimmt, finden sie heute in vielen Bereichen wie z.B. in der Marktanalyse Anwendung. In der Marktanalyse wird das Clustering verbreitet eingesetzt um Daten aus z.B. Umfragen auszuwerten. Hierbei werden Kunden in allgemeine Gruppen eingeteilt um beispielsweise bessere Produktplatzierungen zu ermöglichen. Außerdem wird das Clustering im Natural Language Processing (NLP) eingesetzt. Hierbei ermöglichen sie die automatisierte Auswertung von Texten und Sprache. Ein weiteres interessantes Feld, in dem Clustering zum Einsatz kommt, ist die Kriminalitätsanalyse. Hierbei erlaubt das Clustering eine effizienten Einsatz von Polizei- und Sicherheitskräften, da man Kriminalitäts-Hot-Spots besser erkennen kann.

Hürden des Clusterings

Das Clustering ist bei großen Datenmengen sehr zeitaufwendig, besonders wenn der Raum mehrere Dimensionen besitzt. Weiter ist die Effektivität des Clusterings durch das gewählte Verfahren der Abstandmessung bestimmt. In der Regel gibt es kein allgemein richtiges Ergebnis. Das liegt daran, dass dieses in Abhängigkeit der verschiedenen Verfahren mit jeweils verschiedenen Parametern zum Teil drastisch unterschiedlich ausfällt. Dadurch ist es schwer, das Ergebnis zu interpretieren und die Richtigkeit zu überprüfen. Möglichkeiten diese Überprüfung durchzuführen wären, das Resultat des Clusterings mit bekannten Klassifizierungen zu vergleichen oder die Auswertung durch einen menschlichen Experten. Beide Varianten sind aber nur bedingt geeignet, da einerseits das Clustering nicht nötig wäre, wenn es bereits bekannte Klassifizierungen gäbe und andererseits menschliche Beurteilungen stets sehr subjektiv ist.


Machine Learningverfahren für Regressionsprobleme

Definition

Das Ziel der Regression besteht darin, eine Funktion zu beschreiben, die den Zusammenhang zwischen abhängigen und unabhängigen Variablen eines Datensatzes darstellt.

Prinzip der Regression

Datenvorbereitung

Zu Beginn der Regression müssen die Daten auf gewisse Regeln geprüft werden, wie z.B. die Sinnhaftigkeit aus den gegebenen Daten eine Regression zu erzeugen, sprich ob es überhaupt abhängige Variablen gibt, Denn falls nicht, kann man keine Regression durchführen. Andrerseits muss geklärt werden, wie mit fehlenden Daten umgegangen wird, da diese das Ergebnis beeinflussen können.

Modellerzeugung

Nachdem einer sinnvollen Datenaufbereitung, kann damit begonnen werden ein passendes Modell zu erzeugen. Dabei gibt es bestimmte Verfahren, um die Beziehung zwischen der Abhängigkeit der Variablen darzustellen. Zu diesen zählen unter Anderem:

Lineare Regression

Die lineare Regression ist die einfachste und verständlichste Art der Regression. Hierzu wird eine lineare Abildung mit der allgemeinen Form

y = m * x + b

zwischen dem Input und dem Output erzeugt.

 

Beispiel lineare Regression
Beispiel für die lineare Regression

Polynomische Regression

Mit der polynomische Regression ist es möglich nicht lineare Zusammengänge zwischen Verschiedenen Variablen zu beschreiben, wie die Ausbreitung von Krankheitsepidemien. Die allgemeine Form für eine polynomische Rregressionsgleichung ist:

y = a0 * x^0 + a1 * x^1 + a2* x^2 + … + an * x^n

Lasso

Lasso steht für "Least Absolute Shrinkage and Selection Operator". Ziel des Verfahrens ist, eine Funktion mit möglichst wenig Koeffizienten zu bilden. Dies geschieht durch einen Parameter, der die Anzahl der Koeffizienten einschränkt. Dabei werden Koeffizienten, die einen geringen Beitrag zur Darstellung der Regression haben, gegen 0 gehen. Dadurch wird die Funktion immer kleiner und somit auch genereller. Durch dieses Verfahren lässt sich bestimmen, welche Variablen einen nur geringen Einfluss auf das Ergebnis haben.

Neuronale Netze

Neuronale Netze können die Zusammenhänge der unabhängigen Variable selbst erlernen. Diese bietet im Vergleich zu statistischen Modellen Vorteile, da man komplexe Zusammenhänge nicht speziell programmieren muss. Weitere Informationen zur Funktionsweise haben wir in unserem Blogbeitrag "Was sind künstliche neuronale Netze?".

Anwendung

Mit dem Regressionsmodell ist es möglich unbekannte Daten aus einem Datensatz vorherzusagen. Es ergeben sich eine Vielzahl von Anwendungsfällen wie beispielsweise die Vorhersage des Treibstoffverbrauchs eines Fahrzeugs, in Abhängigkeit zu seinem Geweicht und Geschwindigkeit, oder die Produktion von Gütern in Abhängigkeit der eingesetzten Mittel. Außerdem lassen sich durch die Regression Studien auswerten, wie z.B. der Zusammenhang von Tabakkonsum und einer daraus resultierenden erhöhten Sterblichkeitsrate.


Machine Learningverfahren zur Klassifizierung von Daten

Definition

Klassifizierungsverfahren teilen Objekten nach ihren Merkmalen mit Hilfe eines Klassifikators in vordefinierte Kategorien ein. Ein Klassifikator ist eine Funktion, die einen Input auf eine Klasse abbildet. Das Ziel besteht darin passende Regeln zu finden, wonach sich die Daten in die jeweiligen Klassen zuordnen lassen. Normalerweise geschieht dies im Machine Learning durch einen Supervised Learning Ansatz. In diesem Artikel stellen wir die gängigsten Machine Learning Verfahren zur Lösung von Klassifizierungsproblemen kurz vor.

Decision Trees

Decission Trees sind in ihrer einfachsten Form schlichte Entscheidungsbäume. Bei diesen geht man vom Wurzelknoten aus abwärts. Jeder Knoten fragt dabei ein Attribut ab. Anhand dieser Abfrage fällt die Entscheidung über den nachfolgenden Knoten, bis schließlich ein Blatt erreicht wird. Das erreichte Blatt ergibt den Klassifizierungsfall. Aus der Zusammensetzung mehrerer Decision Trees sind komplizierte Modelle wie die Boosted Trees, Gradient Boosting oder Random Forest entstanden.

Beispiel Decision Tree
Beispiel für einen Decision Tree

Bayes-Klassifikation

Der Bayes-Klassifikator ordnet Objekte der Klasse zu, zu der sie am wahrscheinlichsten gehört. Grundlage für die Berechnung der Wahrscheinlichkeit ist dabei eine Kostenfunktion. Diese stellt die Objekte als Vektoren dar, bei denen jede Eigenschaft auf eine Dimension abgebildet wird. Dabei ermittelt die Kostenfunktion die Wahrscheinlichkeit, dass eine einzelne Eigenschaft des Objekts zu einer Klasse gehört. Die einzelnen Eigenschaften werden dabei unabhängig voneinander betrachtet. Zuletzt wird das Objekt der Klasse zugeordnet, deren einzelnen Wahrscheinlichkeiten am ehesten einer Klasse entsprechen.

k-Nearest-Neighbors

Beispiel für eine kNN Klassifizierung
Beispiel für eine kNN Klassifizierung

Die k-Nearest-Neighbors Methode bestimmt die Zugehörigkeit eines Objekts zu einer Klasse unter der Berücksichtigung der k nächsten Nachbarn nach dem Mehrheitsprinzip. Das heißt, dass ein Objekt zu der Klasse hinzugefügt wird, welche in der Nachbarschaft am stärksten Vertreten ist. Um die Abstände zweier Objekte zu ermitteln verwendet man häufig den Euklidischen Abstand. Es gibt aber auch Alternativen, wie z.B. die Manhatten-Metrik, die unter Umständen besser funktionieren. Eine häufig verwendete Methode, um ein geeignetes k zu finden, ist, den Algorithmus mit verschiedenen Werten für k auszuführen und dann den geeignetsten Wert zu verwenden. Allgemein zu erwähnen ist, dass im Gegensatz zur Darstellung für dieses Verfahrens anstelle eines zwei-dimensionalen Raums auch ein multi-dimensionaler Raum verwendet werden kann.

Support Vector Machine

Beispiel Funktionsweise einer Support Vector Machine
Beispiel der Funktionsweise einer Support Vector Machine

Die Support Vector Machine stellt jedes Objekt als Vektor in einem n-dimensionalen Vektorraum dar. Dies ist wichtig, damit sich die Vektoren auch für nicht lineare Trainingsdaten durch eine Ebene trennen lassen. Um die verschiedenen Vektoren voneinander linear zu trennen, wählt man eine Hyperebene so, dass die Vektoren möglichst weit von dieser entfernt sind. Weitere Objekte werden dann in Abhängigkeit zu ihrer Position im Hyperraum klassifiziert. Im oben gezeigten Beispiel, werden die ursprünglichen zwei dimensionalen Vektoren in einen drei dimensionalen Raum abgebildet. Sofort ersichtlich lassen sich die Vektoren im zwei-dimensionalen Raum nicht linear trennen. Im Gegensatz dazu ist es im drei-dimensionalen Raum möglich, eine Ebene "e" so zu legen, dass die beiden Mengen linear trennenbar sind.

Neuronale Netze

Beispiel neuronales Netz
Beispiel neuronales Netz

Mit neuronalen Netzen ist es möglich Objekte zu klassifizieren. Wenn genügend Trainingsdaten vorhanden sind, erreichen diese in der Regel zum Teil sehr gute Ergebnisse im Vergleich zu anderen Verfahren. Ein gutes Beispiel dafür ist die Objekterkennung in Bildern. Eben diese guten Ergebnisse sorgten für einen großen Hype um neuronale Netze. Der Blogeintrag zu neuronalen Netzen geht ausführlich auf dieses Verfahren ein.

Herausforderungen der Klassifizierung

Bei der Wahl des passenden Klassifikators muss man folgende Eigenschaften berücksichtigen:

Genauigkeit

Die Genauigkeit der Klassifizierung hängt von den verwendeten Regeln ab. Dabei muss man bedenken, dass die Genauigkeit auf den Trainingsdaten und auf den nicht trainierten Daten meist unterschiedlich ausfällt. So kann es durchaus sein, dass ein Machine Learning Modell, perfekte Ergebnisse für die Trainingsdaten erzeugt. Es kann aber sein, bei der Klassifizierung von neuen Daten nur eine schlechte Genauigkeit erzielt wird. Dabei bestimmt das Verhältnis der richtig klassifizierten Objekte die Genauigkeit des Modells.

Geschwindigkeit

Unter Umständen ist die Geschwindigkeit eines Klassifikators ein wichtiges Verwendungskriterium. So kann es sein, dass ein Klassifikator eine 90%ige Genauigkeit in einem hundertstel der Zeit erreicht, im Vergleich zu einem Klassifikator, der eine 95%ige Genauigkeit erreicht. So kann es sinnvoll sein auf Genauigkeit zu verzichten, wenn man dafür eine Verbesserung der Geschwindigkeit erreicht.

Erklärbarkeit

Es könnte wichtig sein, dass leicht nachzuvollziehen ist, wie ein Klassifikator zu seinem Ergebnis kommt. Vor allem, damit Menschen die mit dem Modell arbeiten, Vertrauen in dieses haben wie zum Beispiel bei wichtigen Unternehmensentscheidungen.

Anwendung

Die Klassifikation bietet viele spannende Anwendungsfelder wie z.B. in der Computer Vision, bei der es darum geht, einem Computer ein visuelles Verständnis der Welt zu vermitteln, was wiederum Verwendung in verschiedenen Bereichen wie beispielsweise bei selbstfahrenden Autos findet. Ebenfalls ermöglicht Machine Learning die Klassifikation von Spam E-Mails oder auch den Einsatz in der Medizin wie bei der frühzeitigen Erkennung von Krankheiten.


Was sind künstliche neuronale Netze?

Neuronales Netz
Neuronales Netz

Unter einem künstlichen neuronalen Netz versteht man ein, an biologische neuronale Netze angelehntes, Rechenmodell. Innerhalb des Netzes werden Neuronengruppen in mehreren Layern zusammengefasst und miteinander verbunden.

Ein neuronales Netz besitzt immer mindestens einen Input-Layer und einen Output-Layer. Dazwischen befinden sich theoretisch beliebig viele sogenannte hidden- oder versteckte Layer. Man spricht von Deep Learning, wenn mehrere hidden Layer vorhanden sind. Je mehr hidden Layer ein Netz besitzt, desto höher ist dessen Grad an Komplexität, dessen tiefe und auch die benötigte Rechenleistung.

Funktion eines künstlichen neuronalen Netzwerks

Die Neuronen benachbarter Layer sind jeweils miteinander verbunden. Diese Verbindungen bekommen zunächst eine zufällige Gewichtung. Die Gewichtung gibt den Einfluss der jeweils verbundenen Neuronen an. Neuronen der hidden Layer haben immer einen Input und einen Output. Der gesamte Input eines Neurons, Netzinput genannt, bestimmt eine sogenannte Propagierungsfunktion z.B. die Linearkombination. Die Linearkombination addiert die mit den jeweiligen Gewichten multiplizierten Inputs auf. Die einzige Ausnahme dazu bildet der Inputlayer.

Mit der sogennanten Aktivierungsfunktion berechnet man die Aktivität eines Neurons (bzw. sein Aktivitätslevel). Damit neuronale Netze nicht lineare Probleme lösen können, muss die Aktivierungsfunktion eine nicht lineare Funktion sein. Häufig wird als Aktivierungsfunktion die Sigmoid Funktion oder die, besonders in letzter Zeit an Popularität gewinnende, ReLU Funktion verwendet. Die ReLU Funktion hat die Form:

𝑓(𝑥) = max(0 , 𝑥)

Graph der ReLU Funktion
Graph der ReLU Funktion

Die sogenannte Ausgabefunktion eines Neurons bestimmt dessen Output. Diesen übergibt das Neuron gewichtet an die Neuronen des nächsten Layers. Häufig verwendet man dafür schlicht die Identitätsfunktion, bei der der Output dem Aktivitätslevel entspricht (id(𝑥) = 𝑥).

Beispielhafte Darstellung eines neuronalen Netzes mit gewichteten Verbindungen
Beispielhafte Darstellung eines neuronalen Netzes mit gewichteten Verbindungen

Rechenbeispiel

Man habe 2 Inputvektoren v1 = 0,5 und v2 = 0,8. Dann berechnet man die Porpagierungsfunktion wie am Beispiel der Grafik:

0,3 * 0,5 + 0,8 * 0,7 = 0,71

Mit diesem Wert kann man die Aktivierungsfunktion, in diesem Beispiel die ReLU Funktion, berechnen:

f(𝑥) = max(0 , 0,71)

Anschließend übergibt man nun noch das Ergebnis in die Ausgabefunktion:

id(0,71) = 0,71

Lernvorgang

Die Gewichtsanpassung geschieht bei jedem Lernvorgang anhand bestimmter Lernregeln. Diese passen die Gewichte der Verbindungen der Neuronen so an, dass sich der Output eines Modells dem gewünschtem Output immer weiter annähert. Eine häufig verwendete Lernregel beim Einsatz von neuronalen Netzen ist die Backpropagation.

Backpropagation

Bei der Backpropagation vergleicht ein externer "Lehrer" das Ergebnis des neuronalen Netzes mit dem gewünschten Ergebnis. Dabei bestimmt er den quadratischen Fehler. Dieser wird anschließend rückwärtig in das Netz gegeben. Dabei passt das Verfahren die Gewichte in jeder Schicht so an, dass der Fehler immer kleiner wird. Dies geschieht über das Gradientenverfahren. Das Gradientenverfahren ist ein numerisches Verfahren zur Bestimmung des Minimums einer Funktion. Diese Methode findet in der Regel nur ein lokales Minimum. Man setzte es ein, da es zu aufwendig ist ein globales Minimum arithmetisch zu bestimmen.

Um die Backpropagation anzuwenden benötigt man eine große Menge gelabelter Daten, um das neuronale Netz zu trainieren. Das ist darauf zurückzuführen, dass man bei dieser Methode eine relativ kleine Lernrate verwenden muss. Die kleine Lernrate ist deswegen notwendig, weil man sich mit dem Gradientenverfahren schrittweise dem Minimum annähert. Falls man zu große Schritte macht, kann es sein, dass man das Minimum überspringt. Der Vorteil, den die Backpropagation bringt, ist, dass man sie auf mehrschichtige Netze anwenden kann.

Training durch Backpropagation
Training durch Backpropagation

Testphase

Nachdem das Training abgeschlossen ist, wird überprüft, ob das Netz etwas gelernt hat, sprich ob sinnvolle Gewichtsanpassungen stattgefunden haben. Man spricht von der Modellvalidierung. Dafür verwendet man die Menge der erlernten Inputs, wie auch eine Menge von nicht erlernten Inputs. Damit ist es möglich zu untersuchen, ob das Modell einerseits die Trainingsobjekte erfasst hat und andererseits, ob es allgemeine Aufgaben richtig löst.

Netztypen Überblick

Feedforward Neural Network

Ein Feedforward Neural Network ist ein künstliches neuronales Netzwerk, bei dem die Informationen schichtweise von dem Input zum Outputlayer weiter gegeben werden. Wichtig hierbei ist, dass die Informationen stets in Richtung Outputlayer und nie in Richtung des Inputlayers übergegeben werden.
Weiter kann man 2 Arten der Feedforward Neural Networks unterscheiden:

Perceptron

Das Perceptron ist die einfachste Form eines künstlichen neuronalen Netzes. Erstmals 1958 von Frank Rosenblatt vorgestellt, besitzt es lediglich ein Neuron, welches zugleich der Ausgabevektor ist. Die Inputgewichte waren bereits anpassbar, wodurch das Perceptron in der Lage ist, Inputs, die leicht vom ursprünglich gelernten Vektor abweichen, zu klassifizieren. Allerdings wird nicht nur die ursprüngliche Version des Perceptrons als solches bezeichnet, stattdessen wird zwischen folgenden Varianten unterschieden:

  • Single-layer Perceptron:
    Das Single-layer Perceptron entspricht dem ursprünglich von Rosenblatt veröffentlichten Perceptron.
  • Multi-layer Perceptron (MLP):
    Das Multi-layer Perceptron besitzt mehere Layer von Neuronen. In den meisten Fällen wird eine Sigmoid Funktion als Aktivierungsfunktion verwendet. Ein Vorteil der MLPs im Vergleich zu einfachen Perceptrons besteht darin, dass sie in der Lage sind nicht lineare Probleme zu lösen.

Convolutional Neural Network (CNN)

Das Convolutional Neural Network besitzt in der Regel mindestens 5 Layern. Das Prinzip der CNNs besteht darin, dass jeder Layer eine Mustererkennung durchführt. Dabei wird die Mustererkennung mit jedem Layer auf Basis des Outputs des vorherigen Layers in einer lokalen Region weiter präzisiert und abstrahiert. Dieses Verfahren ist an das rezeptive Feld, dass zum Beispiel auf der Netzhaut des menschlischen Auges zu finden ist, angelehnt. Damit CNNs brauchbare Ergebnisse liefern, ist eine große Menge an gelabelten Trainingsdaten notwendig, da als Lernmethode die Backpropagation verwendet wird.

CNNs werden unter Anderem für die Bild- und Videoerkennung, sowie die Bildklassifizierung und natürliche Sprachverarbeitung eingesetzt und konnten in den letzten Jahren bei Wettbewerben, wie dem SQuAD (Stanford Question Answering Dataset) Test herausragende Ergebnisse liefern.

Recurrent Neural Networks:

Recurrent Neural Networks erlauben im Gegensatz zu Feed Forward Networks, dass Informationen Bereiche des Netzes erneut durchlaufen können, das heißt Neuronen können Informationen auch an vorherige Layer zurückgeben. Dadurch entsteht eine Art Gedächtnis im neuronalen Netz. Recurrent Neural Networks sind in der Lage, Vorhersagen über den zukünftigen Input einer Reihe von Inputs zu treffen, weshalb sie häufig für die Handschrift- oder Spracherkennung eingesetzt werden.
Folgende Arten Recurrent Neural Networks lassen sich unterscheiden:

  • direct feedback:
    Neuronen erhalten als Input ihren zurückgeführten Output
  • indirect feedback:
    der Output wird an den Input der Neuronen aus vorherigen Schichten zurückgeführt
  • lateral feedback:
    der Output eines Neurons wird an den Input eines Neurons des selben Layers weitergeleitet
  • vollständigen Verbindungen:
    alle Neuronen sind miteinander Verbunden

Woher kommt der AI und Machine Learning Megatrend?

Trendanstieg des Begriffs Machine Learning
Machine Learning - Woher kommt der Hype?

Machine Learning (ML), neuronale Netze und Artifical Intelligence (AI) werden momentan häufig diskutiert und erscheinen allgegenwertig. In diesem Artikel fassen wir kurz die Entwicklung der letzten zehn Jahre zusammen und erklären, wieso dieser Trend in allen Wirtschaftsbereichen immer mehr Anwendung finden wird.

Hintergrund

Bereits in den 1940er Jahren haben Warren McCulloch und Walter Pitts die Grundlagen des Machine Learnings mit ihrer Veröffentlichung "A Logical Calculus of the Ideas Immanent in Nervous Activity" zu den Themen Neuronen und Nervennetze gelegt.

1957 entwickelte Frank Rosenblatt den Perceptron Algorithmus, der ein vereinfachtes Modell eines biologischen Neurons abbildet.

Drei Jahre später entwickelten Bernard Widrow und Marcian Hoff ADALINE, ein frühes künstliches neuronales Netzwerk. Bei diesem waren zum ersten Mal die Gewichte der Inputs von dem Netzwerk erlernbar.

Die Veröffentlichung des Buchs "Perceptrons" von Marvin Minsky und Seymour Papert 1969 sorgte dafür, dass nach der anfänglichen Euphorie um Machine Learning das Thema an Bedeutung verlor und man in den sogenannten "AI Winter" geriet. Das Buch stellt neben den Stärken auch die schwerwiegenden Einschränkungen der Perceptrons wie das XOR-Problem vor. Das XOR-Problem stellte deswegen eine solche Hürde dar, weil klassische Perceptrons nur linear separierbare Funktionen auflösen können. Die XOR-Funktion erzeugt aber ein nicht linear lösbares Gleichungssystem.

Neues Aufleben

David Rumelhart, Geoff Hinton und Ronald Wiliams legten durch Experimente zur Backpropagation 1986 die Grundlage des Deep Learnings. Sie lösten das XOR-Problem in dem sie die Methode der Backpropagation auf mehr schichtige neuronale Netze anwandten.

Ein weiterer großer Schritt im Machine Learning war der Einsatz des Deep Learnings. Deep Learning bezeichnet eine Klasse von Machine Learning Algorithmen, die durch ihre Vielschichtigkeit nicht lineare Probleme lösen können. Dabei verarbeitet jede Schicht die von der darüber liegenden Schicht übergebenen Daten weiter, indem die Daten schichtweise abstrahiert werden.

Machine Learning aktuell

Der Einfluss von AlexNet auf Machine Learning

 

Aus dem AlexNet Paper von Hinton, Krizhevsky, Sutskever von 2012.
Aus dem AlexNet Paper von Hinton, Krizhevsky, Sutskever von 2012, die Quelle ist unten verlinkt.

Besonders im letzten Jahrzehnt gewann das Thema wieder große Popularität. So sorgten insbesondere 2012 Geoff Hinton, Alex Krizhevsky und Ilya Sutskever für großes Aufsehen mit ihrem Convolutional Neural Network AlexNet.

Erfolg bei der Large Scale Visual Recognition Challenge

Mit AlexNet gelang es ihnen bei der seit 2010 jährlich stattfindenden ImageNet Large Scale Visual Recognition Challenge (ILSVRC) durch Deep Learning Verfahren ein herausragendes Ergebnis zu erzielen. Bei dieser geht es darum, eine möglichst effiziente Software zur Bilderkennung zu entwerfen. Als Datenbank wird die namensgebende, freie Datenbank ImageNet verwendet. So war das beste Ergebnis im Jahr 2010 eine Fehlerrate von 28,2%. 2011 war die Fehlerrate noch bei 25,7% und das 2. beste Ergebnis aus 2012 besaß immer noch eine Fehlerrate von 26,2%. Dagegen erreichte das AlexNet Team eine Fehlerrate von gerade einmal 16,4%.

Dieses Ergebnis hatte in der Fachwelt schnell große Wellen geschlagen, was den Hype um das Machine Learning neu entfachte.

Gründe für den Erfolg von AlexNet

Man kann dieses Ergebnis zum Einen auf Fortschritte in der Theorie von Machine Learning Algorithmen zurückführen. Zum Beispiel sorgte der Einsatz der sogenannten "rectified linear activation unit" (ReLU) für eine große Steigerung der Effizienz und Geschwindigkeit von Deep Learning Algorithmen. Ebenfalls wurden damit Probleme wie das Vanishing Gradient Problem gelöst. Bei dem Vanishing Gradient Problem handelt es sich darum, dass beim Training der neuronalen Netze gewisse Teile eines Netzes unter Umständen nicht mehr aktiv werden. Im schlimmsten Fall führt dies dazu, dass sich dieses Netz nicht mehr weiter trainieren lässt.

Zusätzlich muss man aber auch erwähnen, dass Hinton, im Gegensatz zu früheren Wettbewerbern, Grafikkarten, durch die 2007 von Nvidia veröffentlichte CUDA Technologie ermöglicht, anstelle von CPUs einsetzte. Diese erlaubt Grafikkarten für generelle Berechnungen einzusetzen. In einer Studie aus dem Jahr 2006 zeigten Rajat Raina, Anand Madhavan und Andrew Ng, dass durch den Einsatz von Grafikkarten eine bis zu 15 fache Steigerung der Geschwindigkeit beim Training von neuronalen Netzen erreicht werden kann.

Entwicklung nach AlexNet

Das Potenzial hinter diesen Verfahren wurde immer weiter erkannt, weshalb sogar große Unternehmen wie Google anfingen, sich mit dem Thema zu beschäftigen. Weil Machine Learning Algorithmen nicht lineare Probleme lösen können, sind sie beispielsweise zur Realisierung selbst fahrender Autos einsetzbar (z.B. Waymo). Aus diesem Trend entstanden diverse Programmbibliotheken wie Googles TensorFlow, Keras, oder das von der Unversität Montreal ewickelte Theano.

Warum ist es heute Anwendbar?

Machine Learning Verfahren finden mittlerweile große Anwendbarkeit, weil man auf der einen Seite eben diese Tools und auf der anderen Seite die günstige Verfügbarkeit der essenziellen Rechenleistung zur Verfügung stehen hat. So sanken die Preise für Grafikkarten in den letzten Jahren im Verhältnis zur Rechenleistung, wie folgenden Darstellungen zeigen.

GrafikkarteGFLOPSPreis ($)ErscheinungsjahrGFLOPS/€
Nvidia GeForce GTX 6803.09050020126,2
Nvidia GeForce GTX 7803.97749920136,1
Nvidia GeForce GTX 780 Ti5.04669920137,2
Nvidia GeForce GTX 9804.61254920148,4
Nvidia GeForce GTX 980 Ti5.63264920158,7
Nvidia GeForce GTX 10808.228499201716,5
Nvidia GeForce GTX 1080 Ti10.609699201715,2
Nvidia GeForce RTX 20808.920699201812,8
Nvidia GeForce RTX 2080 Ti11.750999201811,8
Entwicklung der Leistungsstärksten Grafikkarten für Machine Learning Anwendungen
Entwicklung der Leistungsstärksten Grafikkarten für Machine Learning Anwendungen

Außerdem ermöglichen die 2016 von Google vorgestellten TPU Prozessoren (TensorFlow Processing Unit) Machine Learning Anwendungen zu beschleunigen. Spätere Generationen aus den Jahren 2017 und 2018 erlauben auch ein beschleunigtes Training der neuronalen Netze. Ebenfalls hilfreich im Einsatz von neuronalen Netzen ist die Möglichkeit auf GPU Cluster zurückgreifen zu können, weil sie ein schnelles Training der Netze ermöglichen. So ist es nicht einmal Notwendig, die Berechnungen auf dem eigenen Computer durchführen zu müssen. Stattdessen ist es möglich, die Berechnungen zu sehr günstigen Preisen in Clouds durchzuführen (ImageNet Benchmark).

Anwendungsbereiche

Zu den wichtigsten Anwendungsbereichen von Machine Learning Algorithmen zählt einerseits die Computer Vision. Unter Computer Vision versteht man, einem Computer ein allgemeines Verständnis zur Einordnung von Bildern oder Videos zu ermöglichen und daraus Informationen zu gewinnen. Andererseits zählt die Sprachanalyse und die Auswertung von Texten dazu. Bei der Sprachanalyse bringt man dem Computer bei, allgemeine, gesprochene Worte zu verstehen und diese zum Beispiel in einen geschriebenen Text umzuwandeln. Bei der Textanalyse soll der Computer aus beliebigen Texten Informationen extrahieren können. Daraus resultieren spannende Anwendungsfälle wie z.B. das Auswerten von Satellitendaten, die Aufwertung von Bildsuchen, die Analyse von öffentlichen Stimmungen oder selbstfahrende Autos.

Profitieren nur internationale IT-Konzerne von dieser Entwicklung?

Anwendbarkeit von Neuronalen Netzwerke in praktischen Anwendung 1957-2012
Die Entwicklung der letzten zehn Jahre hat neuronale Netzwerke praktisch und weitreichend anwendbar gemacht.

Die günstige Verfügbarkeit von Rechenleistung, open-source Werkzeuge und die Verfügbarkeit von Daten durch digitale Prozesse, erlaubt es heute fast allen Unternehmen Machine Learning Verfahren einzusetzen. Unternehmen, die von dieser Entwicklung profitieren, starten häufig mit kleinen Projekten, die ihnen helfen die Technologien, den Umgang mit Daten und die Änderungen in den eigenen Prozessen besser zu verstehen.

Zu Bereichen, in denen sich schnell gute Ergebnisse erzielen lassen zählen unter Anderem:

  • Automatische Auswertung von Bildern oder Videoaufnahmen
  • Vorhersagen von Kennzahlen (Nachfrage, Lagerstände, etc.) auf deren Basis schnellere und bessere Entscheidungen getroffen werden können
  • Wissensextraktion aus Dokumenten und großen Textkörpern
  • Automatische Klassifizierung von häufig auftretenden Geschäftsvorfällen (zum Beispiel im Banking, Versicherungswesen oder anderen Prüfungsfällen) in automatisch akzeptierbare Anfragen und solche, die weiterhin manuell nachbearbeitet werden müssen

Was ist Machine Learning?

Definition

Machine Learning ermöglicht Computern Wissen aus Daten zu erlernen, ohne dieses explizit zu programmieren. Dieses Wissen stellt eine Funktion dar, die einem Input einen passenden Output zuordnet. Ein Algorithmus passt die Funktion dabei so lange an, bis sie die gewünschten Ergebnisse erzielt. Man spricht vom Training des Modells. In den letzten Jahren haben sich eine Reihe von Trainingsverfahren etabliert, die erst mit der Verfügbarkeit von sehr großen Datensätzen zu guten Ergebnissen führen. Die Formulierung "Daten sind das neue Öl" bezieht sich häufig auf die Tatsache, dass Unternehmen mit reicheren Datensätzen mächtigere Modelle trainieren können.

Narrow AI vs. General AI

Unsere heutigen Machine Learning Algorithmen sind grundsätzlich nur auf sehr spezifische Probleme anwendbar. Man spricht von einer sogenannten Narrow AI. Im Gegensatz dazu steht die sogenannte General AI. Unter einer General AI versteht man einen Algorithmus, der ein abstraktes Weltbildmodell erlernt. Dieser wäre in der Lage, ähnlich wie ein Mensch, Wissen aus verschiedenen Bereichen zu kombinieren und dieses auf bisher unbekannte Probleme zu übertragen. Von einer solchen General AI sind wir jedoch noch entfernt. Es ist nicht einmal geklärt, ob eine solche General AI grundsätzlich möglich ist. Dennoch: Narrow AI ist heute schon in der Lage, Probleme, die früher schwer oder gar nicht durch Computer zu lösen waren, effizienter als Menschen zu lösen.

Vergleich Narrow AI und General AI
Vergleich Narrow AI und General AI

Supverised und Unsupervised Learning

Es existieren zwei Ansätze Machine Learning Modelle zu trainieren. Einerseits gibt es das Supervised Learning und andererseits das Unsupervised Learning. Bei Supervised Learning sind zur Trainingszeit der Input und der dazu gewünschte Output bekannt. Der Algorithmus erzeugt aus diesen Informationen ein Modell, das die Beziehung von Input zu Output beschreibt. Dieses Modell kann nach dem Training allgemeine, das heißt nicht auf den Traningsdatensatz beschränkte, Ergebnisse zu einem Input liefern. So verwendet man Supervised Learning Training für das Erkennen von Bildinhalten. Beim Training werden Bilder mit einer Liste von Bildinhalten für jedes Bild als Input geliefert. Durch das Training soll das Modell als Output die richtigen Objekte erkennen können.

Bei Unsupervised Learning dagegen erhält das Programm keine Informationen zu einem gewünschten Output. Darauf soll das Programm nun ein Modell erstellen, das zu gegebenen Inputs anhand deren Ähnlichkeiten selbst passende Outputs erzeugt. Es ist nur schwer möglich, das Ergebnis eines solchen Modells qualitativ zu beurteilen, weil es keine Vorgabe zu den Ergebnissen gibt. Die automatische Erkennung von Clustern in quantitativen Daten ist ein typisches Problem. Hierbei erzielen Unsupervised Learning Modelle gute Ergebnisse. Ein Programm kann so unter Anderem automatisch Ausreißer und neue Muster in Daten erkennen.

Problemstellungen die Machine Learning lösen kann

Wie bereits erwähnt, werden Machine Learning Algorithmen aktuell auf sehr spezifische Probleme angewendet. Es können drei abstrakte Problemtypen gelöst werden:

Das Klassifizierungsproblem

Unter dem Klassifizierungsproblem versteht man das automatisierte Zusammenfassen von Objekten zu Klassen. Ein klassisches Beispiel hierfür ist ein Programm, das in der Lage ist zu erkennen, ob sich auf einem Bild eine Katze oder ein Hund befindet. Für Klassifizierungsprobleme finden Supervised Learning Modelle häufig Verwendung. Anhand von geeigneten Beispielen erlernt das Modell selbstständig, Objekte den richtigen Klasse zuzuordnen. Welche Eigenschaften dabei betrachtet werden, wird dem Modell je nach Verfahren vorgegeben (Feature Engineering), oder ebenfalls automatisiert erlernt.

Das Regressionsproblem

Bei dem Regressionsproblem geht es darum, den zukünftigen Verlauf einer Funktion abzuschätzen. Ein klassisches Beispiel hierfür wäre die Vorhersage des Pegelstands eines Flusses. Hierbei werden Rückschlüsse aus den Vorjahren gezogen, um den zukünftigen Stand vorherzusehen. Oft kommt hierfür ein Supervised Learning Modell zum Einsatz. Dieses lässt sich mit historischen Daten trainieren, welche Schlüsse auf zukünftige Daten zulassen.

Das Clusteringproblem

Die Zielstellung beim Clusteringproblem ist es, einen Algorithmus zu entwerfen, der selbstständig gegebene Daten in Gruppen ähnlicher Objekte kategorisiert. Häufig wird dazu ein Unsupervised Learning Modell verwendet. Ein solches Modell braucht keine genaueren Vorgaben, wonach es kategorisieren soll. Dadurch kann man sicherstellen, dass man gewisse Gruppen von Daten, die man selber als Entwickler womöglich gar nicht als solche wahrnimmt, nicht von vorne herein ausschließt. Ein klassisches Beispiel wäre die Zielgruppenanalyse im Marketing, wie die personenbezogene Werbung. Dabei werden Kunden in verschiedene Gruppen eingeteilt, um ihnen spezifische Werbung anzuzeigen.

Machine Learning Algorithmen nach Problemstellungen
Machine Learning Algorithmen nach Problemstellungen

Herausforderungen beim Einsatz von Machine Learning Verfahren

Beim Einsatz von Machine Learning Verfahren ergeben sich aber trotz der Menge an Vorteilen einige Herausforderungen wie:

Datenqualität

In der Praxis besteht ein Großteil der Arbeit von Machine Learning Projekten darin, die richtigen Daten zu beschaffen, zu verstehen und aufzubereiten. Dieser, im Allgemeinen "Preprocessing" genannte, Schritt stellt sicher, dass die Daten genau repräsentieren, worauf das Modell auch tatsächlich trainiert werden soll. Besonders in größeren Organisationen ist bereits die Beschaffung und Aggregation der Daten keine triviale Aufgabe, bei der mehrere Abteilungen miteinander Kooperieren müssen. Stehen die nötigen Daten nicht um gewünschten Umfang oder der nötigen Qualität zur Verfügung, besteht die erste Projektphase häufig daraus, diese Daten zu sammeln und aufzubereiten.

Fehler und Verzerrungen in den Daten können dazu führen, dass das trainierte Modell diese ebenfalls erlernt, man spricht hier von "Biases", also Vorurteilen, die sich aus den Daten abzeichnen.

Unterschiede zwischen verschiedenen Machine Learning Verfahren in Bezug zu Performance und Erklärbarkeit

Die verschiedenen Machine Learning Verfahren unterscheiden sich in Bezug zu ihrer Performance und ihrer jeweiligen Erklärbarkeit. Allgemein gilt, dass wenn ein Machine Learning Modell eine hohe Performance erzielt, seine Erklärbarkeit sinkt, wie auch umgekehrt.

Beispielsweise erzielen neuronale Netze eine sehr gute Performance, aber versucht man den Lösungsweg nachzuvollziehen, erkennt man, dass dieser nicht viel mit dem zu tun hat, was wir als logische Problemlösung verstehen würden. Das liegt daran, dass die Modelle aus zum Teil hunderten, oder gar mehr unabhängigen Variablen und noch viel mehr Berechnungen bestehen. Man spricht vom Black Box Problem. Problematisch wird diese Eigenschaft immer dann, wenn diese Informationen wichtig sind, z.B. bei lebenswichtigen Entscheidungen wie in der Medizin, wenn ein Machine Learning Modell eine Behandlung vorschlägt.

Im Gegensatz dazu gibt es Verfahren, wie die lineare Regression oder Decision Trees, die sehr evident sind. Das führt dazu, dass die Ergebnisse dieser Modelle zwar recht leicht erklärbar, die Modelle aber nicht gut für komplexe Probleme anwendbar sind.

Machine Learning Algorithmen nach Performance und Erklärbarkeit
Machine Learning Algorithmen nach Performance und Erklärbarkeit

Overfitting

Man spricht von Overfitting, wenn ein Machine Learning Modell nach dem Training nicht mehr in der Lage ist, allgemeine Ergebnisse zu erzielen. Das passiert, wenn man ein Machine Learning Modell zu häufig auf einem zu kleinen Trainingssatz trainiert. Die Fehlerquote bei diesem wird zwar immer kleiner, die Performance aber nicht unbedingt besser. Denn anstatt, dass das Modell eine allgemeine Funktion erzeugt, wirkt es eher als hätte es die Daten auswendig gelernt. Schließend werden korrekte Ergebnisse nur noch auf dem Trainigssatz erreicht.


Vorverarbeitung von Text für Machine Learning in node.js

Für die Verwendung großer Daten für Machine Learning Verfahren bedarf es erst einer sorgfältigen Vorverarbeitung, die grundlegend ist für die Genauigkeit der Ausgabe. Betrachten wir die Klassifizierung von Texten auf Wortebene, so ist es wichtig, dass jegliche Texte vorverarbeitet werden, sprich jeder Text wird in Sätze unterteilt und dieser danach in einzelne Wörter. Der OpenNLP Wrapper für Node.js ist optimal dafür geeignet diese Vorverarbeitung zu leisten, denn dieser ist nicht nur detailliert konfigurierbar, sondern unterliegt auch der MIT License, sodass der private und kommerzielle Gebrauch kostenlos ist.

Installation

npm install opennlp

OpenNLP bietet folgende Verfahren einen Text zu verarbeiten/analysieren:

  • Chunker
  • Name Finder
  • Part of Speach Tagging
  • Sentence Detector
  • Tokenizer

Dafür stellt Apache unter http://opennlp.sourceforge.net/models-1.5/ eine Vielzahl trainierter Modelle zur Verfügung, die in verschiedenen Sprachen (zum Beispiel Englisch und Deutsch) heruntergeladen und eingebunden werden können. Zusätzlich benötigt man die opennlp-tools-1.6.0.jar, die hier heruntergeladen werden kann.

Konfiguration

In der folgenden Konfiguration wird der OpenNLP Wrapper mit den deutschen Modellen für den Sentence Detector und den Tokenizer initialisiert.

var openNLPOptions = {
    "models" : {
        "tokenizer": nlpPath + '/de-token.bin',
        "sentenceDetector": nlpPath + '/de-sent.bin',
    },
    "jarPath": nlpPath + "/opennlp-tools-1.6.0.jar"
};

Der große Vorteil hierbei ist, dass für die Verarbeitung einer anderen Sprache lediglich die Modelle ausgetauscht und sonst keinerlei Änderungen vorgenommen werden müssen.

Sentence Detector

Der Sentence Detector splittet die Texteingabe bei jedem Punkt und erkennt, ob es sich dabei um ein Satzende handelt oder um einen Punkt in einer Datumsangabe oder Abkürzung.

var openNLP = require("opennlp");
var sentence = 'Am 13. Juni 2014 wurde die deutsche Fußball Nationalmannschaft ' + 
               'Weltmeister. Das war der 4. Weltmeister Titel!';
var sentenceDetector = new openNLP().sentenceDetector;
sentenceDetector.sentDetect(sentence, function(err, results) {
    console.log(results)
    /*
    Ausgabe: 
    [ 
        'Am 13. Juni 2014 wurde die deutsche Fußball  Nationalmannschaft Weltmeister.', 
        'Das war der 4. Weltmeister Titel!'
    ]
    */
});

Tokenizer

Der Tokenizer splittet den Satz in einzelne Wörter und Satzzeichen auf. Leerzeichen zwischen Satzzeichen werden nicht verworfen, sondern als Token erkannt.

var openNLP = require("opennlp");
var sentences = "Am 12. Juni 2014 wurde die deutsche Fußball Nationalmannschaft Weltmeister.";
var tokenizer = new openNLP().tokenizer;
tokenizer.tokenize(sentence, function(err, results) {
    console.log(results);
    /*
    Ausgabe: [ 
                'Am',
                '12',
                '.',
                'Juni',
                '2014',
                'wurde',
                'die',
                'deutsche',
                'Fußball',
                'Nationalmannschaft',
                'Weltmeister',
                '.' 
            ]
    */
})

Optimierung

Verwendet man eine große Datenmenge an Text, so ist der OpenNLP Wrapper sehr gut, um die Texte zu verarbeiten, jedoch arbeitet dieser nicht effizient, da die Tokenisierung sequentiell abläuft und nicht parallel. Da die Dauer der Tokenisierung somit linear mit der Satzanzahl ansteigt, mussten wir hierfür eine effiziente Lösung finden. Dazu haben wir uns einen eigenen minimalistischen OpenNLP Wrapper geschrieben, der den Sentence Detector und den Tokenizer beinhaltet. Dieser ist auf https://github.com/flore2003/opennlp-wrapper zu finden und unterliegt der MIT License. Der Wrapper ist somit nicht vollkompatibel zum zuvor beschriebenen Wrapper.

Installation

npm install opennlp-wrapper

Die Konfiguration, Sentence Splitting und Tokenisierung unterscheidet sich hierbei leicht vom originalen Projekt, sodass ein einfacher Tausch der Bibliothek nicht genügt.

Konfiguration

Die folgende Konfiguration beschreibt den OpenNLP Wrapper, der von uns entwickelt wurde, mit den deutschen Modellen für den Sentence Detector und den Tokenizer initialisiert. Man beachte, dass auch hier die Konfiguration leicht angepasst wurde, im Vergleich zur original Bibliothek.

var openNLPOptions = {
    models : {
        "tokenizer": nlpPath +  'de-token.bin',
        "sentenceDetector": nlpPath + 'de-sent.bin'
    },
    "jarPath": nlpPath +  "opennlp-tools-1.6.0.jar"
};
var openNLP = new OpenNLP(openNLPOptions);

Sentence Detector

In der originalen Bibliothek wurde auf der OpenNLP Instanz sentenceDetector.sentDetect() aufgerufen. Hier genügt lediglich der Methodenaufruf detectSentences() auf der OpenNLP Instanz.

var input = 'Am 12. Juni 2014 wurde die Fußball Nationalmannschaft ' + 
            'Fußballweltmeister. Das war der 4. Weltmeister Titel!';

openNLP.detectSentences(input, function(err, sentences) {
    console.log(sentences);
});

Tokenizer

In der originalen Bibliothek wurde auf der OpenNLP Instanz tokenizer.tokenize aufgerufen. Hier genügt lediglich der Methodenaufruf tokenize() auf der OpenNLP Instanz.

var input = 'Am 12. Juni 2014 wurde die Fußball Nationalmannschaft Fußballweltmeister.';

openNLP.tokenize(input, function(err, tokens) {
    console.log(tokens);
});

Anmerkungen und Tipps

Damit die Daten für ein Machine Learning Verfahren, wie zum Beispiel Naive Bayes, geeignet sind, bedarf es noch weiteren Vorverarbeitungsschritten, wie die Verwendung eines Stemmers oder Lemmatisierers. Für die Verarbeitung von deutschem Text haben wir einen Stemmer verwendet, der folgendes Problem löst: Man betrachte die Wörter "Kauf, Käufe, kaufen, kaufe", die sich alle auf den Erwerb eines Artikels beziehen, jedoch unterschiedlich verwendet werden, aber dennoch das Gleiche aussagen. Der Stemmer extrahiert aus jedem Wort den Wortstamm, was in diesem Fall "kauf" entspricht. Führt man dieses Verfahren auf allen Wörtern durch, die man mittels des Tokenisierens ermittelt hat, so schrumpft die Anzahl unterschiedlicher Wörter um ein Vielfaches.

Der Snowball Stemmer ist hierfür sehr zu empfehlen, da er nicht nur sehr einfach zu verwenden ist, sondern auch über 13 verschiedene Sprachen unterstützt.

Nachdem man alle Wörter gestemmt hat sollte man noch die Stopworte entfernen. Hierzu zählen im Deutschen unter anderem bestimmte Artikel, unbestimmte Artikel und Konjunktionen. Im Englischen sind die Wörter 'a', 'of', 'the', 'I', 'it', 'you' und 'and' Teil der Stopwörter. Eine sehr gute Variante Stopworte zu bestimmten, ist nach dem Stemming alle Wörter nach absteigender Häufigkeit zu sortieren und die ersten 100 bis 200 Wörter dieser Liste zu betrachten und zu analysieren, welche Wörter wirklich nicht aussagekräftig sind und verworfen werden können.

Im nächsten Beitrag bauen wir auf diesem Wissen auf und entwickeln einen Naive Bayes Klassifizierer, der beispielsweise in der Spamerkennung eingesetzt wird.