Tatsächlich werden die Ausgabevektoren nicht unter Verwendung einer mathematischen Operation aus der Eingabe berechnet. Stattdessen wird jede Eingabe-Ganzzahl als Index verwendet, um auf eine Tabelle zuzugreifen, die alle möglichen Vektoren enthält. Aus diesem Grund müssen Sie als erstes Argument die Größe des Vokabulars angeben (damit die Tabelle initialisiert werden kann).
Die häufigste Anwendung dieser Ebene ist die Textverarbeitung. Schauen wir uns ein einfaches Beispiel an. Unser Trainingsset besteht nur aus zwei Sätzen:
Hoffe dich bald zu sehen
Schön dich wieder zu sehen
Wir können diese Sätze also codieren, indem wir jedem Wort eine eindeutige Ganzzahl zuweisen (z. B. nach der Reihenfolge des Auftretens in unserem Trainingsdatensatz). Dann könnten unsere Sätze umgeschrieben werden als:
[0, 1, 2, 3, 4]
[5, 1, 2, 3, 6]
Stellen Sie sich nun vor, wir möchten ein Netzwerk trainieren, dessen erste Schicht eine Einbettungsschicht ist. In diesem Fall sollten wir es wie folgt initialisieren:
Embedding(7, 2, input_length=5)
Das erste Argument (7) ist die Anzahl der unterschiedlichen Wörter im Trainingssatz. Das zweite Argument (2) gibt die Größe der Einbettungsvektoren an. Das Argument input_length bestimmt natürlich die Größe jeder Eingabesequenz.
Sobald das Netzwerk trainiert wurde, können wir die Gewichte der Einbettungsschicht ermitteln, die in diesem Fall die Größe (7, 2) haben und als Tabelle für die Zuordnung von Ganzzahlen zu Einbettungsvektoren dienen können:
+------------+------------+
| index | Embedding |
+------------+------------+
| 0 | [1.2, 3.1] |
| 1 | [0.1, 4.2] |
| 2 | [1.0, 3.1] |
| 3 | [0.3, 2.1] |
| 4 | [2.2, 1.4] |
| 5 | [0.7, 1.7] |
| 6 | [4.1, 2.0] |
+------------+------------+
Entsprechend diesen Einbettungen wird unsere zweite Trainingsphrase folgendermaßen dargestellt:
[[0.7, 1.7], [0.1, 4.2], [1.0, 3.1], [0.3, 2.1], [4.1, 2.0]]
Es mag zunächst als nicht intuitiv erscheinen, aber die zugrunde liegenden automatischen Differenzierungs-Engines (z. B. Tensorflow oder Theano) optimieren diese Vektoren, die jeder Eingabe-Ganzzahl zugeordnet sind, genau wie alle anderen Parameter Ihres Modells. Es ist auch interessant, die Einbettungen zu verwenden, die von anderen Methoden / Personen in verschiedenen Domänen gelernt wurden (siehe https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html ) als fertig in [1].
[1] López-Sánchez, D., Herrero, JR, Arrieta, AG und Corchado, JM Angewandte Intelligenz, 1-16.