Einbettungen: Kategoriale Eingabedaten

Kategoriale Daten beziehen sich auf Eingabemerkmale, die ein oder mehrere diskrete Elemente aus einer begrenzten Auswahl von Elementen darstellen. Dies können beispielsweise die Filme, die ein Nutzer angesehen hat, die Wörter in einem Dokument oder der Beruf einer Person.

Kategoriale Daten werden am besten über dünnbesetzte Tensoren dargestellt. Diese sind Tensoren mit sehr wenigen Elementen, die nicht null sind. Wenn wir beispielsweise ein Filmempfehlungsmodell erstellen, können wir jedem möglichen Film eine eindeutige ID zuweisen und dann jeden Nutzer durch einen dünnbesetzten Tensor der Filme darstellen, die er sich angesehen hat, wie in Abbildung 3 gezeigt.

Beispieleingabe für unser Problem mit Filmempfehlung.

Abbildung 3. Daten zu unserem Problem mit Filmempfehlungen.

Jede Zeile der Matrix in Abbildung 3 ist ein Beispiel für die Aufzeichnung des Verlaufs der Filmaufrufe eines Nutzers. Er wird als dünnbesetzter Tensor dargestellt, da sich jeder Nutzer nur einen kleinen Teil aller möglichen Filme ansieht. Die letzte Zeile entspricht dem dünnbesetzten Tensor [1, 3, 999999], wobei die Vokabular-Indexe über den Filmsymbolen verwendet werden.

Ebenso kann man Wörter, Sätze und Dokumente als dünnbesetzte Vektoren darstellen, wobei jedes Wort im Vokabular eine Rolle spielt, die den Filmen in unserem Empfehlungsbeispiel ähnlich ist.

Damit solche Darstellungen in einem ML-System verwendet werden können, müssen wir jeden dünnbesetzten Vektor als Vektor von Zahlen darstellen, damit semantisch ähnliche Elemente (Filme oder Wörter) im Vektorraum ähnliche Abstände haben. Aber wie stellt man ein Wort als Vektor von Zahlen dar?

Am einfachsten ist es, eine große Eingabeebene mit einem Knoten für jedes Wort in Ihrem Vokabular oder zumindest einen Knoten für jedes Wort in Ihren Daten zu definieren. Wenn in Ihren Daten 500.000 eindeutige Wörter enthalten sind, können Sie ein Wort mit einer Länge von 500.000 Vektoren darstellen und jedes Wort einem Slot im Vektor zuweisen.

Wenn Sie 1247 den Wert „Pferd“ zuweisen, können Sie ihn dann in Ihr Netzwerk einspeisen und eine 1 in den 1247. Eingangsknoten und eine 0 in den Rest einfügen. Diese Art der Darstellung wird als One-Hot-Codierung bezeichnet, da nur ein Index einen Wert ungleich null hat.

In der Regel enthält Ihr Vektor die Anzahl der Wörter in einem größeren Textblock. Das wird auch als „Tacke mit Wörtern“ bezeichnet. In einem Wortschatzvektor hätten mehrere der 500.000 Knoten einen Wert ungleich null.

Wenn Sie jedoch Werte ungleich null ermitteln, erhalten Sie mit einem Knoten pro Wort sehr spärliche Eingabevektoren, also sehr große Vektoren mit relativ wenigen Werten, die nicht null sind. Dünnbesetzte Darstellungen haben einige Probleme, die es einem Modell erschweren können, effektiv zu lernen.

Größe des Netzwerks

Große Eingabevektoren bedeuten eine enorme Anzahl von Gewichtungen für ein neuronales Netzwerk. Wenn in Ihrem Vokabular M und in den N-Knoten auf der ersten Ebene des Netzwerks über der Eingabe M-Wörter enthalten sind, haben Sie MxN-Gewichtungen zum Trainieren für diese Ebene. Eine große Anzahl von Gewichtungen verursacht weitere Probleme:

  • Datenmenge: Je mehr Gewichtungen Ihr Modell hat, desto mehr Daten müssen Sie effektiv trainieren.

  • Umfang der Berechnung. Je mehr Gewichtungen, desto mehr Berechnung ist erforderlich, um das Modell zu trainieren und zu verwenden. Es ist einfach, die Möglichkeiten Ihrer Hardware zu überschreiten.

Mangelhafte Beziehungen zwischen Vektoren

Wenn Sie die Pixelwerte von RGB-Kanälen in einen Bildklassifikator einspeisen, ist es sinnvoll, über die Werte für „close“ zu sprechen. Rotes Blau ist sowohl in der Semantik als auch in Bezug auf die geometrische Entfernung zwischen Vektoren fast reines Blau. Ein Vektor mit einer 1 bei Index 1247 für „Pferde“ ist jedoch nicht näher an einem Vektor mit einer 1 bei einem Index von 50.430 für einen Antilope | als ein Vektor mit einer 1 bei einem Index von 238 für „Fernsehen“ enthalten.

Lösung: Einbettungen

Die Lösung für diese Probleme ist die Verwendung von Einbettungen, die große dünn besetzte Vektoren in einen niedrigdimensionalen Raum umwandeln, der semantische Beziehungen beibehält. In den folgenden Abschnitten dieses Moduls sehen wir uns die Einbettungen intuitiv, konzeptionell und programmatisch an.