Künstliche Intelligenz, maschinelles Lernen und Produkt-Vektoren
Bevor wir uns mit dem eigentlichen Thema Produkt-Vektorisierung auseinandersetzen, stellen sich vorab ein paar Fragen: Für welche Anwendungen brauchen wir überhaupt Produkt-Vektoren? Was ist das eigentlich genau? Und wie hängt das mit künstlicher Intelligenz (KI) zusammen?
Ich versuche mal, von dem Begriff KI ausgehend den Bogen zur Produkt-Vektorisierung zu spannen, also von einem groben Überblick so schnell wie möglich zum eigentlichen Thema dieses Blog-Posts zu kommen:
Wenn wir an eine KI denken, stellen wir uns einen Computer bzw. eine Maschine vor, die selbständig intelligente Entscheidungen treffen kann, vergleichbar wie es ein Mensch in seinem Alltag tut. Ein Teilbereich der KI ist das maschinelle Lernen (ML), bei dem ein künstliches System anhand von Beispielen erlernt, Strukturen in Daten zu erkennen und diese mit bekannten Eigenschaften (zB. vordefinierten Kategorien oder Klassen) zu verknüpfen. Die Algorithmen, die für das maschinelle Lernen eingesetzt werden, lassen sich hierbei in zwei Gruppen aufteilen: In das überwachte Lernen (supervised learning) und das unüberwachte Lernen (unsupervised learning). Ein Anwendungsfall für das überwachte Lernen könnte zB. sein, dass wir Produkte in die Kategorien trendig oder altmodisch einteilen möchten. Hierbei würde es sich dann um ein 2-Klassen-Klassifikationsproblem handeln und wir könnten ein solches System trainieren, indem wir unserem ML-Algorithmus Beispiele von besonders trendigen bzw. altmodischen Produkten zeigen. Nach dem erfolgreichen Trainingsvorgang, könnte dieses dann selbständig, vorher noch nicht gesehene Produkte anhand ihrer Beschaffenheit in die zwei genannten Kategorien einteilen.
Was bedeutet in diesem Zusammenhang „dem ML-Algorithmus Produkte zeigen”?
Maschinen oder Computer benötigen für Ihre Berechnungen bzw. Entscheidungen immer Daten in numerischer Form. Egal wie komplex ein KI-System ist, im Kern gilt es immer ein mathematisches Optimierungsproblem zu lösen, d.h. das Modell basiert auf mathematischen Berechnungen. Wir müssen dem ML-Algorithmus die Daten unsere Beispiel-Produkte daher in einer numerischen Form liefern, hierbei spricht man in der Regel von einem Vektor mit einer fixen Länge bzw. Dimensionalität. Selbst wenn wir die Produkte sprichwörtlich “herzeigen”, nämlich in Bildform, ist ein solches digitales Bild wieder nichts anderes als eine N*M-Matrix mit entsprechenden Farbwerten, oder zB. im einfachen Fall, ein 100×100 Pixel großes Bild mit entsprechenden Grauwerten (ein Schwarz-Weiß-Bild). Im Rohformat würde das daher einem Vektor mit einer Länge von 10.000 Dimensionen entsprechen. Jedes ML-Modell ist daher auf aussagekräftige Produktdaten in numerischer Form angewiesen.
Mit welchen unterschiedlichen Datentypen hat man es in der Regel zu tun?
Übliche Datentypen sind:
- Kategorien (z.B. vordefinierte Farb-Gruppen wie “blau”, “rot”, “grün”, “andere”)
- Wahrheitswert (Wahr/Falsch) bzw. Ja/Nein-Angaben (z.B. “Ist das Produkt wasserdicht oder nicht?”)
- Text (wie Produktbeschreibungen, Produktname, etc.)
- Numerische Werte (Preis, Abmessungen, Gewicht)
- Bilder bzw. Videos (sind eine Sonderform von – sehr vielen! – strukturierten numerischen Werten)
- Sonstige Signale (z.B. ein Audio-Signal, wie das Motorengeräusch eines Autos)
Auf den ersten Blick kann man bereits erkennen, dass selbst die hier angeführten Beispiele sich unter Umständen als unterschiedliche Datentypen einteilen lassen würden. Eine Ja/Nein-Angabe kann auch als eine Einteilung in zwei Kategorien angesehen werden. Genauso kann eine Farb-Angabe sowohl ein freier Text sein, wenn es keine vordefinierten Farb-Gruppen gibt (ultramarinwaschblau), bzw. auch als numerische Werte angegeben sein, wenn ich zB. die Farbe blau durch den RGB-Wert [0, 0, 255] ersetze. Man kann hier bereits darauf schließen, dass die Definition der Datentypen für die bestehenden Produkt-Attribute von wesentlicher Bedeutung für eine KI- oder ML-Anwendung ist. Je strukturierter die Daten sind, desto leichter tut sich auch ein KI-System, die erwarteten Schlüsse zu ziehen und plausible Entscheidungen zu treffen. Uns Menschen geht das ja im Prinzip nicht anders… wir haben weniger Arbeit mit einer Aufgabe, wenn die Daten, die wir für die Lösung der Aufgabe benötigen, in nachvollziehbarer Form vorliegen. Versuchen Sie mal eine mathematische Textaufgabe bei einer Prüfung zu lösen, bei der Ihnen bestimmte Daten fehlen, die der oder die LehrerIn vergessen hat mit anzugeben! Diese Aufgabe ist unlösbar… Sind die Daten nur sehr schwer aus der Textaufgabe extrahierbar und sehr komplizierte Berechnungen notwendig? Dann tun Sie sich zwar schwer, aber die Aufgabe ist lösbar. Genauso geht es auch einem ML-Algorithmus, wenn die Datenbasis zu Wünschen übrig lässt.
Beispiel aus der Praxis: So ziemlich das Schlimmste was man einem KI-System bzw. auch einem Data Scientist antun kann, ist, wenn die gesamten Daten nur als ein völlig unstrukturierter Texthaufen vorliegen, die gesamten Daten also beispielsweise in freien Textfeldern eingepflegt wurden, noch dazu auf die unterschiedlichsten Arten und Weisen. Nicht, dass man mit solchen Daten gar nichts anfangen kann… aber es wird sehr sehr schwierig und die Datenqualität wird sich auch auf die Ergebnisse auswirken. Genau aus diesem Grund sollte man sich in einem Unternehmen, wenn man mit den Themen KI, maschinellem Lernen und Data Science beginnt, immer zuallererst mit der Evaluierung der Datenbasis beschäftigen und bei Bedarf die Datenqualität auf einen gewissen Standard bringen.
Gut, die Daten für die Vektorisierung liegen nun in einer halbwegs strukturierten Form vor und die Datentypen einzelner Produktattribute sind definiert… wie geht es nun weiter?
Vorverarbeitung (Preprocessing), Feature Generation
Als nächstes benötigen wir sogenannte Features. Warum trainieren wir unser KI-System nicht direkt mit den Rohdaten der Produkte? Mit manchen Datentypen wie Text wäre das gar nicht direkt möglich und selbst Kategorien oder Ja/Nein-Angaben benötigen eine gewissen Transformation. Ja/Nein-Angaben könnte man recht einfach in 0/1 umwandeln bzw. Kategorien analog dazu mittels einer einfachen One-Hot-Kodierung darstellen (bei 3 Kategorien z.b. [0, 0, 1], wenn das aktuelle Produkt in die 3. Kategorie fällt). Aber auch direkte numerische Daten befinden sich oft auf den unterschiedlichsten Skalen (z.B. Prozentangaben vs. Preise), bei denen es in der Regel Sinn macht diese auf die gleiche Skala zu bringen. Welche Skala bzw. Transformationen man hier verwendet, hängt auch sehr stark vom verwendeten ML-Algorithmus ab.
Um Texte in Features zu verwandeln, bedient man sich Methoden der Computerlinguistik (Natural Language Processing, NLP). Dies reicht von einfacheren Algorithmen wie Bag-Of-Words bis hin zu Word2Vec, Bidirectional Encoder Representations from Transformers (BERT) oder Textrepräsentation auf Zeichenebene (character level embeddings).
Bilder, Videos und sonstige Signale benötigen grundsätzlich auch eine besondere Art der Feature Generation. Bei Bildern hat man beispielsweise oft die Anforderung, dass ein um 90 Grad gedrehtes Bild dennoch als zum originalen Bild ident erkannt wird, wenn man z.B. an die Erkennung eines Fingerabdrucks zum Entsperren eines Smartphones denkt. Bei Bildern würde man für so eine Anwendung dann Features konstruieren, die trotz bestimmter geometrischer Transformationen, wie etwa Rotation und Skalierung, gleich bleiben.
Feature Selection, Dimensionsreduktion, Vektorisierung
Nehmen wir nun an, dass wir unsere Produktdaten bereits in eine numerische Form verwandelt und entsprechende Features generiert haben, d.h. für jedes Produkt haben wir nun einen Vektor mit gleicher Länge bzw. Dimensionalität. Ist das bereits unser fertiger Produkt-Vektor? Jein… Mitunter haben wir es mit hochdimensionalen Vektoren zu tun, die noch dazu sehr redundante Informationen enthalten. Stört das unser KI-System? Mit mehr Rechenleistung könnte uns ja die hohe Dimensionalität egal sein? Eher nicht… In der Regel haben wir nur eine sehr überschaubare Anzahl an Trainingsdaten bzw. Beispielen vorliegen, mit dem wir unsere Systeme trainieren, da diese Daten zumeist händisch erstellt werden müssen. Bei unserem obigen Beispiel, bei dem wir Produkte in trendig oder altmodisch einteilen möchten, müsste eine Person manuell eine Vielzahl an Produkten in beide Kategorien einteilen. Da ein solcher Vorgang viel Zeit und Geld kostet, ist die Anzahl der Trainingsdaten in der Regel sehr überschaubar. Und je höher die Dimensionalität der Daten ist, mit desto mehr Daten möchte man sein KI-System trainieren. Im Prinzip ist der Grund dahinter ein einfacher: In folgender Abbildung (Abb. 1) sieht man, wie für die Dimensionalitäten von 1 bis 3 Dimensionen, der jeweilige mathematische Raum in gleich große Regionen aufgeteilt wird. Je höher bei der Vektorisierung die Dimensionalität der Daten ist, desto mehr gleich große Regionen gibt es in dem jeweiligen Raum. Die Anzahl der Regionen steigt exponentiell mit der Dimensionalität an. Dieses Phänomen nennt sich auch Fluch der Dimensionalität.
Im Optimalfall möchte man aber, dass es für jede Region auch Beispiele in den Trainingsdaten gibt. So kann ein ML-Algorithmus in dem jeweiligen hochdimensionalen Raum beim Trainieren die Daten optimal trennen und quasi jede existierende Region einer der beiden Klassen zuordnen, um bei unserem obigen Beispiel zu bleiben. Je mehr Regionen es gibt, für die wir keine Trainingsdaten haben, umso schwerer kann unser trainiertes KI-Modell neue und unbekannte Daten in derartigen Regionen korrekt klassifizieren.
Wie können wir nun für eine bessere Vektorisierung die Dimensionalität unsere Vektoren bei einem annähernd gleichbleibenden Informationsgehalt reduzieren? Hier stehen uns eine Vielzahl an linearen und nicht-linearen Methoden zur Verfügung. Eine Vertreterin der linearen Methoden ist die Hauptkomponentenanalyse (Principal Component Analysis, PCA), bei der die Variation in den Daten als die wesentliche Information angesehen wird. Eine PCA verfolgt daher den Ansatz, Dimensionen mit einer hohen Varianz im Datensatz bestehen zu lassen und hingegen Dimensionen mit niedriger Varianz auszuschließen. Diese Operation erfolgt nicht direkt anhand der originalen Daten, sondern es werden zuerst die Hauptkomponenten ermittelt und diese dann absteigend anhand ihrer Varianz sortiert. Eine angewandte PCA zur Dimensionsreduktion transformiert daher immer die Daten in einen neuen mathematischen Raum und nach der Transformation kann man dann die Komponenten mit einer niedrigen Varianz weglassen.
Ein Beispiel für eine nicht-lineare Dimensionsreduktionsmethode ist der Autoencoder. Ein Autoencoder ist eine spezielle Form eines künstlichen neuronalen Netzes (KNN), und daher ein ML-Algorithmus aus dem Bereich des unüberwachten Lernens, wobei dieser das Ziel verfolgt, eine sehr komprimierte Repräsentation zu lernen. Hierzu wird beim Trainieren des KNNs der originale Vektor eines Produktes sowohl beim Input-Layer als auch beim Output-Layer angelegt. Durch einer kleinere Dimensionalität der Hidden-Layers des KNNs werden die originalen Daten sowohl kodiert als auch dekodiert. Die kodierten Daten entsprechen daher dem komprimierten Produkt-Vektor und durch den erfolgreichen Trainingsabschluss des Autoencoders ist auch sichergestellt, dass die Daten während der Vektorisierung wieder dekodiert werden können, zumindest mit einem sehr überschaubaren und kleinen Fehler. Dadurch nimmt man an, dass die wesentliche Information nach der Dimensionsreduktion auch in kodierter Form noch vorliegt.
Zusammenfassende Erkenntnisse
Nach all diesen Schritten haben wir nun Produkt-Vektoren für die Vektorisierung in einer gewissen Güte. Der Verwendung dieser Vektoren in KI-Systemen bzw. ML-Algorithmen steht nichts mehr im Wege.
Ein paar letzte warnende Worte: Es gibt leider nicht „den einen“ ML-Algorithmus, der für alle denkbaren Anwendungen super funktioniert. Genauso wenig gibt es „die eine“ perfekte Pipeline zur Produkt-Vektorisierung. Die oben genannten Methoden hängen immer auch sehr stark vom Anwendungsfall und den Originaldaten ab, um eine Datenanalyse und eine genaue Spezifikation des Anwendungsfalles kommt man daher nie herum!
[1] Bishop, C.M.: Pattern Recognition and Machine Learning (Information Science) and Statistics. Springer, New York, 2006.
Mehr zum Autor Christopher Michael Bishop auf Wikipedia