Embedding: creazione di embedding

Questa sezione illustra diversi metodi per creare embedding e spiega come trasformare gli embedding statici in embedding contestuali.

Tecniche di riduzione della dimensionalità

Esistono molte tecniche matematiche che permettono di rappresentare le strutture importanti di uno spazio ad alta dimensionalità in uno spazio a bassa dimensionalità. In teoria, tutte queste tecniche possono essere usate per creare un embedding per un sistema di machine learning.

Ad esempio, l'analisi delle componenti principali è stata usata per creare word embedding. Dato un insieme di istanze come i vettori bag of words, l'analisi delle componenti principali prova a trovare dimensioni altamente correlate che possano essere compresse in un'unica dimensione.

Addestramento di un embedding nel contesto di una rete neurale

Puoi creare un embedding mentre addestri una rete neurale per la tua attività target. Questo approccio ti consente di avere un embedding ottimizzato per il tuo sistema specifico, ma potrebbe richiedere più tempo rispetto all'addestramento separato dell'embedding.

In generale, puoi creare uno strato nascosto di dimensione d nella tua rete neurale, designato come strato di embedding, dove d rappresenta sia il numero di nodi nello strato nascosto sia il numero di dimensioni nello spazio di embedding. Questo strato di embedding può essere combinato con qualsiasi altra caratteristica e altro strato nascosto. Come in qualsiasi rete neurale profonda, i parametri saranno ottimizzati durante l'addestramento per ridurre al minimo le perdite sui nodi nello strato di output della rete.

Tornando al nostro esempio di consigli gastronomici, il nostro obiettivo è quello di prevedere quali nuovi piatti piaceranno a un utente in base ai suoi piatti preferiti. Per prima cosa, possiamo raccogliere dati aggiuntivi sui cinque cibi preferiti dai nostri utenti. Quindi, possiamo modellare questa attività come un problema di apprendimento supervisionato. Impostiamo quattro di questi cinque cibi preferiti come dati della caratteristica, quindi selezioniamo casualmente il quinto cibo come etichetta positiva che il nostro modello cercherà di prevedere, ottimizzando le previsioni del modello mediante l'uso di una perdita softmax.

Durante l'addestramento, il modello di rete neurale apprenderà i pesi ottimali per i nodi nel primo strato nascosto, che funge da strato di embedding. Ad esempio, se il modello contiene tre nodi nel primo strato nascosto, potrebbe determinare che le tre dimensioni più rilevanti dei cibi di base sono la paninosità, la dessertosità e la liquidità. La Figura 12 mostra il valore di input con codifica one-hot per "hot dog" trasformato in un vettore tridimensionale

Figure 12. Rete neurale per la codifica one-hot dell'hot dog. Il primo strato è uno
    strato di input con 5 nodi, ciascuno annotato con un'icona del cibo
    rappresentato (boršč, hot dog, insalata, … e kebab). Questi nodi hanno,
    rispettivamente, i valori [0, 1, 0, …, 0] e rappresentano la codifica
    one-hot di "hot dog". Lo strato di input è connesso a uno strato di embedding
    a tre nodi, i cui nodi hanno, rispettivamente, i valori 2,98, -0,75 e 0. Lo
    strato di embedding è connesso a uno strato nascosto a 5 nodi, che è quindi
    connesso a uno strato di output a 5 nodi.
Figura 12. Una codifica one-hot di hot dog fornita come input a una rete neurale profonda. Uno strato di embedding traduce la codifica one-hot in un vettore di embedding tridimensionale [2.98, -0.75, 0].

Durante l'addestramento, i pesi dello strato di embedding saranno ottimizzati in modo che i vettori di embedding per esempi simili siano più vicini tra loro. Come accennato in precedenza, è improbabile che le dimensioni scelte da un modello reale per i propri embedding siano intuitive o comprensibili come in questo esempio.

Embedding contestuali

Un limite dei vettori di embedding statici word2vec è che le parole possono significare cose diverse a seconda del contesto. La parola "certo" ha un significato se usata da sola, ma significa il contrario nella frase "certo, come no". "Piano" può significare "pianoforte", "programma per raggiungere uno scopo", "superficie piana orizzontale", "ognuno dei livelli di un palazzo", "punto di vista", "planimetria", "privo di ostacoli", ma anche "lentamente" o "a bassa voce", tra le altre possibilità.

Tuttavia, con gli embedding statici, ogni parola è rappresentata da un singolo punto nello spazio vettoriale, anche se può avere significati diversi. Nell'ultimo esercizio, hai scoperto i limiti degli embedding statici per la parola rosa, che può riferirsi sia a un colore sia a un fiore. Con un solo embedding statico, la parola rosa sarà sempre più vicina ad altri colori che alla parola spina se l'addestramento avviene sul set di dati word2vec.

Gli embedding contestuali sono stati sviluppati per superare questa limitazione. Una parola può essere rappresentata da più embedding contestuali che incorporano informazioni sulle parole circostanti e sulla parola stessa. La parola rosa avrebbe un embedding diverso per ogni singola frase in cui è presente la parola nel set di dati.

Alcuni metodi per creare embedding contestuali, ad esempio ELMo, usano l'embedding statico di un esempio, come il vettore word2vec di una parola in una frase, e lo trasformano tramite una funzione che incorpora le informazioni sulle parole vicine. In questo modo viene creato un embedding contestuale.

Fai clic qui per maggiori dettagli sugli embedding contestuali

  • Nello specifico, per i modelli ELMo, l'embedding statico viene aggregato con embedding presi da altri strati, che codificano le letture di una frase dall'inizio alla fine e dalla fine all'inizio.
  • I modelli BERT mascherano parte della sequenza che il modello usa come input.
  • I modelli transformer usano uno strato di auto-attenzione per pesare la pertinenza delle altre parole in una sequenza rispetto a ciascuna singola parola. Inoltre, aggiungono la colonna pertinente da una matrice di embedding posizionale (vedi codifica posizionale) a ciascun embedding di token appreso precedentemente, elemento per elemento, per creare l'embedding di input che viene immesso nel resto del modello per l'inferenza. Questo embedding di input, unico per ciascuna sequenza testuale distinta, è un embedding contestuale.

Sebbene i modelli descritti sopra siano modelli linguistici, gli embedding contestuali sono utili in altre attività generative, ad esempio per le immagini. L'embedding dei valori RGB dei pixel nella foto di un cavallo offre più informazioni al modello se combinato con una matrice posizionale che rappresenta ciascun pixel e una porzione della codifica dei pixel adiacenti, creando embedding contestuali, rispetto agli embedding statici originali dei soli valori RGB.