In effetti, i vettori di output non vengono calcolati dall'input utilizzando alcuna operazione matematica. Al contrario, ogni intero di input viene utilizzato come indice per accedere a una tabella che contiene tutti i vettori possibili. Questo è il motivo per cui è necessario specificare la dimensione del vocabolario come primo argomento (in modo che la tabella possa essere inizializzata).
L'applicazione più comune di questo livello è per l'elaborazione del testo. Vediamo un semplice esempio. Il nostro set di allenamento è composto solo da due frasi:
Spero di vedervi presto
Che bello rivederti
Quindi possiamo codificare queste frasi assegnando a ogni parola un numero intero univoco (per esempio, per ordine di apparizione nel nostro set di dati di addestramento). Quindi le nostre frasi potrebbero essere riscritte come:
[0, 1, 2, 3, 4]
[5, 1, 2, 3, 6]
Ora immagina di voler formare una rete il cui primo livello è un livello di incorporamento. In questo caso, dovremmo inizializzarlo come segue:
Embedding(7, 2, input_length=5)
Il primo argomento (7) è il numero di parole distinte nel set di addestramento. Il secondo argomento (2) indica la dimensione dei vettori di incorporamento. L' argumet input_length, ovviamente, determina la dimensione di ciascuna sequenza di input.
Una volta che la rete è stata addestrata, possiamo ottenere i pesi del livello di incorporamento, che in questo caso sarà di dimensioni (7, 2) e può essere pensato come la tabella utilizzata per mappare numeri interi a vettori di incorporamento:
+------------+------------+
| 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] |
+------------+------------+
Quindi, secondo questi matrimoni, la nostra seconda frase di addestramento sarà rappresentata come:
[[0.7, 1.7], [0.1, 4.2], [1.0, 3.1], [0.3, 2.1], [4.1, 2.0]]
All'inizio potrebbe sembrare contro intuitivo, ma i motori di differenziazione automatica sottostanti (ad esempio, Tensorflow o Theano) riescono a ottimizzare questi vettori associati a ciascun numero intero di input proprio come qualsiasi altro parametro del modello. È anche interessante utilizzare gli incorporamenti appresi da altri metodi / persone in diversi domini (vedi https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html ) come fatto in [1].
[1] López-Sánchez, D., Herrero, JR, Arrieta, AG e Corchado, JM Hybridizing metric learning e ragionamento basato su casi per il rilevamento adattabile di clickbait. Intelligenza applicata, 1-16.