Il few-shot prompting significa mostrare al modello alcuni esempi svolti di un compito, ognuno un input abbinato alla risposta che vuoi, prima di dargli l'input vero. Il modello legge lo schema e lo continua. Gli esempi sono il modo più rapido per fissare cose difficili da dire a parole: dove passa il confine tra due categorie, la forma esatta dell'output o il tono con cui scrive il tuo team.
Come funziona il few-shot prompting
Brown et al. 2020, "Language Models are Few-Shot Learners", hanno mostrato che GPT-3 poteva imparare un compito nuovo da una manciata di dimostrazioni messe nel prompt, senza riaddestramento. Si chiama apprendimento in contesto (in-context learning): nel modello non cambia nulla, e gli esempi influenzano solo la risposta a quel prompt. La volta successiva, gli esempi devono esserci di nuovo.
Il nome segue il numero di esempi. Un prompt zero-shot non ne ha, un prompt one-shot ne ha uno e un prompt few-shot ne ha diversi, di solito tra due e una manciata.
Zero-shot e few-shot a confronto
Le due schede qui sotto chiedono la stessa cosa con la stessa istruzione. L'unica differenza è che la seconda aggiunge quattro esempi etichettati prima del ticket vero.
Categoria: bug
L'utente ha reimpostato la password, ma quella nuova viene rifiutata all'accesso. Questo indica un problema nel flusso di reimpostazione della password, quindi molto probabilmente si tratta di un bug nel sistema di autenticazione.
Gli esempi hanno cambiato due cose. La prima è il formato: la risposta zero-shot ha aggiunto un titolo in grassetto e una spiegazione, mentre quella few-shot ha seguito gli esempi e ha dato una sola parola, che uno script può leggere direttamente. La seconda è la decisione. "Bug" è una lettura ragionevole del ticket, e la maggior parte delle persone la sceglierebbe. Ma questo team archivia i problemi di accesso sotto account, e il terzo esempio lo dice senza una sola parola di spiegazione. Nessuna istruzione menzionava quella regola; la portavano gli esempi.
Quanti esempi usare
Comincia con due a cinque. Bastano per la maggior parte dei compiti di formattazione e classificazione, e il prompt resta corto.
- Un esempio mostra un formato, ma il modello tende a copiarlo troppo. Se l'unico esempio è un riassunto di 30 parole su un cambio di prezzi, il riassunto successivo potrebbe uscire di 30 parole e stranamente concentrato sui soldi.
- Due o tre esempi diversi permettono al modello di vedere cosa hanno in comune (lo schema) e cosa varia (i dettagli).
- Per la classificazione, includi almeno un esempio per ogni etichetta, poi aggiungi i casi limite che andavano male senza esempi.
- Oltre una manciata, i miglioramenti di solito si riducono mentre ogni richiesta si allunga, e questo costa token e tempo. Se ti servono decine di esempi per ottenere il risultato giusto, forse il compito ha bisogno di un'istruzione più chiara o di un approccio del tutto diverso.
Scegliere buoni esempi
Il modello impara da tutto ciò che i tuoi esempi hanno in comune, non solo da quello che volevi insegnare.
- Copri i casi difficili. Gli esempi facili insegnano poco. I più utili stanno sul confine, come il ticket di accesso qui sopra.
- Varia la superficie. Mescola input brevi e lunghi, argomenti diversi e formulazioni diverse. Se tutte le recensioni positive nei tuoi esempi sono brevi, il modello potrebbe considerare la lunghezza come il segnale.
- Bilancia le etichette e mescola l'ordine. I modelli tendono a sbilanciarsi verso l'etichetta che compare più spesso negli esempi e verso quella che compare per ultima.
- Controlla ogni esempio. Un errore in un esempio è un'istruzione a commettere quell'errore.
- Usa input reali. Gli esempi presi dai tuoi dati reali somigliano a ciò che vedrà il modello molto più di quelli inventati.
Mantieni il formato identico
Tutti gli esempi devono usare le stesse etichette, gli stessi separatori e le stesse maiuscole, e l'input vero deve apparire esattamente come gli input di esempio. Nel prompt dei ticket, ogni esempio è "Ticket:" e poi "Etichetta:", e il prompt finisce con una riga "Etichetta:" aperta, che lascia una sola cosa naturale da scrivere dopo.
Per esempi più lunghi, racchiudi ciascuno tra segnali chiari come i tag <example>, così il modello capisce dove finisce uno e inizia il successivo; vedi delimitatori e tag XML. Nell'API puoi anche fornire gli esempi come turni precedenti della conversazione: un messaggio dell'utente con l'input di esempio, poi un messaggio dell'assistente con la risposta, ripetuto per ogni esempio.
I prompt few-shot diventano ottimi template di prompt riutilizzabili: l'istruzione e gli esempi restano fissi e cambia solo l'input. Il blocco qui sotto riscrive un messaggio di commit nello stile di un team. Scrivi il tuo messaggio nel campo e disattiva la parte degli esempi per vedere quanta parte dello stile portano loro.
feat(search): rendi la ricerca insensibile a maiuscole e minuscole
Nessuna delle regole è scritta: un tipo in minuscolo, un ambito tra parentesi, il verbo all'imperativo, nessun punto finale. Gli esempi le mostrano tutte e quattro, e la risposta le segue. Con gli esempi disattivati, il modello migliora comunque il messaggio, ma deve indovinare uno stile, e niente fa sì che la sua ipotesi coincida con il tuo.
Gli esempi few-shot possono mostrare anche un ragionamento, non solo risposte. Gli esempi svolti che mostrano i loro passaggi sono il modo in cui è stato presentato per la prima volta il chain of thought prompting. Con i modelli che ragionano internamente prima di rispondere, limita gli esempi a input, risposte e formato: passaggi di ragionamento già scritti possono allontanarli da una strada migliore, e alcuni fornitori consigliano di provare prima lo zero-shot con quei modelli.
Domande frequenti
Cos'è il few-shot prompting?
Il few-shot prompting consiste nell'includere nel prompt alcuni esempi di un compito, ognuno un input abbinato all'output corretto, prima dell'input vero. Il modello continua lo schema stabilito dagli esempi. È più utile per categorie personalizzate, formati insoliti e stili interni che è più facile mostrare che descrivere.
Quanti esempi deve avere un prompt few-shot?
Da due a cinque è un buon punto di partenza per la maggior parte dei compiti. Per la classificazione, includi almeno un esempio per etichetta, più i casi limite che il modello sbagliava senza esempi. Oltre una manciata, ogni esempio in più di solito aiuta meno e rende ogni richiesta più lunga.
Cos'è il one-shot prompting?
Il one-shot prompting dà al modello esattamente un esempio. Basta per mostrare un formato, ma il modello tende a copiare quell'unico esempio troppo da vicino, compresi lunghezza, formulazione e perfino argomento. Un secondo esempio diverso dice al modello quali caratteristiche sono lo schema e quali sono casuali.
Il modello impara dai miei esempi?
Solo per la richiesta attuale. Gli esempi influenzano la risposta perché sono nel contesto; i pesi del modello non cambiano e nella conversazione successiva non resta nulla. Si chiama apprendimento in contesto (in-context learning), ed è per questo che un prompt few-shot deve portarsi dietro i suoi esempi ogni volta che lo usi.
Esempi sbagliati possono peggiorare l'output?
Sì. Il modello copia tutto ciò che gli esempi hanno in comune, compresi errori, lunghezza e tono che non volevi. Se la maggior parte degli esempi condivide un'etichetta, il modello tende anche a sbilanciarsi verso quell'etichetta. Controlla che i tuoi esempi siano corretti, vari ed equilibrati.