Sfrutta il potere di LLM Prompting senza shot e con pochi shot

Utilizza LLM Prompting senza shot o con pochi shot

Introduzione

La potenza delle LLM è diventata il nuovo argomento di discussione nella comunità dell’IA. I primi adottanti si sono affollati intorno alle diverse soluzioni di intelligenza artificiale generativa come GPT 3.5, GPT 4 e BARD per diversi casi d’uso. Sono state utilizzate per compiti di domande e risposte, scrittura di testi creativi e analisi critica. Poiché questi modelli sono addestrati su compiti come la previsione della frase successiva su una grande varietà di corpora, ci si aspetta che siano ottimi nella generazione di testo.

Le robuste reti neurali basate su trasformatori consentono al modello di adattarsi anche a compiti di apprendimento automatico basati sul linguaggio come classificazione, traduzione, previsione e riconoscimento delle entità. Pertanto, è diventato facile per i data scientist sfruttare le piattaforme di intelligenza artificiale generativa per casi d’uso di apprendimento automatico basati sul linguaggio più pratici e industriali, dando le istruzioni appropriate. In questo articolo, vogliamo mostrare quanto sia semplice utilizzare le LLM generative per compiti di apprendimento automatico basati sul linguaggio utilizzando il prompting e analizzare criticamente i vantaggi e i limiti del prompting a zero o poche iterazioni.

Obiettivi di apprendimento

  • Apprendere il prompting a zero o poche iterazioni.
  • Analizzare le loro prestazioni su un esempio di compito di apprendimento automatico.
  • Valutare il prompting a poche iterazioni rispetto a tecniche più sofisticate come il fine-tuning.
  • Comprendere i pro e i contro delle tecniche di prompting.

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

Cos’è il prompting?

Iniziamo definendo le LLM. Un grande modello di linguaggio, o LLM, è un sistema di apprendimento profondo costruito con molteplici strati di trasformatori e reti neurali feed-forward che contengono centinaia di milioni o miliardi di parametri. Sono addestrati su enormi dataset provenienti da diverse fonti e sono progettati per comprendere e generare testo. Alcune applicazioni esemplificative sono la traduzione linguistica, la sintesi del testo, la domanda e risposta, la generazione di contenuti e altro ancora. Esistono diversi tipi di LLM: solo codificatore (BERT), codificatore + decodificatore (BART, T5) e solo decodificatore (PALM, GPT, ecc.). Le LLM con un componente decodificatore sono chiamate LLM generative; questo è il caso della maggior parte delle LLM moderne.

Se dici a una LLM generativa di svolgere un compito, essa genererà il testo corrispondente. Ma come diciamo a una LLM generativa di svolgere un compito specifico? È facile, gli diamo un’istruzione scritta. Le LLM sono state progettate per rispondere agli utenti finali in base alle istruzioni, cioè ai prompt. Hai usato dei prompt se hai interagito con una LLM come ChatGPT. Il prompting consiste nel confezionare la nostra intenzione in una query in linguaggio naturale che farà sì che il modello restituisca la risposta desiderata (Esempio: Figura 1, Fonte: Chat GPT).

Ci sono due tipi principali di tecniche di prompting che esamineremo nelle sezioni seguenti: prompting a zero o poche iterazioni. Esamineremo i loro dettagli insieme a alcuni esempi di base.

Prompting a zero iterazioni

Il prompting a zero iterazioni è uno scenario specifico di apprendimento a zero iterazioni unico per le LLM generative. Nel caso delle zero iterazioni, non forniamo dati etichettati al modello e ci aspettiamo che il modello funzioni su un problema completamente nuovo. Ad esempio, utilizziamo ChatGPT per il prompting a zero iterazioni su nuovi compiti fornendo istruzioni appropriate. Le LLM possono adattarsi a problemi non visti perché comprendono contenuti da molte risorse. Diamo un’occhiata a qualche esempio.

Ecco un esempio di query per la classificazione del testo in classi di sentimento positive, neutre e negative.

Esempi di tweet

Gli esempi di tweet provengono dal Twitter US Airline Sentiment Dataset. Il dataset è composto da tweet di feedback a diverse compagnie aeree etichettati come positivi, neutri o negativi. Nella Figura 2 (Fonte: ChatGPT), abbiamo fornito il nome del compito, ossia Classificazione del Sentimento, le classi, ossia positive, neutre e negative, il testo e il prompt per la classificazione. Il feedback sulla compagnia aerea nella Figura 2 è positivo e apprezza l’esperienza di volo con la compagnia aerea. ChatGPT ha correttamente classificato il sentimento della recensione come positivo, mostrando la capacità di ChatGPT di generalizzare su un nuovo compito.

La figura 3 sopra mostra Chat GPT con zero-shot su un altro esempio ma con sentiment negativo. Chat GPT predice nuovamente correttamente il sentiment del tweet. Mentre abbiamo mostrato due esempi in cui il modello classifica con successo il testo della recensione, ci sono diversi casi borderline in cui anche i LLM di ultima generazione falliscono. Ad esempio, diamo un’occhiata all’esempio di seguito nella figura 4. L’utente si lamenta della qualità del cibo con la compagnia aerea; Chat GPT identifica erroneamente il sentiment come neutro.

Nella tabella sottostante, possiamo vedere il confronto dello zero-shot con le prestazioni del modello BERT (Fonte) sul dataset di sentiment di Twitter. Esamineremo le metriche di accuratezza, punteggio F1, precisione e richiamo. Valutare le prestazioni per lo zero-shot prompting su un sottoinsieme casualmente selezionato di dati dal dataset di sentiment delle compagnie aeree per ogni caso e arrotondare i numeri di prestazione al numero intero più vicino. Lo zero-shot ha prestazioni inferiori ma decenti su ogni metrica di valutazione, mostrando quanto potente possa essere il prompting. I numeri di prestazione sono stati arrotondati al numero intero più vicino.

Few-shot Prompting

A differenza dello zero-shot, il few-shot prompting prevede di fornire alcuni esempi etichettati nella richiesta. Questo si differenzia dal tradizionale few-shot learning, che comporta il fine-tuning del LLM con alcuni esempi per un problema nuovo. Questo approccio riduce la dipendenza da grandi dataset etichettati consentendo ai modelli di adattarsi rapidamente e produrre previsioni precise per nuove classi con un piccolo numero di campioni etichettati. Questo metodo è vantaggioso quando raccogliere una quantità considerevole di dati etichettati per nuove classi richiede tempo e sforzo. Ecco un esempio (Figura 5) di few-shot:

Few Shot vs Zero Shot

Quanto migliora il few-shot le prestazioni? Mentre le tecniche few-shot e zero-shot hanno mostrato buone prestazioni su esempi aneddotici, il few-shot ha prestazioni complessive migliori dello zero-shot. Come mostra la tabella sottostante, possiamo migliorare l’accuratezza del compito in questione fornendo alcuni esempi di alta qualità e campioni di esempi borderline e critici durante il prompting dei modelli di IA generativa. Le prestazioni migliorano utilizzando il few-shot learning (10, 20 e 50 esempi). Le prestazioni per il few-shot prompting sono state valutate su un sottoinsieme casuale di dati dal dataset di sentiment delle compagnie aeree per ogni caso e i numeri di prestazione sono stati arrotondati al numero intero più vicino.

In base alle metriche di valutazione nella tabella sopra, il few-shot batte lo zero-shot di un notevole margine del 10% in termini di accuratezza, del 7% in termini di punteggio F1 e raggiunge prestazioni paragonabili al modello BERT fine-tuned. Un’altra osservazione chiave è che, dopo 20 esempi, i miglioramenti si stagnano. L’esempio che abbiamo analizzato è un caso d’uso particolare di Chat GPT sul dataset di sentiment delle compagnie aeree degli Stati Uniti su Twitter. Diamo un’occhiata a un altro esempio per capire se le nostre osservazioni si estendono ad altri compiti e modelli di IA generativa.

Modelli di Linguaggio: Few Shot Learners

Sotto (Figura 6) è riportato un esempio degli studi descritti nel paper “Language Models are Few-Shot Learners” che confronta le prestazioni di modelli few-shot, one-shot e zero-shot con GPT-3. Le prestazioni sono misurate sul benchmark LAMBADA (previsione delle parole target) in diversi contesti few-shot. La peculiarità di LAMBADA sta nel suo focus sull’valutazione della capacità di un modello di gestire dipendenze a lungo raggio nel testo, ovvero situazioni in cui una distanza considerevole separa una informazione dal suo contesto rilevante. Il few-shot learning batte il zero-shot learning di un notevole margine del 12,2% in termini di accuratezza.

In un altro esempio trattato nel suddetto articolo, le prestazioni di GPT-3 vengono confrontate tra diversi numeri di esempi forniti nella richiesta rispetto a un modello BERT sintonizzato sul benchmark SuperGLUE. SuperGLUE è considerato un benchmark fondamentale per valutare le prestazioni nelle attività di comprensione del linguaggio ML. Il grafico (Figura 7) mostra che i primi otto esempi hanno il maggior impatto. Aggiungendo più esempi per la richiesta few-shot, raggiungiamo un limite in cui è necessario aumentare in modo esponenziale gli esempi per vedere un miglioramento significativo. Possiamo vedere molto chiaramente che le stesse osservazioni del nostro esempio di classificazione del sentimento vengono replicate.

Lo zero-shot dovrebbe essere preso in considerazione solo in scenari in cui mancano dati etichettati. Se otteniamo alcuni esempi etichettati, possiamo ottenere grandi miglioramenti delle prestazioni utilizzando il few-shot rispetto allo zero-shot. Una domanda persistente è quanto bene queste tecniche si comportino rispetto a tecniche più sofisticate come il fine-tuning. Recentemente sono state sviluppate diverse tecniche di fine-tuning LLM ben sviluppate e il loro costo d’uso è stato anche notevolmente ridotto. Perché non sintonizzare semplicemente i propri modelli? Nelle sezioni successive, approfondiremo il confronto tra le tecniche di richiesta e i modelli sintonizzati.

Richiesta Few-shot vs Fine-tuning

Il principale vantaggio del few-shot con LLM generativi è la semplicità dell’implementazione dell’approccio. Raccogliere alcuni esempi etichettati e preparare la richiesta, eseguire l’inferenza e abbiamo finito. Anche con diverse innovazioni moderne, il fine-tuning è piuttosto ingombrante nell’implementazione e richiede molto tempo di addestramento e risorse. Per alcune istanze particolari, possiamo utilizzare le diverse UI dei LLM generativi per ottenere i risultati. Per l’inferenza su un set di dati più ampio, il codice sarebbe qualcosa di semplice come:

import os
import openai

messages = []


# Esempi etichettati per Chat GPT
few_shot_message = ""

# Menzionare il Task
few_shot_message = "Task: Classificazione del sentimento \n"

# Menzionare le classi
few_shot_message += "Classi: positivo, negativo \n"

# Aggiungere contesto
few_shot_message += "Contesto: Vogliamo classificare il sentimento delle recensioni degli hotel \n"

# Aggiungere esempi etichettati
few_shot_message += "Esempi Etichettati: \n"

for labeled_data in labeled_dataset:
    few_shot_message += "Testo: " + labeled_data["text"] + "\n";
    few_shot_message += "Etichetta: " + labeled_data["label"] + "\n"

# Chiamare l'API di OpenAI per ChatGPT fornendo gli esempi few-shot
messages.append({"role": "user", "content": few_shot_message})
chat = openai.ChatCompletion.create(
            model="gpt-3.5-turbo", messages=messages
        )

for data in unlabeled_dataset:
    # Aggiungere il testo da classificare
    message = "Testo: " + data + ", "
    
    # Aggiungere la richiesta
    message += "Richiesta: Classifica il testo dato in una delle categorie di sentimento."
    messages.append({"role": "user", "content": message})
    
    # Chiamare l'API di OpenAI per ChatGPT per la classificazione
    chat = openai.ChatCompletion.create(
            model="gpt-3.5-turbo", messages=messages
        )
    reply = chat.choices[0].message.content
    print(f"ChatGPT: {reply}")
    messages.append({"role": "assistant", "content": reply})

Un altro vantaggio chiave del few-shot rispetto al fine-tuning è la quantità di dati. Nell’attività di classificazione del sentimento delle compagnie aeree statunitensi su Twitter, il fine-tuning di BERT è stato effettuato su oltre 10.000 esempi, mentre il few-shot prompting ha avuto bisogno solo di 20-50 esempi per ottenere prestazioni simili. Tuttavia, questi miglioramenti delle prestazioni si generalizzano ad altre attività di ML basate sul linguaggio? L’esempio di classificazione del sentimento che abbiamo trattato è un caso d’uso molto specifico. Le prestazioni del few-shot prompting non sarebbero all’altezza di un modello sintonizzato per ogni caso d’uso. Tuttavia, mostra capacità simili/migliori che si estendono a una vasta gamma di compiti linguistici. Per mostrare la potenza del few-shot prompting, abbiamo confrontato le prestazioni con SOTA e modelli di linguaggio sintonizzati come BERT su attività che includono comprensione del linguaggio, traduzione e benchmark di domande e risposte nelle sezioni seguenti. (Fonte: Language Models are Few-Shot Learners)

Comprensione del Linguaggio

Per confrontare le prestazioni del few-shot e del fine-tuning su compiti di comprensione del linguaggio, esamineremo il benchmark SuperGLUE. SuperGLUE è un benchmark di comprensione del linguaggio che consiste in compiti di classificazione, similarità di testo e inferenza di linguaggio naturale. Il modello sintonizzato utilizzato per il confronto è un BERT large sintonizzato e un BERT++ sintonizzato, mentre il LLM generativo utilizzato è GPT-3. I grafici nelle figure (Figura 8 e Figura 9) mostrano il few-shot prompting con LLM generativi di dimensioni sufficientemente grandi, e circa 32 esempi few-shot sono sufficienti per battere BERT++ sintonizzato e BERT Large sintonizzato. Il guadagno di precisione rispetto a BERT large è di circa 2,8 pp, dimostrando la potenza del few-shot su LLM generativi.

Traduzione

Nel prossimo compito, confrontiamo le prestazioni di few-shot e fine-tuning su compiti basati sulla traduzione. Analizzeremo il benchmark BLUE, chiamato anche Bilingual Evaluation Understudy. BLEU calcola un punteggio compreso tra 0 e 1, dove un punteggio più alto indica una migliore qualità di traduzione. L’idea principale dietro BLEU è confrontare la traduzione generata con una o più traduzioni di riferimento e misurare in che misura la traduzione generata contiene n-grammi simili alle traduzioni di riferimento. I modelli utilizzati per il confronto sono XLM, MASS e mBART, e il generativo LLM utilizzato è GPT-3.

Come mostra la tabella nella figura (Figura 10) qui sotto, il prompting few-shot con LLM generativi con pochi esempi è sufficiente per battere XLM, MASS, multilingual BART e persino la SOTA per diversi compiti di traduzione. Few-shot GPT-3 supera il lavoro precedente di traduzione automatica neurale non supervisionata di 5 BLEU quando si traduce in inglese, riflettendo la sua forza come modello di lingua per la traduzione in inglese. Tuttavia, è importante notare che il modello ha ottenuto scarsi risultati su determinati compiti di traduzione, come dall’inglese al rumeno, evidenziando le sue lacune e la necessità di valutare le prestazioni caso per caso.

Question-Answering

Nell’ultimo compito, confrontiamo le prestazioni di few-shot e fine-tuning su compiti di domanda-risposta. Il nome del compito è autoesplicativo. Esamineremo tre importanti benchmark per i compiti di domanda-risposta: PI QA (Procedural Information Question Answering), Trivia QA (conoscenze fattuali e risposta a domande) e CoQA (Conversational Question Answering). Il confronto viene effettuato rispetto alla SOTA per i modelli fine-tuned, e il generativo LLM utilizzato è GPT-3. Come mostrano i grafici nelle figure (Figura 11, Figura 12 e Figura 13) qui sotto, il prompting few-shot su LLM generativi con pochi esempi è sufficiente per battere la SOTA fine-tuned per PIQA e Trivia QA. Il modello non ha raggiunto la SOTA fine-tuned per CoQA, ma ha ottenuto un’accuratezza abbastanza simile.

Limitazioni del Prompting

I numerosi esempi e studi di caso nelle sezioni precedenti mostrano chiaramente come few-shot possa essere la soluzione preferita rispetto al fine-tuning per diversi compiti di ML basati sul linguaggio. Nella maggior parte dei casi, le tecniche di few-shot hanno ottenuto risultati migliori o prossimi ai modelli di linguaggio fine-tuned. Tuttavia, è essenziale notare che nella maggior parte dei casi d’uso di nicchia, il pre-training specifico del dominio avrebbe prestazioni nettamente superiori al fine-tuning [Fonte] e, di conseguenza, alle tecniche di prompting. Questa limitazione non può essere risolta a livello di progettazione del prompt e richiederebbe progressi significativi nello sviluppo di LLM generalizzati.

Un’altra limitazione fondamentale è l’allucinazione da parte dei LLM generativi. I LLM generalisti sono stati soggetti ad allucinazioni in quanto spesso sono incentrati sulla scrittura creativa. Questo è un altro motivo per cui i LLM specifici del dominio sono più precisi e ottengono risultati migliori sui loro benchmark specifici del settore.

Infine, l’utilizzo di LLM generalizzati come Chat GPT e GPT-4 comporterà rischi di privacy più elevati rispetto ai modelli fine-tuned o specifici del dominio, per i quali possiamo costruire la nostra istanza del modello. Questo è un motivo di preoccupazione, soprattutto per i casi d’uso che dipendono da dati utente proprietari o sensibili.

Conclusion

Le tecniche di suggerimento sono diventate un ponte tra LLM e le attività pratiche di apprendimento automatico basate sul linguaggio. Lo zero-shot, che non richiede dati etichettati preesistenti, dimostra il potenziale di questi modelli per generalizzare e adattarsi a nuovi problemi. Tuttavia, non riesce a raggiungere prestazioni simili o migliori rispetto al fine-tuning. Numerosi esempi e confronti delle prestazioni dei benchmark mostrano che il prompting few-shot offre un’alternativa convincente al fine-tuning in una serie di compiti. Presentando alcuni esempi etichettati all’interno dei suggerimenti, queste tecniche consentono ai modelli di adattarsi rapidamente a nuove classi con pochi dati etichettati. Inoltre, i dati sulle prestazioni elencati nelle sezioni precedenti suggeriscono che spostare le soluzioni esistenti per utilizzare il prompting few-shot con il Generative LLM sia un investimento valido. Eseguire esperimenti con gli approcci menzionati in questo articolo migliorerà le possibilità di raggiungere i propri obiettivi utilizzando le tecniche di suggerimento.

Punti Chiave

  1. Le Tecniche di Suggerimento Consentono un Utilizzo Pratico: Le tecniche di suggerimento sono un potente ponte tra i LLM generativi e le attività pratiche di apprendimento automatico basate sul linguaggio. Lo zero-shot permette ai modelli di generalizzare senza dati etichettati, mentre il few-shot sfrutta diversi esempi per adattarsi rapidamente. Queste tecniche semplificano il deployment, offrendo una via per un utilizzo efficace.
  2. Il Few-shot offre prestazioni migliori dello zero-shot: Il few-shot offre prestazioni migliori fornendo al LLM una guida mirata attraverso esempi etichettati. Consente al modello di utilizzare le sue conoscenze pre-addestrate beneficiando di pochi esempi specifici del compito, ottenendo risposte più accurate e pertinenti per il compito assegnato.
  3. Il Prompting Few-Shot Compete con il Fine-Tuning: Il few-shot è un’alternativa promettente al fine-tuning. Il few-shot raggiunge prestazioni simili o migliori in compiti di classificazione, comprensione del linguaggio, traduzione e risposta alle domande fornendo esempi etichettati all’interno dei suggerimenti. Eccelle soprattutto in scenari in cui i dati etichettati sono scarsi.
  4. Limitazioni e Considerazioni: Nonostante i vantaggi dei LLM generativi e delle tecniche di suggerimento, il pre-training specifico del dominio rimane la soluzione per compiti specializzati. Inoltre, i rischi per la privacy associati ai LLM generalizzati sottolineano la necessità di gestire i dati sensibili con attenzione.

Domande Frequenti

Riferimenti

  • Tom B. Brown e altri, Language models are few-shot learners, In Proceedings of the 34th International Conference on Neural Information Processing Systems (NIPS’20), 2020.
  • https://www.kaggle.com/datasets/crowdflower/twitter-airline-sentiment
  • https://www.kaggle.com/code/sdfsghdhdgresa/sentiment-analysis-using-bert-distillation
  •  https://github.com/Deepanjank/OpenAI/blob/main/open_ai_sentiment_few_shot.py
  • https://www.analyticsvidhya.com/blog/2023/08/domain-specific-llms/

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