Superare la Complessità Quadratica nel NLP: Longformer e Linear Transformer

AI, APPUNTI, INTELLIGENZA ARTIFICIALE

Le reti Transformer hanno segnato un punto di svolta nell’ambito del Natural Language Processing (NLP), offrendo miglioramenti significativi in vari compiti di elaborazione del linguaggio. Nonostante questo successo, i Transformer affrontano una sfida critica: la loro complessità computazionale aumenta quadraticamente con l’allungarsi delle sequenze di input. Questo problema impone dei limiti nell’addestramento e nell’uso pratico dei modelli, soprattutto quando le risorse computazionali sono limitate. L’articolo esplora come questa complessità influisce sull’efficienza dei modelli Transformer e pone la domanda: è possibile superare questa barriera per rendere i Transformer più accessibili e funzionali anche in contesti con risorse computazionali ridotte?

Per esemplificare, consideriamo l’elaborazione di una sequenza di lunghezza 100, che richiede circa 10,000 operazioni in un modello Transformer classico. Quando la lunghezza della sequenza aumenta a 1,000, come può accadere in un capitolo di un libro, il numero di operazioni necessarie sale a un milione. Questo salto esponenziale nella complessità rappresenta un ostacolo significativo, soprattutto in compiti come il Question Answering, dove l’accesso a ampie porzioni di testo è cruciale.

Questo articolo si concentra su due soluzioni promettenti a questa sfida: Longformer e Linear Transformer.

Longformer

Il Longformer è un modello progettato per gestire sequenze di input più lunghe limitando il contesto della self-attention. Nella versione standard del Transformer, durante l’elaborazione di un token specifico nella sequenza di input, il modello considera tutti gli altri token di input per generare l’output. Questo processo comporta l’esecuzione di N operazioni (prodotti scalari) per ciascuno degli N token di input, da cui la complessità quadratica.

Il Longformer, al contrario, limita il contesto a m token precedenti e m token successivi al token corrente (attraverso una tecnica nota come “sliding window attention”). Di conseguenza, il Longformer esegue solo 2m operazioni per ciascuno degli N token di input, rendendo la complessità del problema lineare rispetto a N.

Linear Transformer

Il Linear Transformer è un altro approccio che affronta la questione della complessità quadratica con un astuto trucco di algebra lineare.

Senza scendere in dettagli matematici complicati, il Linear Transformer può essere descritto come un Transformer che usa una funzione di similarità differente per calcolare le “attenzioni”. Nella versione originale, la similarità tra un vettore query q e un vettore chiave k era calcolata come:

sim(q,k) = e^{qTk}

Nel Linear Transformer, invece, viene calcolata come

.sim(q,k)=(elu(q) +1) * T * (elu(k)+1))

Sfruttando la linearità di questa nuova funzione di similarità rispetto a k, il Linear Transformer riduce il calcolo di N operazioni per ogni token di input a un’unica operazione per token. Di conseguenza, la complessità del modello scala linearmente rispetto a N.

In conclusione, sia Longformer che Linear Transformer offrono una maggiore efficienza rispetto al Transformer originale quando si tratta di elaborare lunghe sequenze di input. Questi progressi ampliano le potenzialità di utilizzo dei meccanismi di attenzione in una vasta gamma di compiti NLP.

Giusto per completezza riprendo il concetto dell’attenzione:

L’attenzione nei Transformer è un concetto chiave che ha permesso una serie di progressi significativi nel campo del Natural Language Processing (NLP). In termini generali, l’attenzione è un meccanismo che aiuta il modello a concentrarsi su specifiche parti dell’input quando elabora dati o genera output.

Per capire come funziona l’attenzione nei Transformer, possiamo fare riferimento al modello di attenzione più comune, noto come “Scaled Dot-Product Attention”. Questo meccanismo si basa su tre componenti principali: le query (Q), le chiavi (K) e i valori (V).

Il processo di attenzione può essere descritto nei seguenti passaggi:

1. Inizialmente, il modello calcola i punteggi di attenzione confrontando la query (Q) con tutte le chiavi (K). Questo viene fatto calcolando il prodotto scalare di Q e K, che fornisce una misura della loro somiglianza. Quindi, un punteggio di attenzione elevato indica che la corrispondente chiave (e il relativo valore) sono particolarmente rilevanti per la query corrente.

2. I punteggi di attenzione vengono poi normalizzati utilizzando la funzione softmax, che mappa i punteggi in una distribuzione di probabilità. Ciò garantisce che i punteggi siano positivi e che sommino a 1, il che consente di interpretarli come “pesi” per l’importanza relativa delle varie chiavi e dei loro corrispondenti valori.

3. Infine, i pesi di attenzione normalizzati vengono utilizzati per calcolare una combinazione pesata dei valori (V). Questa combinazione pesata serve come output del meccanismo di attenzione e rappresenta la “risposta” del modello alla query corrente.

Nel contesto dei Transformer, questo meccanismo di attenzione è utilizzato in vari modi e in diverse parti del modello, ma l’idea di base rimane la stessa: il modello “presta attenzione” a diverse parti dell’input in base alla loro rilevanza per il contesto corrente. In particolare, i Transformer utilizzano una variante di questo meccanismo conosciuta come “Multi-Head Attention”, che permette al modello di prestare attenzione a diverse rappresentazioni dello stesso input simultaneamente, migliorando così la capacità del modello di catturare vari tipi di relazioni all’interno dei dati.

Cerchiamo di capire con un esempio:

Supponiamo di avere la seguente frase da tradurre dall’inglese all’italiano: “I love dogs”. Un Transformer elabora questa frase parola per parola. Quando il modello arriva a processare la parola “dogs”, il meccanismo di attenzione entra in gioco.

La parola “dogs” diventa la “query” (Q), mentre le altre parole della frase, “I” e “love”, sono le “chiavi” (K). I “valori” (V) sono anch’essi “I” e “love”.

Il modello calcola il prodotto scalare tra la query e ogni chiave. Questo punteggio rappresenta quanto sia rilevante ciascuna chiave per la query. Ad esempio, in questa fase, il modello potrebbe riconoscere che “love” è più rilevante per “dogs” rispetto a “I”, dato il contesto semantico.

Dopo aver calcolato il prodotto scalare, si applica la funzione softmax ai punteggi per ottenere i pesi di attenzione. Supponiamo che i pesi risultanti siano 0.1 per “I” e 0.9 per “love”. Questo significa che “love” ha una maggiore rilevanza per “dogs” rispetto a “I” nel contesto di questa frase.

Infine, il modello calcola una combinazione pesata dei valori, utilizzando i pesi di attenzione. In pratica, significa che l’informazione portata da “love” avrà un peso maggiore nella rappresentazione finale di “dogs”.

Ovviamente per calcolare il prodotto scalare è necessario prima fare l’embedding della frase, ovvero una  rappresentazione vettoriale dense delle parole. Questi vettori di parole sono generati da modelli di linguaggio come Word2Vec, GloVe o in questo caso, dai Transformer stessi.

Ad esempio, supponiamo  di avere  i seguenti embeddings per la nostra frase di esempio “I love dogs”:

“I”: [0.1, 0.2, 0.9] “love”: [0.3, 0.8, 0.1] “dogs”: [0.5, 0.1, 0.3]

Se “dogs” è la nostra query (Q) e “I” e “love” sono le nostre chiavi (K), calcoleremmo il prodotto scalare tra il vettore per “dogs” e i vettori per “I” e “love”. Il prodotto scalare di due vettori si calcola moltiplicando ciascuna coppia di elementi corrispondenti nei vettori e sommando poi i risultati. Ad esempio, il prodotto scalare tra “dogs” e “I” sarebbe (0.5 * 0.1) + (0.1 * 0.2) + (0.3 * 0.9).

Questi punteggi ottenuti dal prodotto scalare vengono poi utilizzati nel meccanismo di attenzione, come descritto nella mia spiegazione precedente.

Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form

    0 0 votes
    Article Rating
    Subscribe
    Notificami
    guest
    0 Commenti
    Inline Feedbacks
    View all comments
    0
    Would love your thoughts, please comment.x