De fato, os vetores de saída não são calculados a partir da entrada usando nenhuma operação matemática. Em vez disso, cada número inteiro de entrada é usado como índice para acessar uma tabela que contém todos os vetores possíveis. Essa é a razão pela qual você precisa especificar o tamanho do vocabulário como o primeiro argumento (para que a tabela possa ser inicializada).
A aplicação mais comum dessa camada é para processamento de texto. Vamos ver um exemplo simples. Nosso conjunto de treinamento consiste apenas de duas frases:
Espero vê-lo em breve
Prazer em vê-lo novamente
Assim, podemos codificar essas frases atribuindo a cada palavra um número inteiro único (por ordem de aparência no nosso conjunto de dados de treinamento, por exemplo). Em seguida, nossas frases podem ser reescritas como:
[0, 1, 2, 3, 4]
[5, 1, 2, 3, 6]
Agora imagine que queremos treinar uma rede cuja primeira camada seja uma camada de incorporação. Nesse caso, devemos inicializá-lo da seguinte maneira:
Embedding(7, 2, input_length=5)
O primeiro argumento (7) é o número de palavras distintas no conjunto de treinamento. O segundo argumento (2) indica o tamanho dos vetores de incorporação. O argumento input_length, é claro, determina o tamanho de cada sequência de entrada.
Depois que a rede for treinada, podemos obter os pesos da camada de incorporação, que neste caso terá tamanho (7, 2) e pode ser pensada como a tabela usada para mapear números inteiros para vetores de incorporação:
+------------+------------+
| 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] |
+------------+------------+
Portanto, de acordo com esses embeddings, nossa segunda frase de treinamento será representada como:
[[0.7, 1.7], [0.1, 4.2], [1.0, 3.1], [0.3, 2.1], [4.1, 2.0]]
Pode parecer contra-intuitivo no começo, mas os mecanismos de diferenciação automática subjacentes (por exemplo, Tensorflow ou Theano) conseguem otimizar esses vetores associados a cada número inteiro de entrada, como qualquer outro parâmetro do seu modelo. Também é interessante usar os embeddings aprendidos por outros métodos / pessoas em diferentes domínios (consulte https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html ) como feito em [1].
[1] López-Sánchez, D., Herrero, JR, Arrieta, AG e Corchado, JM Hibridizando o aprendizado métrico e o raciocínio baseado em casos para detecção de clickbait adaptável. Inteligência aplicada, 1-16.