En fait, les vecteurs de sortie ne sont pas calculés à partir de l'entrée en utilisant une opération mathématique. Au lieu de cela, chaque entier en entrée est utilisé comme index pour accéder à une table contenant tous les vecteurs possibles. C'est la raison pour laquelle vous devez spécifier la taille du vocabulaire en tant que premier argument (afin que la table puisse être initialisée).
L'application la plus courante de cette couche concerne le traitement de texte. Voyons un exemple simple. Notre ensemble de formation ne comprend que deux phrases:
a bientôt, j'espère
C'est un plaisir de vous revoir
Nous pouvons donc coder ces expressions en attribuant à chaque mot un nombre entier unique (par ordre d'apparition dans notre jeu de données d'apprentissage, par exemple). Ensuite, nos phrases pourraient être réécrites comme suit:
[0, 1, 2, 3, 4]
[5, 1, 2, 3, 6]
Imaginons maintenant que nous voulions former un réseau dont la première couche est une couche d'intégration. Dans ce cas, nous devrions l'initialiser comme suit:
Embedding(7, 2, input_length=5)
Le premier argument (7) est le nombre de mots distincts dans l'ensemble d'apprentissage. Le deuxième argument (2) indique la taille des vecteurs d'inclusion. Le input_length argumet, bien sûr, détermine la taille de chaque séquence d'entrée.
Une fois le réseau formé, nous pouvons obtenir les poids de la couche d’incorporation qui, dans ce cas, sera de taille (7, 2) et peuvent être considérés comme la table utilisée pour mapper des entiers sur des vecteurs d’incorporation:
+------------+------------+
| 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] |
+------------+------------+
Donc, selon ces intégrations, notre deuxième phrase de formation sera représentée par:
[[0.7, 1.7], [0.1, 4.2], [1.0, 3.1], [0.3, 2.1], [4.1, 2.0]]
Cela peut sembler contre-intuitif au début, mais les moteurs de différenciation automatique sous-jacents (Tensorflow ou Theano, par exemple) parviennent à optimiser ces vecteurs associés à chaque entier saisi, comme tout autre paramètre de votre modèle. Il est également intéressant d’utiliser les intégrations apprises par d’autres méthodes / personnes de différents domaines (voir https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html ) en tant que fait dans [1].
[1] D. López-Sánchez, JR Herrero, AG Arrieta et JJ Corchado. Hybridizing metric learning et raisonnement par cas pour la détection de clickbait adaptable. Intelligence appliquée, 1-16.