Dieser Abschnitt befasst sich mit verschiedenen Methoden zum Erhalten von Einbettungen. Außerdem wird erläutert, wie statische Einbettungen in kontextuelle Einbettungen umgewandelt werden können.
Techniken zur Dimensionalitätsreduktion
Es gibt viele mathematische Techniken, die die wichtigen Strukturen eines hochdimensionalen Raums in einem niedrigdimensionalen Raum erfassen. Theoretisch kann jede dieser Techniken verwendet werden, um eine Einbettung für ein maschinelles Lernsystem zu erstellen.
Die Analyse der Hauptkomponenten (Principal Component Analysis, PCA) wurde beispielsweise zur Erstellung von Worteinbettungen verwendet. Bei einem Set von Instanzen, wie Bag of Words-Vektoren, versucht die PCA, stark korrelierende Dimensionen zu finden, die zu einer einzigen Dimension zusammengefasst werden können.
Training einer Einbettung als Teil eines neuronalen Netzwerks
Sie können eine Einbettung erstellen, während Sie für Ihre Zielaufgabe ein neuronales Netzwerk trainieren. Auf diese Weise erhalten Sie eine Einbettung, die gut an Ihr System angepasst ist. Dieser Prozess kann aber länger dauern, als die Einbettung separat zu trainieren.
Im Allgemeinen können Sie eine versteckte Schicht der Größe d in Ihrem neuronalen Netzwerk erstellen, die als Einbettungsebene gekennzeichnet ist. Dabei steht d sowohl für die Anzahl der Knoten in der versteckten Schicht als auch für die Anzahl der Dimensionen im Einbettungsbereich. Diese Einbettungsebene kann mit beliebigen anderen Merkmalen und versteckten Schichten kombiniert werden. Wie in jedem neuronalen Deep-Learning-Netzwerk werden die Parameter während des Trainings optimiert, um den Verlust an den Knoten in der Ausgabeschicht des Netzwerks zu minimieren.
Wie im Beispiel der App für Essensempfehlungen ist es unser Ziel, anhand der aktuellen Lieblingsessen von Nutzern Gerichte vorherzusagen, die sie mögen könnten. Erstens können wir zusätzliche Daten über die fünf Lieblingsessen unserer Nutzer zusammenstellen. Dann können wir diese Aufgabe als ein Problem des überwachten Lernens modellieren. Wir haben vier dieser fünf Top-Gerichte als Merkmalsdaten festgelegt. Das zufällig ausgewählte fünfte legen wir als positives Label beiseite, das unser Modell vorhersagen soll. So optimieren wir die Vorhersagen des Modells unter Verwendung eines Softmax-Verlusts.
Während des Trainings lernt das neuronale Netzwerkmodell die optimalen Gewichte für die Knoten in der ersten versteckten Schicht, die als Einbettungsebene dient. Wenn das Modell beispielsweise drei Knoten in der ersten versteckten Schicht enthält, könnte es feststellen, dass die drei wichtigsten Dimensionen von Lebensmitteln „Sandwich-Artigkeit“, „Dessert-Artigkeit“ und „Liquid-Artigkeit“ sind. Abbildung 12 zeigt den one-hot-codierten Eingabewert für „Hotdog“ umgewandelt in einen dreidimensionalen Vektor.
![Abbildung 12: Neuronales Netzwerk für die One-Hot-Codierung eines Hotdogs. Die erste Schicht ist eine Eingabeschicht mit 5 Knoten, jeweils mit einem Symbol für das entsprechende Essen gekennzeichnet (Borschtsch, Hotdog, Salat, ... und Schawarma). Diese Knoten haben die Werte [0, 1, 0, ... 0], die jeweils die One-Hot-Codierung von „Hotdog“ repräsentieren. Die Eingabeschicht ist mit einer 3-Knoten-Einbettungsebene verbunden, deren Knoten die Werte 2,98, −0,75 bzw. 0 haben. Die Einbettungsebene ist mit einer versteckten Schicht mit 5 Knoten verbunden, die wiederum mit einer 5-Knoten-Ausgabeschicht verbunden ist.](https://developers.google.cn/static/machine-learning/crash-course/embeddings/images/one_hot_hot_dog_embedding.png?hl=de)
hot dog
wird als Eingabe für ein neuronales Deep-Learning-Netzwerk bereitgestellt. Eine Einbettungsebene übersetzt die One-Hot-Codierung in den dreidimensionalen Einbettungsvektor [2.98, -0.75, 0]
.
Im Laufe des Trainings werden die Gewichte der Einbettungsebene optimiert, sodass die Einbettungsvektoren für ähnliche Beispiele näher beieinander liegen. Wie bereits erwähnt, sind die Dimensionen, die ein Modell für seine Einbettungen wählt, wahrscheinlich nicht so intuitiv oder verständlich wie in diesem Beispiel.
Kontextuelle Einbettungen
Eine Einschränkung der word2vec
statischen Einbettungsvektoren besteht darin, dass Wörter in verschiedenen Kontexten unterschiedliche Dinge bedeuten können. „Ja“ hat für sich allein eine Bedeutung, heißt aber etwas anderes in einem Satz wie „Ja, richtig“. „Post“ kann im Englischen unter anderem „Briefpost“ bedeuten, man kann etwas „in die Post geben“. Es kann aber auch ein „Ohrringverschluss“, eine „Zielmarkierung beim Pferderennen“, eine „Post-Production“ oder möglicherweise ein „Plakat“, „Aushang“ oder „Wachtposten“ sein. Oder es bedeutet einfach „nach“.
Bei statischen Einbettungen wird jedes Wort durch einen einzigen Punkt im Vektorraum dargestellt, auch wenn es eine Vielzahl von Bedeutungen haben kann.
Bei der letzten Übung haben Sie die Grenzen der statischen Einbettung für das Wort Orange erkundet, das entweder eine Farbe oder eine Obstsorte bezeichnen kann. Mit nur einer statischen Einbettung wird Orange immer näher an anderen Farben liegen als an Saft, wenn es auf dem Datensatz „word2vec
“ trainiert wird.
Kontextuelle Einbettungen wurden entwickelt, um dieses Problem zu lösen. Mit kontextuellen Einbettungen kann ein Wort durch mehrere Einbettungen repräsentiert werden, die sowohl Informationen über die umgebenden Wörter als auch über das Wort selbst beinhalten. Orange hätte eine andere Einbettung für jeden speziellen Satz, der das Wort im Datensatz enthält.
Einige Methoden zur Erstellung kontextueller Einbettungen wie ELMo transformieren die statische Einbettung eines Beispiels mithilfe einer Funktion, die Informationen über die umliegenden Wörter einbezieht, etwa den word2vec
-Vektor für ein Wort in einem Satz. Dadurch entsteht eine kontextuelle Einbettung.
Weitere Informationen zu kontextuellen Einbettungen
- Speziell für ELMo-Modelle wird die statische Einbettung mit Einbettungen aus anderen Schichten aggregiert, die Vorwärts- und Rückwärts-Lesarten des Satzes codieren.
- BERT-Modelle maskieren einen Teil der Sequenz, die das Modell als Eingabe verwendet.
- Transformator-Modelle verwenden eine Self-Attention-Schicht, um die Relevanz der anderen Wörter in einer Sequenz für jedes einzelne Wort zu gewichten. Sie fügen außerdem, Element für Element, zu jeder zuvor gelernten Token-Einbettung die entsprechende Spalte aus einer positionalen Einbettungs-Matrix hinzu (siehe PositionscodierungLINK 2). Damit erzeugen sie die Eingabeeinbettung, die in den Rest des Modells zur Inferenz eingespeist wird. Diese für jede Textsequenz einzigartige Eingabeeinbettung ist eine kontextuelle Einbettung.
Die oben beschriebenen Modelle sind Sprachmodelle. Kontextuelle Einbettungen sind jedoch auch für andere generative Aufgaben nützlich, beispielsweise für Bilder. Eine Einbettung der Pixel-RGB-Werte in ein Foto eines Pferdes liefert dem Modell mehr Informationen, wenn sie mit einer Positionsmatrix kombiniert wird, die jedes Pixel repräsentiert, und zusätzlich mit einer Codierung der benachbarten Pixel. So entstehen kontextuelle Einbettungen, die mehr Informationen enthalten als die ursprünglichen statischen Einbettungen der RGB-Werte allein.