Trasformatori Encoder | Il Cuore dei Problemi di Elaborazione del Linguaggio Naturale (NLP)

Trasformatori Encoder | Il Cuore del NLP

Introduzione

Ti spiegherò gli encoder dei trasformatori in modo molto semplice. Le persone che hanno difficoltà a imparare i trasformatori possono leggere questo post fino in fondo e, se sei interessato a lavorare nel campo dell’NLP, dovresti essere consapevole dei trasformatori almeno perché la maggior parte delle industrie utilizza questi modelli all’avanguardia per vari compiti. I trasformatori, introdotti nel paper “Attention Is All You Need”, sono i modelli all’avanguardia nei compiti di NLP, superando le RNN tradizionali e le LSTM. I trasformatori superano la sfida di catturare le dipendenze a lungo termine affidandosi all’auto-attenzione anziché alla ricorrenza. Hanno rivoluzionato l’NLP e aperto la strada a architetture come BERT, GPT-3 e T5.

Obiettivi di apprendimento

In questo articolo imparerai:

  • Perché i trasformatori sono diventati così popolari?
  • Il ruolo del meccanismo di auto-attenzione nei campi dell’NLP.
  • Vedremo come creare matrici di chiavi, query e valore dai nostri dati di input.
  • Vedremo come calcolare la matrice di attenzione utilizzando le matrici di chiavi, query e valore.
  • L’importanza dell’applicazione della funzione softmax nel meccanismo.

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Cosa ha portato alla superiorità dei trasformatori rispetto ai modelli RNN e LSTM?

Affrontavamo un ostacolo significativo nel lavoro con RNN e LSTM poiché questi modelli ricorsivi erano ancora incapaci di comprendere le dipendenze a lungo termine e stavano diventando sempre più computazionalmente costosi nel gestire dati complessi. Il paper “Attention Is All You Need” ha sviluppato un nuovo design chiamato trasformatori per superare questo vincolo delle reti sequenziali convenzionali, e adesso sono il modello più avanzato per numerosi applicazioni di NLP.

  • Nelle RNN e LSTM, gli input e i token vengono alimentati uno alla volta, mentre la sequenza completa viene trasmessa contemporaneamente tramite i trasformatori (alimentazione parallela dei dati).
  • Il modello dei trasformatori elimina completamente il processo ricorsivo e si basa esclusivamente sul meccanismo di attenzione. Utilizza l’auto-attenzione, che è un tipo unico di meccanismo di attenzione.

Di cosa è composto il trasformatore? Come funziona?

Per molti compiti di NLP, il modello dei trasformatori è attualmente il modello all’avanguardia. L’introduzione dei trasformatori ha portato a un significativo avanzamento nel campo dell’NLP e ha preparato la strada per sistemi all’avanguardia come BERT, GPT-3, T5 e altri.

Capiamo come funzionano i trasformatori e l’auto-attenzione con un compito di traduzione linguistica. Il trasformatore è composto da un’architettura codificatore-decodificatore. Alimentiamo la frase di input (frase sorgente) al codificatore. Il codificatore apprende la rappresentazione della frase di input e invia la rappresentazione al decodificatore. Il decodificatore riceve la rappresentazione appresa dal codificatore come input e genera la frase di output (frase target).

Diciamo che vogliamo tradurre una frase dall’inglese al francese. È necessaria la frase in inglese come input al codificatore, come indicato nella figura seguente. Il codificatore apprende le rappresentazioni della frase in inglese data e alimenta la rappresentazione al decodificatore. Il decodificatore prende in input la rappresentazione del codificatore e genera la frase in francese come output.

Tutto bene, ma cosa sta succedendo esattamente qui? Come il codificatore e decodificatore del trasformatore traducono una frase in inglese (la frase sorgente) in una frase in francese (la frase target)? Cosa succede esattamente all’interno del codificatore e del decodificatore? Pertanto, analizzeremo solo la rete del codificatore in questo post perché vogliamo essere brevi e concentrarci sul codificatore in questo momento. Affronteremo la componente del decodificatore in un futuro articolo, sicuramente. Nelle sezioni seguenti, scopriamo.

Comprendere il Codificatore del Trasformatore

Il codificatore è semplicemente una rete neurale progettata per ricevere un input e trasformarlo in una rappresentazione/forma diversa che una macchina può comprendere. I trasformatori sono composti da una pila di N codificatori. L’output di un codificatore viene inviato come input al successivo codificatore. Come mostrato nella figura seguente, abbiamo una pila di N codificatori. Ogni codificatore invia il suo output al codificatore superiore. L’ultimo codificatore restituisce la rappresentazione della frase di origine data come output. Alimentiamo la frase sorgente come input al codificatore e otteniamo la rappresentazione della frase sorgente come output:

Gli autori del paper originale Attention Is All You Need hanno scelto N = 6, il che significa che hanno impilato sei encoder l’uno sopra l’altro. Tuttavia, possiamo sperimentare con altri valori di N. Manteniamo N = 2 per semplicità e una migliore comprensione.

Ora, la domanda è: come funziona esattamente l’encoder? Come genera le rappresentazioni per una data frase di origine (frase di input)? Vediamo cosa c’è nell’encoder.

Componenti dell'Encoder

Dalla figura precedente, possiamo capire che tutti i blocchi dell’encoder sono identici. Possiamo anche osservare che ogni blocco dell’encoder è composto da due componenti.

  1. Attenzione multi-head
  2. Rete di feedforward

Andiamo nei dettagli e impariamo come funzionano effettivamente queste due componenti. Per capire come funziona l’attenzione multi-head, prima dobbiamo capire il meccanismo di auto-attenzione.

Meccanismo di Auto-attenzione

Capiamo il meccanismo di auto-attenzione con un esempio. Considera la seguente frase:

Ho nuotato attraverso il fiume per raggiungere l’altra sponda

Esempio 1

Nel precedente esempio 1, se ti chiedo di dirmi il significato di “sponda” qui. Quindi, per rispondere a questa domanda, devi capire le parole che circondano la parola “sponda”.

Quindi è:

Sponda == istituzione finanziaria?

Sponda == terreno al bordo di un fiume?

Leggendo la frase, puoi facilmente dire che la parola “sponda” significa il terreno al bordo di un fiume

Quindi, il Contesto Conta!

Vediamo un altro esempio:

Un cane ha mangiato il cibo perché era affamato

Esempio 2

Come può una macchina capire a cosa si riferiscono queste parole sconosciute in una data frase? Qui entra in gioco il meccanismo di auto-attenzione, che aiuta la macchina a capire.

Nella frase data, “Un cane ha mangiato il cibo perché era affamato”, prima il nostro modello calcolerà la rappresentazione della parola “Un”, successivamente calcolerà la rappresentazione della parola “cane”, poi calcolerà la rappresentazione della parola “ha mangiato”, e così via. Durante il calcolo della rappresentazione di ogni parola, il modello relaziona ogni parola a tutte le altre parole nella frase per capire meglio la parola.

Ad esempio, durante il calcolo della rappresentazione della parola “era”, il nostro modello relaziona la parola “era” a tutte le altre parole nella frase per capire meglio la parola “era”.

Nell’immagine sottostante, il nostro modello collega la parola “era” a ogni parola nella frase per calcolarne la rappresentazione. In questo modo, il nostro modello capisce che “era” è associato a “cane” e non a “cibo” nella frase data. Lo spessore della linea che collega “era” e “cane” è maggiore, indicando un punteggio più alto e una relazione più forte. Ciò consente alla macchina di fare previsioni basate sul punteggio più alto.

Ottimo, ma come funziona esattamente? Approfondiamo il processo di auto-attenzione ora che abbiamo una comprensione fondamentale di cosa sia.

Assumiamo di avere:

SourceSentence = Sono bravo

Tokenized = [‘Sono’, ‘bravo’]

Qui, la rappresentazione non è altro che un modello di word embedding.

Matrice di embedding di SourceSentence

Matrice di input (Matrice di embedding)

Dalla matrice di input (Matrice di embedding) sopra, possiamo capire che la prima riga della matrice implica l’embedding della parola “Sono”, la seconda riga implica l’embedding della parola “bravo”. Quindi la dimensione della matrice di input sarà – [lunghezza della frase x dimensione dell’embedding]. Il numero di parole nella nostra frase (lunghezza della frase) è 2. Facciamo in modo che la dimensione dell’embedding sia 3 per ora come spiegazione. Quindi, la dimensione della nostra matrice di input (embedding di input) sarà [2,3]. Quindi, se si prende la dimensione come 512, la forma sarà [2×512]. Quindi, per comodità, prendiamo [2,3]

Matrice X (Matrice di embedding)

Ora generiamo tre nuove matrici dalla matrice sopra menzionata, X: una matrice di query, Q, una matrice chiave, K, e una matrice di valore, V. Aspetta. Cosa sono esattamente queste tre matrici? E perché ne abbiamo bisogno? Vengono utilizzate nel meccanismo di auto-consapevolezza. Tra un attimo, vedremo come queste tre matrici vengono utilizzate.

Ricerca-Engine Wor

Quindi lasciami offrirti un esempio per aiutarti a comprendere ed immaginare l’auto-consapevolezza. Sto cercando dei buoni tutorial di data science per aiutarmi a imparare la data science. Nonostante il fatto che il database di YouTube sia così enorme, mi consente di inserire una query e ottengo il risultato tra diverse sequenze di dati (chiavi) e restituisce quella correlata ad essa (che ha un punteggio più alto).

NOTA: La spiegazione sopra è solo un esempio per aiutarti a visualizzare come la mia query viene confrontata con altre parole/sequenze come chiavi qui.

Torniamo alle nozioni di [chiave, query e valori]. Ora considera come possiamo generare queste tre matrici per il meccanismo di auto-attenzione. Quindi, per generare queste tre matrici, aggiungiamo tre nuovi pesi W[Q], W[K] e W[V]. Moltiplicando la matrice di input, X, per W[Q], W[K] e W[V], otteniamo le matrici di query, Q, chiave, K, e valore, V.

NOTA: Le matrici di peso W[Q], W[K] e W[V] vengono inizializzate casualmente e i loro valori ottimali vengono appresi durante l’addestramento. Riceveremo matrici di query, chiave e valore più accurate man mano che apprendiamo i pesi ideali.

Come indicato nel diagramma sottostante, moltiplichiamo la matrice di input (X) per le matrici di peso, W[Q], W[K] e W[V], ottenendo la query, chiave e valore. Inoltre, questi sono valori arbitrari anziché embedding accurati solo a scopo di comprensione.

Creazione delle matrici di query, chiave e valore

Comprensione del meccanismo di auto-attenzione

Quindi perché abbiamo calcolato le matrici di query, chiave e valori? Capirlo con 4 passaggi:

Passaggio 1

  • Il prodotto scalare tra la matrice di query, Q, e la matrice di chiave, K (trasposta) viene calcolato come primo passo nel processo di auto-attenzione.
Matrici di query e chiave
  • Di seguito viene mostrato il risultato del prodotto scalare tra la matrice di query, Q, e la matrice di chiave, K (trasposta)
Prodotto scalare tra la query e la chiave:
  • Ma quale è l’utilità di calcolare il prodotto scalare tra le matrici di query e chiave? Cosa significa esattamente Q.K(Trasposta)? Capirlo osservando nel dettaglio il risultato di Q.K(Trasposta).
  • Esaminiamo la prima riga della matrice Q.K(Trasposta) come mostrato nella figura seguente. Possiamo osservare che stiamo calcolando il prodotto scalare tra il vettore di query q1 (I) e tutti i vettori di chiave – k1(I), k2(am) e k3(good).

NOTA: Il calcolo del prodotto scalare indica quanto sono confrontabili. Più è forte la relazione, più alto è il punteggio.

  • Quindi in ogni caso, il prodotto scalare misura semplicemente la similarità tra i vettori di query e i vettori di chiave per calcolare i punteggi di attenzione.
  • E nello stesso modo calcoliamo i prodotti scalari delle altre righe.
Prodotto scalare tra query e vettori di chiave

PASSAGGIO 2

  • La matrice Q.K(Trasposta) viene quindi divisa per la radice quadrata della dimensione del vettore di chiave nel processo di auto-attenzione. Ma perché siamo costretti a farlo?

E cosa potrebbe succedere se non facciamo questo tipo di ridimensionamento?

Senza il ridimensionamento, le magnitudini dei prodotti scalari potrebbero variare a seconda delle dimensioni dei vettori chiave. Quando i vettori chiave sono più grandi, i prodotti scalari potrebbero diventare più grandi. Ciò può causare una rapida espansione o contrazione dei gradienti durante l’addestramento, rendendo instabile il processo di ottimizzazione e compromettendo l’addestramento del modello.

Dividere il prodotto scalare per la radice quadrata di dk
Ridimensionamento del prodotto scalare
  • Sia dk la dimensione del vettore chiave. Quindi, se la dimensione dell’embedding è 512, supponiamo che la dimensione del vettore chiave sia 64. Quindi, se ne prendiamo la radice quadrata, otteniamo 8.

PASSAGGIO 3

  • Possiamo vedere che i punteggi di similarità menzionati in precedenza sono in forma non normalizzata. Pertanto, utilizziamo la funzione softmax per normalizzarli. La funzione softmax aiuta a ottenere il punteggio nell’intervallo da 0 a 1, e la somma dei punteggi è 1, come mostrato nell’immagine seguente:
Ridimensionamento del prodotto scalare
  • Definiamo la matrice precedente come matrice di punteggio, che ci permette di comprendere l’interconnessione tra ogni parola nella frase analizzando i punteggi loro assegnati. Esaminando la prima riga della matrice dei punteggi, osserviamo che la parola “Io” è collegata al 90% con se stessa, collegata al 7% con la parola “sono” e collegata al 3% con la parola “buono”. Questa nuova attenzione sulla mia parola è certamente gratificante.

PASSO 4

  • Quindi, quale è il prossimo passo? Abbiamo generato il prodotto scalare delle matrici di query e chiave, calcolato i punteggi, e poi normalizzato i punteggi utilizzando la funzione softmax. Calcoliamo la matrice di attenzione, Z, come ultimo passo nel meccanismo di auto-attenzione.
  • Ogni parola nella frase ha il suo proprio valore di attenzione nella matrice di attenzione. La matrice di attenzione, Z, viene calcolata moltiplicando la matrice dei punteggi per la matrice dei valori, V, come illustrato:
Calcolo della matrice di attenzione
  • Come risultato, la nostra sequenza avrà la seguente matrice di attenzione:
Risultato della matrice di attenzione
  • La matrice di attenzione viene calcolata aggiungendo la somma pesata dei vettori di valore. Analizziamo riga per riga per comprenderlo meglio. Innanzitutto, consideriamo come viene calcolata l’auto-attenzione della parola “Io” nella prima riga:
Vettore di auto-attenzione
  • Dall’immagine precedente, possiamo dedurre che il calcolo dell’auto-attenzione per la parola “Io” coinvolge il pesare dei vettori di valore secondo i punteggi e la loro somma. Di conseguenza, il valore comprenderà il 90% dei valori v1 (Io) del vettore di valore (Io), il 7% dei valori del vettore di valore v2(sono), e il 3% dei valori del vettore di valore v3(buono) e così via per gli altri.
Meccanismo di auto-attenzione

In questo modo, il Meccanismo di Auto-Attenzione opera negli Encoder basati su trasformatori.

Conclusioni

Di conseguenza, abbiamo acquisito una comprensione approfondita di come operano l’encoder del trasformatore e l’approccio di auto-attenzione. Credo che possedere conoscenze sull’architettura di vari framework e integrarli efficacemente in attività basate su NLP sia un aspetto cruciale di questo ambito di lavoro. In futuro, includeremo sezioni aggiuntive sul Decoder, Bert, Large Language Models e altro ancora. E propongo di comprendere qualsiasi architettura di questo tipo prima di implementarla altrove, in modo da sentirsi più preparati e coinvolti nella Scienza dei Dati.

  • È importante affrontare le architetture complesse con la mentalità che nulla sia intrinsecamente difficile. Con la giusta conoscenza, dedizione e utilizzo dei propri talenti, è possibile semplificare e navigare efficacemente attraverso queste architetture, rendendole più gestibili ed efficaci nel lavoro di data science.
  • Comprendere l’architettura di un framework, come l’encoder del trasformatore e l’approccio di auto-attenzione, è fondamentale per lavorare in modo efficace nelle attività basate su NLP. Ci consente di comprendere i principi e i meccanismi sottostanti che alimentano questi modelli.
  • Integrare correttamente l’architettura di un framework in qualsiasi attività è una competenza essenziale. Ci consente di sfruttare efficacemente le capacità del framework e ottenere risultati migliori nelle attività di NLP.

Domande Frequenti

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e vengono utilizzati a discrezione dell’autore.