De hecho, los vectores de salida no se calculan a partir de la entrada utilizando ninguna operación matemática. En cambio, cada entero de entrada se utiliza como índice para acceder a una tabla que contiene todos los vectores posibles. Esa es la razón por la que necesita especificar el tamaño del vocabulario como primer argumento (para que la tabla se pueda inicializar).
La aplicación más común de esta capa es para el procesamiento de texto. Veamos un ejemplo simple. Nuestro conjunto de entrenamiento consta solo de dos frases:
Espero verte pronto
Qué gusto verte de nuevo
Por lo tanto, podemos codificar estas frases asignando a cada palabra un número entero único (por orden de aparición en nuestro conjunto de datos de entrenamiento, por ejemplo). Entonces nuestras frases podrían reescribirse como:
[0, 1, 2, 3, 4]
[5, 1, 2, 3, 6]
Ahora imagine que queremos entrenar una red cuya primera capa es una capa de inserción. En este caso, deberíamos inicializarlo de la siguiente manera:
Embedding(7, 2, input_length=5)
El primer argumento (7) es el número de palabras distintas en el conjunto de entrenamiento. El segundo argumento (2) indica el tamaño de los vectores de incrustación. El argumento input_length, por supuesto, determina el tamaño de cada secuencia de entrada.
Una vez que la red ha sido entrenada, podemos obtener los pesos de la capa de incrustación, que en este caso será de tamaño (7, 2) y puede considerarse como la tabla utilizada para asignar enteros a los vectores de incrustación:
+------------+------------+
| 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] |
+------------+------------+
Entonces, de acuerdo con estas incrustaciones, nuestra segunda frase de entrenamiento se representará como:
[[0.7, 1.7], [0.1, 4.2], [1.0, 3.1], [0.3, 2.1], [4.1, 2.0]]
Puede parecer contradictorio al principio, pero los motores de diferenciación automática subyacentes (por ejemplo, Tensorflow o Theano) logran optimizar estos vectores asociados a cada entero de entrada como cualquier otro parámetro de su modelo. También es interesante utilizar las incrustaciones aprendidas por otros métodos / personas en diferentes dominios (consulte https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html ) como hecho en [1].
[1] López-Sánchez, D., Herrero, JR, Arrieta, AG y Corchado, JM Hibridación de aprendizaje métrico y razonamiento basado en casos para la detección de clickbait adaptable. Inteligencia Aplicada, 1-16.