Incorporamenti: ottenimento degli incorporamenti

Questa sezione illustra diversi modi per ottenere gli embedding, nonché come trasformare gli embedding statici in embedding contestuali.

Tecniche di riduzione della dimensionalità

Esistono molte tecniche matematiche che acquisiscono le strutture importanti di uno spazio ad alta dimensione in uno spazio a bassa dimensione. In teoria, qualsiasi di queste tecniche può essere utilizzata per creare un embedding per un sistema di machine learning.

Ad esempio, l'analisi delle componenti principali (PCA) è stata utilizzata per creare embedding di parole. Dato un insieme di istanze come i vettori di bag of words, l'PCA tenta di trovare dimensioni altamente correlate che possono essere raggruppate in una singola dimensione.

Addestramento di un embedding all'interno di una rete neurale

Puoi creare un embedding durante l'addestramento di una rete neurale per la tua attività target. Questo approccio ti consente di ottenere un'evidenziazione ben personalizzata per il tuo sistema specifico, ma potrebbe richiedere più tempo dell'addestramento dell'evidenziazione separatamente.

In generale, puoi creare nella rete neurale uno strato nascosto di dimensioni d, indicato 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 livello di embedding può essere combinato con qualsiasi altra funzionalità e livello nascosto. Come in qualsiasi rete neurale profonda, i parametri verranno ottimizzati durante l'addestramento per ridurre al minimo la perdita sui nodi dello strato di output della rete.

Tornando al nostro esempio di consiglio alimentare, il nostro obiettivo è predire i nuovi piatti che piaceranno a un utente in base ai suoi piatti preferiti attuali. Innanzitutto, possiamo compilare dati aggiuntivi sui cinque cibi preferiti dei nostri utenti. Poi possiamo modellare questa attività come un problema di apprendimento supervisionato. Abbiamo impostato quattro di questi cinque alimenti principali come dati delle funzionalità e poi abbiamo messo da parte in modo casuale il quinto alimento come etichetta positiva che il nostro modello mira a prevedere, ottimizzando le sue previsioni utilizzando una perdita softmax.

Durante l'addestramento, il modello di rete neurale apprende i pesi ottimali per i nodi del primo livello nascosto, che funge da livello di embedding. Ad esempio, se il modello contiene tre nodi nel primo livello nascosto, potrebbe determinare che le tre dimensioni più pertinenti degli alimenti sono sandwich, dessert e liquido. La Figura 12 mostra il valore di input codificato in one-hot per "hot dog" trasformato in un vettore tridimensionale.

Figura 12. Rete neurale per la codifica one-hot di hot dog. Il primo livello è un livello di input con 5 nodi, ciascuno annotato con un'icona del cibo che rappresenta (borscht, hot dog, insalata e così via). Questi nodi hanno rispettivamente i valori [0, 1, 0, ..., 0], che rappresentano la codifica one-hot di "hot dog". Il livello di input è collegato a un livello di embedding con 3 nodi, i cui nodi hanno rispettivamente i valori 2,98, -0, 75 e 0. Lo strato di embedding è collegato a uno strato nascosto di 5 nodi, che a sua volta è collegato a uno strato di output di 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 nel vettore di embedding tridimensionale [2.98, -0.75, 0].

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

Incorporamenti contestuali

Un limite dei vettori di embedding statici word2vec è che le parole possono assumere significati diversi in contesti diversi. "Sì" significa una cosa da solo, ma il contrario nella frase "Sì, certo". "Post" può significare "posta", "mettere nella posta", "supporto per orecchini", "indicatore alla fine di una corsa di cavalli", "postproduzione", "pilastro", "affiggere un avviso", "mettere una guardia o un soldato" o "dopo", tra le altre possibilità.

Tuttavia, con gli embedding statici, ogni parola è rappresentata da un singolo punto nello spazio vettoriale, anche se può avere vari significati. Nell'ultimo esercizio, hai scoperto le limitazioni degli embedding statici per la parola arancia,che può indicare un colore o un tipo di frutto. Con un solo embedding statico, arancia sarà sempre più vicino ad altri colori rispetto a succo quando viene addestrato sul set di dati word2vec.

Per risolvere questo problema sono stati sviluppati gli embedding contestuali. Gli embedding contestuali consentono di rappresentare una parola con più embedding che incorporano informazioni sulle parole circostanti e sulla parola stessa. Arancia avrà un embedding diverso per ogni frase distinta contenente la parola nel set di dati.

Alcuni metodi per creare embedding contestuali, come ELMo, prendono l'embedding statico di un esempio, ad esempio il vettore word2vec per una parola in una frase, e lo trasformano con una funzione che incorpora le informazioni sulle parole che lo circondano. Viene prodotto un embedding contestuale.

Fai clic qui per informazioni dettagliate sugli embedding contestuali

  • In particolare, per i modelli ELMo, l'embedding statico viene aggregato con gli embedding presi da altri livelli, che codificano le letture della frase da davanti a dietro e da dietro a davanti.
  • I modelli BERT mascherano parte della sequenza che il modello prende come input.
  • I modelli di transformer utilizzano un livello di self-attention per valutare la pertinenza delle altre parole in una sequenza rispetto a ogni singola parola. Aggiungono inoltre la colonna pertinente di una matrice di embedding di posizione (vedi codifica di posizione) a ogni embedding di token appreso in precedenza, elemento per elemento, per produrre l'embedding di input che viene inviato al resto del modello per l'inferenza. Questo embedding di input, unico per ogni sequenza di testo distinta, è un embedding contestuale.

Sebbene i modelli descritti sopra siano modelli linguistici, gli embedding contestuali sono utili in altre attività di generazione, come le immagini. Un'evidenziazione dei valori RGB dei pixel in una foto di un cavallo fornisce più informazioni al modello se combinata con una matrice di posizione che rappresenta ogni pixel e con una codifica dei pixel vicini, creando rappresentazioni contestuali, rispetto alle rappresentazioni statiche originali dei soli valori RGB.