NLP moderno una panoramica dettagliata. Parte 2 GPT
NLP moderno - Parte 2 GPT
Nella prima parte della serie, abbiamo parlato di come Transformer abbia concluso l’era della modellazione sequenza-sequenza del Natural Language Processing e della comprensione. In questo articolo, ci concentreremo sullo sviluppo di uno degli strumenti di NLP generativi più potenti, GPT di OpenAI. E daremo anche uno sguardo a certi sviluppi lungo il percorso.
Evoluzione del dominio NLP dopo i Transformers
Prima di iniziare, diamo uno sguardo alla cronologia dei lavori che hanno portato a grandi progressi nel dominio NLP. Questo aiuterà a comprendere meglio come l’avanzamento dei lavori precedenti abbia influenzato gli sviluppi successivi e ad affrontare meglio le interdipendenze tra di essi.

Generative Pre-trained Transformer (GPT)
Nel 2018, OpenAI ha introdotto GPT, che ha dimostrato, con l’implementazione del pre-training, del transfer learning e del fine-tuning adeguato, che i transformer possono raggiungere prestazioni all’avanguardia. Da allora, OpenAI ha lavorato per aumentare la potenza e i parametri del modello, migliorando i dati di addestramento, il che ha dato origine a strumenti moderni come ChatGPT, InstructGPT e AutoGPT.
- Questo articolo sull’Intelligenza Artificiale presenta un metodo avanzato per la Privacy Differenziale nella riconoscimento delle immagini con una migliore precisione
- Le nuove istruzioni personalizzate di ChatGPT sono appena state rilasciate. Ecco come usarle.
- Scienziato dei dati vs Analista dei dati vs Ingegnere dei dati – Svelando la differenza
Ma la domanda è: come si sono uniti tutti questi concetti? Vediamolo passo dopo passo.
Semi-Supervised Sequence Learning
Come tutti sappiamo, l’apprendimento supervisionato ha un inconveniente, poiché richiede un enorme dataset etichettato per l’addestramento. Nel dominio NLP, è stato un problema procurare grandi quantità di dati per addestrare un modello, in modo che il modello possa ottenere un contesto adeguato e rappresentazioni delle parole. Nel 2015, Andrew M. Dai di Google ha pubblicato un articolo intitolato Semi-Supervised Sequence Learning, in cui gli autori hanno proposto un approccio non supervisionato per il pre-training di un modello su diversi documenti come estratti di DBPedia, IMDB, recensioni di Rotten-tomato e manoscritti inediti. Si è osservato che questo pre-training ha permesso al modello di avere una maggior comprensione delle parole, e quindi rappresentazioni migliori.

Infine, il modello è stato addestrato in modo specifico per compiti specifici, che erano task supervisionati, e si è scoperto che l’apprendimento era molto stabile e convergeva più rapidamente. Quindi, nel complesso, un processo semi-supervisionato ha funzionato alla grande.
Gli autori hanno utilizzato un semplice LSTM e l’hanno addestrato utilizzando il metodo del clipping del gradiente, che è stato dimostrato funzionare meglio rispetto alle normali RNN per le previsioni. Successivamente, gli autori hanno utilizzato 2 metodi per il pretraining.
- Il modello riceve una sequenza e viene addestrato a prevedere la parola successiva. Ciò è stato definito LM-LSTM, o modello di language-modeling, che è il nome di questo task.
- Il modello riceve una sequenza e crea un singolo vettore che viene poi utilizzato dal decoder del modello per ricostruire l’intera frase. Ciò è stato definito SA-LSTM, o modello di sequence-autoencoder, a seconda del compito di creazione dell’encoding.
Successivamente, questi modelli pre-addestrati sono stati utilizzati dopo l’aggiunta di fine-tuning per compiti come l’analisi sentimentale e si è scoperto che superavano le prestazioni state-of-the-art. Altre scoperte sono:
- Il pre-training ha aumentato la stabilità dell’apprendimento e la capacità di generalizzazione del modello.
- L’aggiunta di ulteriori dati ha incrementato ulteriormente le ottimizzazioni.
- Si è scoperto che SA-LSTM si comportava meglio, a causa del fatto che doveva cercare un contesto più lungo dell’intera frase, rispetto alle LM-LSTM, che prevedevano solo la parola successiva, quindi prestavano attenzione a un contesto più breve.
Link all’articolo: https://arxiv.org/pdf/1511.01432.pdf
Importante conclusione: il pre-training migliora le prestazioni.
Generare Wikipedia Sintetizzando Lunghe Sequenze
Questo lavoro è stato pubblicato da Peter J Liu presso Google nel 2019. Gli autori hanno proposto che, utilizzando solo la parte decoder dell’architettura originale del transformer, anziché l’intero sistema, si può ottenere una performance all’avanguardia per compiti generativi come le sintesi. L’architettura è una architettura auto-regressiva, cioè il modello produce una parola alla volta e poi prende in input la sequenza a cui è attaccata la parola predetta, per predire la parola successiva. In sostanza, predice una parola con il contesto della parola precedente.
Gli autori hanno utilizzato più documenti di Wikipedia come documento sorgente per il compito e hanno utilizzato basi di confronto e modelli di encoder-decoder RNN e Transformer per convalidare la performance dell’architettura proposta.
Aver utilizzato più documenti sorgente ha comportato la presenza di duplicati e ha generato un insieme enorme, impossibile da addestrare a causa della mancanza di potenza di elaborazione. Pertanto, gli autori hanno utilizzato un processo a due fasi, seguendo ciò che facciamo come esseri umani.
Fase 1: Evidenziamo i punti provenienti da diversi articoli per creare un insieme di informazioni utili. Per fare ciò, sono stati utilizzati metodi di sintesi estrattiva come tf-idf e algoritmi di text-rank. Gli autori hanno utilizzato 5 metodi estrattivi e hanno scelto il migliore.
Fase 2: Il passo finale consiste nel sintetizzare effettivamente i punti selezionati nella fase 1 mediante un metodo di sintesi astrattiva o di apprendimento profondo, in questo caso il decoder del transformer.
L’architettura è la stessa di quella del vero transformer, con un blocco di attenzione mascherata seguito da un blocco di auto-attenzione e infine uno strato completamente connesso, con l’unica differenza che il blocco di encoder è stato eliminato. Le frasi e i loro risultati vengono concatenati in un unico vettore e passati al modello per l’addestramento. I livelli del decoder creano un vettore nascosto, che viene passato a uno strato softmax per la previsione delle parole.

Link all’articolo: https://arxiv.org/pdf/1801.10198.pdf
Importante conclusione: Il decoder è sufficiente per i compiti generativi.
Universal Language Model Fine-tuning per la Classificazione di Testo: UlmFit
Questo lavoro è stato pubblicato nel 2018 da Jeremy Howard di Fast AI ed è diventato uno sviluppo primario in questo campo, che sta alimentando tutti i modelli di NLP che vediamo oggi. Gli autori hanno introdotto l’idea del transfer learning nel mondo dell’elaborazione del linguaggio naturale, della comprensione e dell’inferenza.
Le persone che sono familiari con il mondo della visione artificiale avranno un’idea del concetto chiamato transfer learning, quindi dobbiamo spostarci un po’ nel mondo della visione artificiale per capire l’importanza e l’urgenza di trovare qualcosa di equivalente.
Poiché l’apprendimento supervisionato richiedeva enormi dataset per il trattamento delle immagini per addestrare modelli super-profondi, la scarsità di dati divenne un problema. A questo punto, dataset come ImageNet e MS-COCO arrivarono con enormi quantità di dati, sufficienti per addestrare questi modelli. Una volta addestrati i modelli, si scoprì che i modelli avevano una buona idea generale della rilevazione dei confini degli oggetti, del rilevamento del colore e del gradiente. Quindi, sebbene questi modelli fossero stati addestrati per un compito di origine diversa, potevamo utilizzare questi modelli addestrati e cambiare il livello di classificazione finale, per adattarli facilmente ad altri compiti. Questi modelli generalizzati hanno contribuito a ottenere ottimi risultati per compiti in cui i dati erano scarsi.
Tornando al mondo del NLP, i modelli erano addestrati principalmente in modo molto specifico per il compito, quindi se c’erano pochi dati, non c’era via d’uscita. Sorse la necessità di una generalizzazione. Non è che il concetto di transfer learning non fosse mai stato provato prima, ma non aveva mai avuto successo, poi arrivò il salvatore. Gli autori hanno trovato una soluzione per i cosiddetti Compiti Secondari, che sono quelli che hanno meno disponibilità di dati e richiedono un modello pre-addestrato per essere adattati di conseguenza.
Gli autori hanno citato come motivo del fallimento la mancanza di conoscenza su come adattare il modello, pur riconoscendo l’ottimo impatto dell’inizializzazione del modello con pesi pre-addestrati trovati utilizzando obiettivi come il language modeling. Gli autori hanno affermato che lavori precedenti hanno richiesto troppi dati etichettati per l’adattamento, il che ha gravemente compromesso l’usabilità. Quando i ricercatori hanno cercato di addestrare utilizzando dataset più piccoli, a causa della mancanza di dati, si è verificato l’overfitting sul dataset e, di conseguenza, si è introdotto un carattere di oblio nel modello o una perdita di generalizzazione, divergendo infine.
Gli autori hanno proposto un metodo in tre fasi per addestrare e perfezionare un modello pre-addestrato per ottenere le migliori prestazioni. Per dimostrare l’affermazione, gli autori hanno utilizzato un normale modello LSTM a 3 strati e il perfezionamento è stato effettuato utilizzando un breve set di dati di 100 recensioni IMDB etichettate per dimostrarne l’efficienza campionaria.

Esaminiamo i passaggi:
- Preparazione del LM: La preparazione del modello di linguaggio è stata effettuata su Wikitext-103 (Merity et al., 2017b), composto da 28.595 articoli di Wikipedia preelaborati e 103 milioni di parole. Gli autori suggeriscono che questo sia un set di dati comparabile a ImageNet in base alle dimensioni e sarà sufficiente per creare un buon modello pre-addestrato.
- Perfezionamento del LM: Gli autori menzionano che, sebbene la preparazione preliminare sia un buon modo per trovare buoni pesi di inizializzazione e un senso delle parole generalizzato, per affrontare un compito specifico del dominio, il modello deve prima essere perfezionato sul vocabolario del dominio, poiché la distribuzione delle parole potrebbe essere diversa nel dominio generale e nel dominio specifico del compito target. Tuttavia, teniamo presente che non stiamo perfezionando il modello con lo strato del classificatore richiesto in questa fase, stiamo semplicemente eseguendo lo stesso compito di modellazione del linguaggio, solo il set di dati è specifico del dominio, solo per spostare correttamente la distribuzione delle parole. Ma c’è un’insidia, non possiamo semplicemente perfezionare il modello, poiché c’è il rischio di sovradattamento. a. Perfezionamento discriminativo: Si è visto che diversi strati del modello catturano diversi livelli di dati. Si è scoperto che, per il perfezionamento, se proviamo ad addestrare tutti gli strati del modello allo stesso tasso di apprendimento, può causare sovradattamento. Invece, l’autore propone di addestrare diversi strati del modello a diversi tassi. Per la retropropagazione normale con SGD, l’equazione diventa
θt = θ(t−1) − η · ∇θJ(θ)
dove θ rappresenta i pesi del modello, η è il tasso di apprendimento e t è l’istante di tempo. Gli autori dividono gli strati dei modelli in livelli da 0 a L e definiscono i parametri del modello θl e ηl come il tasso di apprendimento per addestrare l’l-esimo strato. La nuova equazione diventa
Di solito, il tasso di apprendimento dello strato (l-1) è il tasso di apprendimento dello strato l-esimo diviso per 2,6.
b. Tassi di apprendimento triangolari inclinati: Si è osservato che i tassi di apprendimento costanti per lo strato influenzano la convergenza dell’apprendimento. Per risolvere questo problema, gli autori hanno proposto un tasso di apprendimento triangolare inclinato. Questo propone che un particolare strato del modello non debba essere addestrato a un tasso di apprendimento costante durante tutte le epoche di addestramento. Invece, il tasso dovrebbe aumentare ripidamente, raggiungere il valore più alto, per poi diminuire gradualmente.

In questo caso, il tasso di apprendimento è una funzione del numero di iterazioni.
3. Perfezionamento del classificatore: Questo è il passaggio finale, in cui prendiamo il modello aumentato e aggiungiamo un classificatore da addestrare in base al nostro compito target. Gli autori hanno preso spunto dal playbook di CV e hanno aggiunto uno strato di normalizzazione dei batch e softmax. Gli autori hanno utilizzato due metodi per ottenere prestazioni migliori:
a. Concatenazione del Pooling: Si è osservato che per i compiti di classificazione si utilizzano principalmente poche parole che hanno un impatto massimo; ad esempio, in un’analisi del sentiment, parole come “migliore” e “buono” confermano quasi sicuramente un sentimento positivo. Ora, queste parole possono essere ovunque nel documento e quindi ovunque nelle rappresentazioni dello stato nascosto. Per concentrarsi sulle parole di impatto, gli autori hanno aggiunto sia il max-pooling che il mean-pooling. L’output finale dello strato nascosto è la concatenazione dell’output dello strato nascosto, della sua versione max-pooled e della sua versione mean-pooled. La rappresentazione dell’output dello strato previene la perdita di informazioni, mentre le versioni poolate si concentrano sulle parole di impatto.
b. Gradual Unfreezing: Gli autori hanno osservato che, se tutti i livelli vengono sbloccati dall’inizio e allenati insieme, si introduce un comportamento di dimenticanza catastrofica, poiché forse gli ultimi livelli sono i migliori per avere una comprensione più generalizzata. Per gestire ciò, viene introdotto lo sblocco graduale. Il ultimo livello viene sbloccato e allenato per primo, quindi dopo un numero fisso di epoche, sblocciamo i livelli precedenti e così via, fino a perfezionare tutti i livelli.
Link all’articolo: https://arxiv.org/pdf/1801.06146.pdf
Importante conclusione: I modelli possono essere perfezionati per un compito di destinazione anche se allenati per un compito di allenamento diverso.
E FINALMENTE,
Migliorare la comprensione del linguaggio mediante pre-allenamento generativo
GPT, o Generative Pre-trained Transformer, è stato pubblicato da Alec Radford di OpenAI nel 2018. Questo lavoro ha utilizzato in modo molto intelligente e ottimale tutte le scoperte dello sviluppo precedente e le ha fuse con un modello parametrizzato massiccio e dati di allenamento accuratamente curati, per ottenere enormi miglioramenti delle prestazioni.
Lo scopo di GPT è apprendere una rappresentazione universale che si trasferisce con poca adattamento a una vasta gamma di compiti. È un altro modello auto-regressivo basato su decoder transformer, che è stato allenato utilizzando un metodo a due fasi. La prima fase è una fase di pre-allenamento non supervisionato, seguita da un perfezionamento specifico del compito. Gli autori hanno utilizzato i metodi suggeriti da ULMFit per perfezionare i modelli al fine di ottenere prestazioni migliori.
- Pre-Allenamento:
Gli autori hanno suddiviso la sequenza di documenti di pre-allenamento in sequenze di vettori singoli lunghi e pre-allenato utilizzando obiettivi di modellazione del linguaggio. La lunghezza delle sequenze è massimizzata fino a quanto il potere di elaborazione supporta, affermando che l’utilizzo di sequenze più lunghe allena il modello a gestire dipendenze a lungo termine. Inoltre, gli autori hanno aggiunto alcuni obiettivi ausiliari, come il POS tagging, il chunking e il riconoscimento delle entità nominate, durante il pre-allenamento, che hanno contribuito a (a) migliorare la generalizzazione del modello supervisionato e (b) accelerare la convergenza.
2. Perfezionamento:
Per il perfezionamento, gli autori hanno utilizzato un modello di attraversamento, il che significa che hanno collegato l’input e l’output su un singolo vettore; per i compiti che richiedono generazioni e per i compiti come il confronto di similarità, le coppie di frasi vengono concatenate separate da un carattere separatore unico.

Implicazione testuale: Per i compiti di implicazione, concateniamo le sequenze di token della premessa p e dell’ipotesi h, con un token delimitatore ($) in mezzo.
Similarità: Per i compiti di similarità, non c’è un ordine intrinseco delle due frasi confrontate. Per riflettere ciò, modifichiamo la sequenza di input per includere entrambi i possibili ordini delle frasi (con un delimitatore in mezzo) e processiamo ciascuna in modo indipendente per produrre due rappresentazioni di sequenza h m l, che vengono aggiunte elemento per elemento prima di essere alimentate al livello di output lineare.
Domanda e risposta e ragionamento intuitivo: Per questi compiti, ci viene fornito un documento di contesto z, una domanda q e un insieme di possibili risposte {ak}. Concateniamo il contesto del documento e la domanda con ciascuna possibile risposta, aggiungendo un token delimitatore in mezzo per ottenere [z; q; $; ak]. Ciascuna di queste sequenze viene elaborata in modo indipendente con il nostro modello e quindi normalizzata tramite uno strato softmax per produrre una distribuzione di output sulle possibili risposte.
Questi sono i modi in cui viene organizzato il perfezionamento.
Specifiche del modello e dei dati: Per pre-allenare il modello utilizzando la modellazione del linguaggio, gli autori hanno utilizzato il dataset BooksCorpus per l’allenamento del modello linguistico. Contiene oltre 7.000 libri inediti unici di vari generi, tra cui Avventura, Fantasy e Romance.
Abbiamo allenato un transformer a soli 12 strati con attenzione self-attention mascherata (stati di dimensione 768 e 12 attenzioni). Per le reti feed-forward posizionali, abbiamo utilizzato stati interni di dimensione 3072. Abbiamo utilizzato lo schema di ottimizzazione Adam [27] con un tasso di apprendimento massimo di 2,5e-4.
Questa sezione descrive l’architettura del modello. Sto citando direttamente dall’articolo per evitare discrepanze ed è abbastanza semplice da capire con la conoscenza dell’architettura reale del transformer.
Link: https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf
Miglioramenti nel corso degli anni
Fino ad ora abbiamo discusso del funzionamento del primo modello GPT. Da allora, OpenAI ha lavorato per migliorare le prestazioni, apportando numerose modifiche e utilizzando i progressi nel mondo dei big data.
I modelli di linguaggio sono apprendisti multitask non supervisionati
Questo paper è stato pubblicato da OpenAI nel 2019, che ha presentato GPT-2 come un modello successivo a GPT, la versione di base. OpenAI ha rilasciato un paper e un modello più piccolo rispetto al modello effettivo, che non hanno rilasciato poiché si aspettavano che le persone avrebbero abusato delle capacità del modello.
OpenAI ha affermato che l’unico obiettivo di questo modello è il miglioramento delle capacità generative, ovvero può prevedere in modo ottimale le parole successive. Gli autori hanno osservato che tutti i modelli all’avanguardia seguono un approccio di apprendimento semi-supervisionato ma sono molto fragili e sensibili al compito target, ossia divergono se addestrati a svolgere un compito target diverso. Per mitigare questo problema, gli autori volevano qualcosa di più generalizzato. Gli autori volevano fondamentalmente stabilire un setting di apprendimento Zero-shot per i compiti successivi, il che significa che non dovrebbe essere necessario alcun set di dati aggiuntivo per il fine-tuning e sarebbe completamente non supervisionato.
L’apprendimento multitask o meta-apprendimento sembrava essere un framework stabile per raggiungere tale obiettivo. I lavori su questo argomento hanno ottenuto prestazioni decenti su 17 compiti utilizzando una combinazione di 10 set di dati. Gli autori hanno realizzato che la differenza tra l’apprendimento di un compito specifico e l’apprendimento multitask è essenzialmente la probabilità che il modello ha di prevedere, che è P(output/input) per l’apprendimento di un compito specifico ma P(output/input, compito) per l’apprendimento multitask, poiché potrebbe variare. Dai vari lavori di condizionamento del compito (ovvero quando un singolo compito oggettivo è rappresentato come una catena di diversi compiti target e il modello viene testato per eseguirli), si è osservato che il modello funzionava meglio se il minimo globale del compito di pre-training non supervisionato, ovvero il linguaggio modeling, coincideva con il minimo globale del compito di fine-tuning supervisionato, quindi l’obiettivo finale era ottimizzare il compito non supervisionato e trovare il miglior minimo globale. È stato stabilito da ablation che questo può essere raggiunto con un set di dati sufficientemente ampio.
Set di dati: Gli autori hanno sfruttato le conoscenze di uno strumento di web scraping chiamato Common Crawler utilizzato per lavori simili e hanno ideato il loro crawler per creare un set di dati chiamato WebText, contenente il sottoinsieme di testo di questi 45 milioni di link, 8 milioni di documenti di testo che hanno prodotto 40 GB di dati. Gli autori hanno anche utilizzato BPE o Byte-Pair Encoding, che traccia una linea tra la codifica a livello di parola e la codifica a livello di carattere per consentire al modello di addestrarsi su qualsiasi tipo di dati.
Modifiche al modello: Gli autori hanno leggermente modificato il blocco decodificatore del transformer per aggiungere uno strato di normalizzazione prima del blocco come una sorta di pre-attivazione e un’altra normalizzazione e connessione residua dopo l’ultimo layer di self-attention. Il modello complessivamente conteneva 1,5 miliardi di parametri ed era dieci volte più grande del modello GPT-1.
Conclusioni: Pre–Addestrando questo enorme modello su una grande quantità di dati generici come estratti di Wikipedia, i ricercatori hanno osservato che il modello generativo funziona abbastanza bene senza alcun tipo di fine-tuning. Ciò ha dato origine al concetto chiamato Apprendimento Zero-Shot, poiché i modelli non richiedono alcun tipo di set di dati etichettato su cui addestrarsi e possono comunque offrire prestazioni.
Link al paper: https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
Conclusione
Negli ultimi anni, OpenAI ha sviluppato GPT3 e molto altro utilizzando diversi concetti come l’apprendimento multitask, che è un’altra storia da raccontare, poiché questo è già troppo lungo. In questo articolo abbiamo visto l’evoluzione del mondo dell’NLP fino a GPT-2. I successivi sviluppi saranno trattati nei prossimi articoli della serie.
Buona lettura!