Word embedding e il modello Skip-gram

Word embedding e il modello Skip-gram

Condividi con i tuoi amici...

Il modello Skip-gram è una tecnica di apprendimento automatico per l’elaborazione del linguaggio naturale (NLP) utilizzata per imparare le rappresentazioni vettoriali delle parole in un grande corpus di testo. Il suo obiettivo è quello di trovare rappresentazioni tali per cui parole con contesti simili abbiano rappresentazioni vettoriali vicine in uno spazio multidimensionale. Partendo dalla rappresentazione vettoriale delle parole e dal concetto di distanza (o similarità) tramite il prodotto scalare w⋅c, possiamo usare la regressione logistica per trovare la probabilità condizionata P(+∣w,c), ovvero la probabilità che una coppia di parole (parola-target w e parola-contesto c) appaia insieme nel testo.

Approfondiamo ognuno degli aspetti appena anticipati

Rappresentazione vettoriale delle parole

La rappresentazione vettoriale delle parole, o word embedding, è una tecnica che trasforma le parole in vettori di numeri reali in uno spazio ad alta dimensionalità. Questa rappresentazione permette di catturare relazioni semantiche e sintattiche tra le parole, poiché parole con significati simili o che appaiono in contesti simili saranno rappresentate da vettori vicini nello spazio vettoriale.

La similarità tra due parole nel modello Skip-gram è comunemente misurata tramite il prodotto scalare dei loro vettori. Un valore elevato del prodotto scalare w⋅c indica una forte similarità (o vicinanza) tra la parola-target w e la parola-contesto c, suggerendo che queste due parole tendono ad apparire insieme nei contesti.

Il prodotto scalare e la similarità del coseno sono due misure comunemente utilizzate per valutare la similarità tra vettori in vari contesti, inclusa l’analisi semantica nel campo del Natural Language Processing (NLP). Nel contesto dei modelli di word embedding come Skip-gram o CBOW (Continuous Bag of Words), queste misure aiutano a determinare quanto due parole siano semanticamente simili basandosi sui loro vettori di embedding.

Il prodotto scalare

Il prodotto scalare (o dot product) tra due vettori è una misura algebrica che restituisce un singolo numero, calcolato come la somma dei prodotti dei corrispondenti componenti dei vettori. Data una parola-target w e una parola-contesto c, rappresentati dai vettori w e c, il loro prodotto scalare è dato da:

Il prodotto scalare misura il grado di allineamento tra due vettori. Un valore elevato indica che i vettori sono direzionalmente simili, suggerendo una forte correlazione o similarità semantica tra le parole che rappresentano. Tuttavia, il prodotto scalare dipende anche dalle lunghezze dei vettori e può essere influenzato da vettori di grande magnitudine.

La similarità del coseno misura l’angolo tra due vettori nello spazio vettoriale, fornendo un indice che varia da -1 a 1. A differenza del prodotto scalare, la similarità del coseno è normalizzata rispetto alle lunghezze dei vettori, rendendola indipendente dalla lunghezza dei vettori e concentrandosi unicamente sulla loro direzione. La formula della similarità del coseno tra due vettori w e c è data da:

Un valore di similarità del coseno vicino a 1 indica che i due vettori puntano nella stessa direzione (alta similarità), mentre un valore vicino a -1 indica che puntano in direzioni opposte (alta dissimilarità). Un valore vicino a 0 suggerisce che i vettori sono ortogonali (indipendenti o non correlati).

Nel NLP, queste misure sono fondamentali per valutare la similarità semantica tra parole. Dato un insieme di word embeddings, si possono usare il prodotto scalare e la similarità del coseno per identificare parole con significati simili o relazionati, basandosi sulla premessa che parole con contesti simili dovrebbero avere vettori di embedding simili. Per esempio, se i vettori di embedding per “gatto” e “felino” hanno una alta similarità del coseno, ciò indica che queste parole hanno significati simili o sono usate in contesti simili, riflettendo la loro vicinanza semantica nel linguaggio reale. La scelta tra prodotto scalare e similarità del coseno dipende dall’obiettivo specifico e dal contesto di utilizzo. La similarità del coseno è spesso preferita per confrontare la direzionalità o l’orientamento dei vettori in modo normalizzato, particolarmente utile in applicazioni di ricerca semantica e clustering di parole basato su significato.

Differenze rispetto ai vettori riga delle matrici termine-documento o termine-termine

Abbiamo già mostrato come le parole possono essere raprresentate come vettori riga di una matrice termine-documento o termine-termine: Il significato delle parole con i modelli NLP

La differenza fondamentale tra le componenti di un vettore in una matrice termine-documento o termine-termine e le componenti di un vettore nel modello Skip-gram risiede nella natura e nell’interpretazione di queste rappresentazioni vettoriali.

In una matrice termine-documento, ogni riga rappresenta una parola (o termine) e ogni colonna rappresenta un documento. Le componenti di un vettore (riga) in questa matrice indicano la frequenza o il peso (ad esempio, TF-IDF) della parola corrispondente in ciascun documento. Analogamente, in una matrice termine-termine, ogni riga rappresenta una parola, e ogni colonna rappresenta un’altra parola; le componenti di un vettore (riga) indicano la frequenza o la forza della co-occorrenza (quante volte appaiono insieme) tra la parola di riga e quella di colonna nel corpus.

Le componenti di questi vettori sono quindi interpretate come misure di presenza, frequenza o rilevanza di un termine in relazione a documenti o altri termini. Questi vettori sono sparsi, nel senso che contengono molte componenti zero, soprattutto in corpora grandi con un ampio vocabolario, riflettendo la rarità delle parole in specifici documenti o il loro limitato contesto di co-occorrenza.

Nel modello Skip-gram, ogni parola del vocabolario è rappresentata da un vettore denso in uno spazio continuo ad alta dimensionalità. Le componenti di questo vettore non hanno una interpretazione diretta come frequenze o presenze; invece, rappresentano caratteristiche astratte e latenti che catturano aspetti semantici e sintattici della parola nel contesto del corpus su cui il modello è stato addestrato.

Le componenti di un vettore nel modello Skip-gram sono ottimizzate durante il processo di addestramento in modo da massimizzare la probabilità di predire le parole del contesto dato un termine target. Pertanto, le dimensioni di questi vettori catturano relazioni semantiche e sintattiche sottili e complesse, riflettendo come parole con significati o usi simili siano vicine nello spazio vettoriale. Questi vettori sono densi, il che significa che ogni componente contribuisce a definire il posizionamento semantico della parola nello spazio degli embeddings.

Uso della regressione logistica per trovare P(+∣w,c)

Per comprendere correttamente quanto segue consigliamo di leggere l’articolo
La regressione logistica

Nel modello Skip-gram, la probabilità P(+∣w,c) rappresenta la probabilità che la coppia di parole (parola-target w e parola-contesto c) sia una coppia positiva, ovvero che le due parole appaiano effettivamente insieme nel contesto nel corpus di addestramento. Per modellare questa probabilità, si utilizza la regressione logistica, dove il prodotto scalare w⋅c serve come input alla funzione logistica (o sigmoide), trasformando il valore del prodotto scalare in una probabilità compresa tra 0 e 1.

L’obiettivo dell’allenamento del modello Skip-gram è quello di massimizzare questa probabilità per le coppie di parole positive (che effettivamente appaiono insieme nei contesti) e minimizzarla per le coppie di parole negative (selezionate casualmente dal vocabolario e che non appaiono insieme), per mezzo di un processo noto come Negative Sampling.

Nel modello Skip-gram le componenti del vettore w (e analogamente per c) sono i pesi che vengono determinati nel processo di allenamento del modello di regressione logistica. Nel contesto dei modelli di word embedding come Skip-gram, questi pesi rappresentano la “posizione” della parola nello spazio vettoriale multidimensionale. L’obiettivo dell’apprendimento è ottimizzare questi pesi in modo tale che la funzione di probabilità logistica P(+∣w,c) sia massimizzata per le coppie di parole che appaiono insieme (coppie positive) e minimizzata per le coppie di parole che non sono strettamente correlate (coppie negative, nel contesto del Negative Sampling).

Durante l’addestramento:

I vettori w e c per ogni parola nel vocabolario vengono inizializzati con valori casuali o in base a qualche euristica.

Utilizzando un set di esempi di addestramento (coppie di parole target-contesto estratte dal corpus di testo), il modello aggiusta iterativamente i pesi (i.e., le componenti dei vettori) per massimizzare la log-likelihood delle coppie positive osservate e minimizzare quella delle coppie negative selezionate attraverso il Negative Sampling.

Per ogni esempio di addestramento, il gradiente della log-likelihood rispetto a ciascun peso viene calcolato, e i pesi sono aggiornati in direzione che massimizza la probabilità di coppie positive e minimizza quella delle coppie negative. Questo aggiornamento è tipicamente effettuato mediante algoritmi di ottimizzazione come la discesa del gradiente (o varianti di essa).

Alla fine del processo di allenamento, i vettori di pesi w e c rappresentano gli embedding delle parole. Questi vettori catturano le relazioni semantiche e sintattiche tra le parole, riflettendo come parole con significati o contesti simili siano vicine nello spazio vettoriale.

Quindi, nel contesto del modello Skip-gram, i pesi nei vettori w e c sono direttamente correlati alla qualità degli embedding di parole generati e alla capacità del modello di catturare relazioni significative tra le parole nel corpus di addestramento.

Per illustrare le formule matematiche del modello Skip-gram e il processo di ottimizzazione tramite un esempio, cominciamo con le basi e poi applichiamo queste concetti a un esempio specifico.

La funzione obiettivo per un singolo esempio positivo nel modello Skip-gram, utilizzando la regressione logistica, è la log-likelihood della probabilità condizionale P(+∣w,c), che rappresenta la probabilità che c sia nel contesto di w. La probabilità P(+∣w,c) è calcolata tramite la funzione sigmoide applicata al prodotto scalare dei vettori w e c:

L’obiettivo è massimizzare la log-likelihood delle coppie positive (effettivamente osservate nel corpus) e minimizzare quella delle coppie negative (generate casualmente). La funzione da massimizzare (o, equivalentemente, la funzione da minimizzare) è la negative log-likelihood (NLL):

La funzione obiettivo complessiva da minimizzare durante l’allenamento del modello Skip-gram, considerando sia esempi positivi che negativi, è data dalla somma delle negative log-likelihood (NLL) su tutte le coppie positive e negative selezionate:

Schema del modello

Il cuore del modello Skip-gram è la trasformazione di una rappresentazione sparsa di parole (one-hot) in rappresentazioni dense (embeddings) che riflettono le proprietà semantiche e sintattiche delle parole basate sui loro contesti di utilizzo.

Vediamolo in dettaglio

  1. Input Layer

Prima di addestrare il modello, si costruisce un vocabolario delle parole uniche presenti nel corpus di testo.

Ogni parola del vocabolario è rappresentata come un vettore one-hot nell’input layer, dove il vettore ha la lunghezza uguale al numero di parole nel vocabolario. Il vettore è tutto zero tranne che per un “1” nella posizione che corrisponde all’indice della parola nel vocabolario.

In pratica, il numero di nodi in questo layer è uguale al numero di parole uniche nel vocabolario. Ogni parola del vocabolario è rappresentata da un unico vettore one-hot, dove un solo elemento è impostato a 1 (indicando la parola corrente), e tutti gli altri elementi sono impostati a 0.

w1=[1,0,0,0…,0]
w2=[0,1,0,0…,0]
w3=[0,0,1,0…,0]

e così via

  1. Hidden Layer

L’hidden layer ha una dimensione predefinita che determina la dimensione del vettore di embedding per ogni parola. Questa dimensione è molto inferiore alla dimensione del vocabolario.

L’input one-hot viene mappato tramite una moltiplicazione con una matrice dei pesi W. Questo step effettivamente seleziona la “riga” dalla matrice dei pesi che corrisponde all’embedding della parola di input.

Questo layer agisce più come una funzione di trasformazione che come un tradizionale “layer” in una rete neurale con attivazioni e pesi. Non ci sono funzioni di attivazione applicate in questo layer nel modello Skip-gram. Il numero di nodi in questo layer corrisponde alle dimensioni dell’embedding che si desidera ottenere per ogni parola. La funzione principale di questo layer è di mappare il vettore one-hot dell’input in un vettore di embedding denso tramite la moltiplicazione con la matrice dei pesi W. Il numero di nodi (o neuroni) in questo layer è pari alle dimensioni dell’embedding.

il numero di righe di W corrisponde al numero di parole nel vocabolario, mentre il numero di colonne corrisponde al numero di dimensioni dell’embedding desiderato. Questa configurazione consente di trasformare un vettore one-hot di input, che rappresenta una parola specifica del vocabolario, in un vettore di embedding denso.

Ogni riga nella matrice W rappresenta l’embedding preliminare (ancora non ottimizzato fino al termine dell’addestramento) di una parola nel vocabolario. Quindi, se il vocabolario contiene, ad esempio, 10.000 parole, la matrice W avrà 10.000 righe.

Il numero di colonne in questa matrice è uguale al numero di dimensioni dell’embedding scelto per il modello. Ad esempio, se si desidera che ogni parola sia rappresentata da un vettore di embedding di dimensione 300, allora la matrice W avrà 300 colonne.

Quando una parola di input viene fornita al modello come vettore one-hot, questo vettore viene moltiplicato per la matrice W, selezionando effettivamente la riga corrispondente all’indice “1” nel vettore one-hot. Il risultato di questa moltiplicazione è un vettore di embedding di dimensione ridotta che rappresenta la parola di input nello spazio semantico del modello.

Consideriamo un vocabolario di dimensione V=10.000 parole e desideriamo rappresentare ogni parola con un vettore di embedding di dimensione D=300. In questo caso, la matrice dei pesi W avrà una dimensione di 10.000×300, con 10.000 righe per rappresentare ogni parola del vocabolario e 300 colonne per rappresentare le componenti dell’embedding.

Questo meccanismo permette al modello Skip-gram di apprendere rappresentazioni vettoriali dense e significative per ogni parola nel vocabolario, catturando le relazioni semantiche e sintattiche tra le parole basate sui loro contesti di utilizzo nel corpus di addestramento.

  1. Output Layer

L’output dello hidden layer viene poi moltiplicato per una seconda matrice di pesi W′ e passato attraverso una funzione softmax nell’output layer. La funzione softmax converte i punteggi in probabilità per ogni parola nel vocabolario di essere nel contesto della parola di input.

Quando una parola-target è rappresentata dal suo vettore di embedding (w1,w2,w3,…,wD) ottenuto dalla matrice W, questo vettore viene poi utilizzato per calcolare le probabilità che altre parole compaiano nel suo contesto. Il processo avviene attraverso un’operazione che coinvolge la seconda matrice dei pesi W′

Per ogni parola del vocabolario, rappresentata nella matrice W′ come un vettore colonna (w1′,w2′,w3′,…,wD′), si calcola il prodotto scalare tra il vettore di embedding della parola target e questo vettore colonna. Il risultato di questo prodotto scalare è un singolo valore scalare che rappresenta il punteggio grezzo (non normalizzato) per la corrispondente parola di contesto. Questo punteggio riflette quanto sia probabile che la parola di contesto appaia vicino alla parola target nel testo.

punteggio=(w1⋅w1′)+(w2⋅w2′)+…+(wD⋅wD′)

Dove D è la dimensione dell’embedding. Questo punteggio viene calcolato per ogni parola nel vocabolario rispetto alla parola target.

Successivamente, questi punteggi vengono inseriti nella funzione softmax per convertirli in probabilità. La funzione softmax assicura che tutti i punteggi vengano normalizzati in modo che la loro somma sia uguale a 1, rendendo l’output interpretabile come una distribuzione di probabilità su tutte le parole nel vocabolario. La probabilità che una specifica parola di contesto appaia data una parola target è quindi calcolata come:

La dimensione dell’output layer è uguale alla dimensione del vocabolario, con ogni neurone rappresentante la probabilità che una specifica parola del vocabolario appaia nel contesto della parola di input.

Si può usare la funzione sigmoidea

Il Negative Sampling è una tecnica introdotta per ridurre la complessità computazionale associata all’uso della softmax su vocabolari ampi. Invece di predire la presenza di ogni parola del vocabolario nel contesto della parola target (come fa la softmax), il Negative Sampling prevede se una specifica parola di contesto è “positiva” (effettivamente nel contesto) o “negativa” (non nel contesto, scelta casualmente dal vocabolario) per la parola target. In questo caso, si utilizza la funzione sigmoide per modellare questa probabilità binaria.

Con il Negative Sampling, l’approccio all’output cambia significativamente, focalizzandosi su un subset di parole anziché sull’intero vocabolario.

Note sulla matrice W’

La seconda matrice dei pesi W′, serve nel modello Skip-gram per collegare l’hidden layer all’output layer. Questa matrice gioca un ruolo cruciale nella fase di predizione del contesto di una data parola-target, permettendo al modello di generare una distribuzione di probabilità su tutto il vocabolario per identificare le parole di contesto più probabili.

Se il vocabolario ha dimensione V (numero di parole uniche) e le dimensioni dell’embedding sono D, allora W′ avrà dimensione D×V. Questo significa che inversamente alla matrice W, W’ ha tante righe quante sono le componenti dell’embedding e tante colonne quante sono le parole nel vocabolario.

Dopo che una parola-target è stata trasformata nel suo vettore di embedding tramite la matrice W, questo vettore viene poi moltiplicato per W′ per produrre un vettore di output di dimensione V. Questo vettore di output rappresenta, per ogni parola nel vocabolario, un punteggio (prima dell’applicazione della softmax o della sigmoide) che indica quanto sia probabile che quella parola compaia nel contesto della parola-target.

  1. Training

Durante l’addestramento, il modello viene allenato su coppie di parole target e parole di contesto estratte dal corpus di testo, cercando di massimizzare la probabilità delle parole di contesto date le parole target.

Solitamente si utilizza la negative log-likelihood come funzione obiettivo, che il modello cerca di minimizzare attraverso l’addestramento.

Tecniche come stochastic gradient descent (SGD) sono usate per aggiustare i pesi delle matrici W e W′ in modo da ridurre l’errore predittivo del modello.

Durante il processo di addestramento, il modello utilizza la funzione di perdita (ad esempio, la negative log-likelihood nel caso della softmax, o una funzione di perdita binaria nel caso del Negative Sampling) per aggiustare i pesi in W e W′ in modo da ridurre l’errore tra le predizioni del modello e i veri contesti delle parole. Ciò significa ottimizzare W e W′ affinché il modello possa prevedere accuratamente le parole di contesto date le parole-target.

Data una distribuzione di probabilità P sulle parole del vocabolario prodotta dalla softmax e una distribuzione di probabilità target Q, che è tipicamente rappresentata come una distribuzione one-hot delle parole di contesto reali, la NLL è definita come:

Nel caso del modello Skip-gram, se stiamo considerando una specifica parola di contesto come la classe corretta, la NLL si semplifica poiché tutti i termini dove Q(i)=0 (per le parole non corrette) non contribuiscono alla somma. Quindi, se c è l’indice della parola di contesto corretta, la NLL diventa:

Questa espressione misura la sorpresa del modello nel prevedere la parola di contesto corretta: una NLL bassa indica che il modello assegna una alta probabilità alla parola di contesto corretta, mentre una NLL alta indica che il modello è stato “sorpreso” dalla parola di contesto corretta, assegnandole una bassa probabilità.

Il training del modello Skip-gram mira, mediante l’aggiornamento delle matrici W e W’, a minimizzare la NLL su tutte le parole di contesto per tutte le parole target nel corpus di addestramento, migliorando così la capacità del modello di prevedere accuratamente le parole di contesto.

Per maggiori informazioni sul principio su cui si basa la cross-entropy leggi l’articolo
Cross-entropy: la funzione che permette ai modelli di AI di migliorarsi.

Importante

Per ogni Esecuzione Singola:

Input: Un singolo vettore one-hot di dimensione V che rappresenta una specifica parola nel vocabolario.
Trasformazione con W: Questo vettore one-hot viene trasformato in un vettore di embedding di dimensione D attraverso la matrice di pesi W, che ha dimensione V×D.
Risultato per l’Hidden Layer: Un singolo vettore di dimensione D, che è l’embedding della parola di input.

Per l’Intero Vocabolario:

Input Complessivo: V vettori one-hot distinti, uno per ogni parola nel vocabolario, ciascuno dei quali sarà trasformato individualmente.
Trasformazione con W: Ogni vettore one-hot seleziona la sua corrispondente “riga” (o vettore di embedding) dalla matrice W.
Risultato Complessivo per l’Hidden Layer: V vettori di embedding, ognuno di dimensione D, uno per ogni parola nel vocabolario. Tuttavia, in un dato momento di elaborazione, solo uno di questi vettori di embedding è attivo e passa attraverso la rete, a meno che non si stiano processando batch di parole.

Quindi, mentre ogni parola nel vocabolario (tutte V parole) ha un vettore di embedding associato in W, solo un vettore di embedding (di dimensione D) viene generato e utilizzato per volta durante l’addestramento del modello per una specifica parola di input. L’output dell’hidden layer per un dato input è quindi un singolo vettore di dimensione D.

  1. Word Embeddings

Dopo l’addestramento, i vettori di embedding per ogni parola possono essere estratti dalla matrice dei pesi W. Questi vettori catturano relazioni semantiche e sintattiche tra le parole in un spazio continuo ad alta dimensionalità.

SCHEMA COMPLESSIVO

clicca sull’immagine per ingrandirla