pull/124/head
napo 1 year ago
parent 4aeb24d021
commit 4220148776

@ -9,7 +9,7 @@
"tools": "Strumenti",
"notebooks": "Notebook",
"datasets": "Dataset",
"readings": "Ulteriori letture",
"readings": "Letture",
"about": {
"title": "Informazioni",
"type": "page"

@ -2,7 +2,6 @@
Prompt Engineering Guide è un progetto di [DAIR.AI](https://github.com/dair-ai). Lo scopo è quello di educare ricercatori e professionisti sul prompt engineering (ingegneria dei prompt).
DAIR.AI aims to democratize AI research, education, and technologies. Our mission is to enable the next-generation of AI innovators and creators.
DAIR.AI mira a democratizzare la ricerca, l'istruzione e le tecnologie dell'IA. La nostra missione è quella di abilitare la prossima generazione di innovatori e creatori di AI.

@ -1,5 +1,5 @@
{
"pal": "Program-Aided Language Models",
"pal": "Programma-Assistito di Modelli Linguistici",
"generating": "Generazione di dati",
"workplace_casestudy": "Graduate Job Classification Case Study"
"workplace_casestudy": "Studio sul caso della classificazione del lavoro dei laureati"
}

@ -4,7 +4,7 @@ I LLM hanno una forte capacità di generare testi coerenti. L'uso di strategie d
*Prompt:*
```
Produce 10 esempi per l'analisi del sentiment. Gli esempi sono classificati come positivi o negativi. Produrre 2 esempi negativi e 8 esempi positivi. Utilizzate questo formato per gli esempi:
Produci 10 esempi per l'analisi del sentimento. Gli esempi sono classificati come positivi o negativi. Produrre 2 esempi negativi e 8 esempi positivi. Utilizzate questo formato per gli esempi:
D: <sentenza>
A: <sentimento
```
@ -42,5 +42,5 @@ D: Ho appena ricevuto una notizia terribile.
R: Negativa
```
Tutto questo è molto utile. Questo esempio, lo usiamo, anche per un altro test in un'altra sezione delle guide.
Questo risultato è molto utile e lo useremo anche per un altro test in un'altra sezione di questa guida.

@ -1,6 +1,6 @@
# Studio di caso sulla classificazione del lavoro dei laureati
# Studio sul caso della classificazione del lavoro dei laureati
[Clavié et al., 2023](https://arxiv.org/abs/2303.07142) provide a case-study on prompt-engineering applied to a medium-scale text classification use-case in a production system. Using the task of classifying whether a job is a true "entry-level job", suitable for a recent graduate, or not, they evaluated a series of prompt engineering techniques and report their results using GPT-3.5 (`gpt-3.5-turbo`).
[Clavié et al., 2023](https://arxiv.org/abs/2303.07142) fornisce un caso di studio sul prompt engineering applicato a un caso d'uso di classificazione di testi su media scala in un sistema di produzione. Utilizzando il compito di classificare se un lavoro è un vero "entry-level job", adatto a un neolaureato, o meno, hanno valutato una serie di tecniche di prompt engineering e riportano i loro risultati utilizzando GPT-3.5 (`gpt-3.5-turbo`).
Il lavoro mostra che LLMs supera tutti gli altri modelli testati, compresa una linea di base estremamente forte in DeBERTa-V3. Anche `gpt-3.5-turbo` supera sensibilmente le vecchie varianti di GPT3 in tutte le metriche chiave, ma richiede un ulteriore parsing dell'output poiché la sua capacità di attenersi a un modello sembra essere peggiore rispetto alle altre varianti.

@ -1,9 +1,9 @@
# Guida al Prompt Engineering
Prompt engineering is a relatively new discipline for developing and optimizing prompts to efficiently use language models (LMs) for a wide variety of applications and research topics. Prompt engineering skills help to better understand the capabilities and limitations of large language models (LLMs).
Prompt engineering è una disciplina relativamente nuova che consente di sviluppare e ottimizzare i prompt per utilizzare in modo efficiente i modelli linguistici (LM) per un'ampia varietà di applicazioni e argomenti di ricerca. Le competenze di ingegneria dei prompt aiutano a comprendere meglio le capacità e i limiti dei modelli linguistici di grandi dimensioni (LLM).
Researchers use prompt engineering to improve the capacity of LLMs on a wide range of common and complex tasks such as question answering and arithmetic reasoning. Developers use prompt engineering to design robust and effective prompting techniques that interface with LLMs and other tools.
Chi si occupa di ricerca usa il prompt engineering per migliorare le capacità dei LLM su un'ampia gamma di compiti comuni e complessi, come la risposta a domande e il ragionamento aritmetico. Chi sviluppa software invece per progettare tecniche di prompt robuste ed efficaci che si interfacciano con i LLM e con altri strumenti.
Prompt engineering is not just about designing and developing prompts. It encompasses a wide range of skills and techniques that are useful for interacting and developing with LLMs. It's an important skill to interface, build with, and understand capabilities of LLMs. You can use prompt engineering to improve safety of LLMs and build new capabilities like augmenting LLMs with domain knowledge and external tools.
Prompt engineeringnon riguarda solo la progettazione e lo sviluppo di prompt. Comprende un'ampia gamma di competenze, tecniche ed utili per interagire e sviluppare con i LLM. È un'abilità importante per interfacciarsi, costruire e comprendere le capacità dei LLM. È possibile utilizzare l'ingegneria dei prompt per migliorare la sicurezza dei LLM e costruire nuove funzionalità, come l'aumento dei LLM con la conoscenza del dominio e gli strumenti esterni.
Motivated by the high interest in developing with LLMs, we have created this new prompt engineering guide that contains all the latest papers, learning guides, models, lectures, references, new LLM capabilities, and tools related to prompt engineering.
Motivati dall'elevato interesse per lo sviluppo con gli LLM, abbiamo creato questa nuova guida all'ingegneria dei prompt che contiene tutti i documenti più recenti, le guide all'apprendimento, i modelli, le lezioni, i riferimenti, le nuove funzionalità degli LLM e gli strumenti relativi all'ingegneria dei prompt.

@ -0,0 +1,14 @@
{
"zeroshot": "Zero-shot Prompting",
"fewshot": "Few-shot Prompting",
"cot": "Chain-of-Thought Prompting",
"consistency": "Self-Consistency",
"knowledge": "Generate Knowledge Prompting",
"ape": "Automatic Prompt Engineer",
"activeprompt": "Prompt Attivo",
"dsp": "Directional Stimulus Prompting",
"react": "ReAct",
"multimodalcot": "Multimodal CoT",
"graph": "Graph Prompting"
}

@ -0,0 +1,12 @@
# Prompt attivo
import { Callout, FileTree } from 'nextra-theme-docs'
import {Screenshot} from 'components/screenshot'
import ACTIVE from '../../img/active-prompt.png'
I metodi della catena del pensiero (CoT) si basano su un insieme fisso di esempi annotati manualmente. Il problema è che gli esempi potrebbero non essere i più efficaci per i diversi compiti. Per ovviare a questo problema, [Diao et al., (2023)](https://arxiv.org/pdf/2302.12246.pdf) hanno recentemente proposto un nuovo approccio di prompting, chiamato Active-Prompt, per adattare i LLM a diversi prompt di esempi specifici per i vari compiti (progettati manualmente con ragionamenti CoT).
Di seguito viene illustrato l'approccio. Il primo passo consiste nell'interrogare l'LLM con o senza alcuni esempi di CoT. Vengono generate *k* possibili risposte per un insieme di domande di addestramento. Sulla base delle *k* risposte viene calcolata una metrica di incertezza (viene utilizzato il disaccordo). Le domande più incerte vengono selezionate manualmente per l'annotazione. I nuovi esemplari annotati vengono poi utilizzati per dedurre ogni domanda.
<Screenshot src={ACTIVE} alt="ACTIVE" />
Sorgente immagine: [Diao et al., (2023)](https://arxiv.org/pdf/2302.12246.pdf)

@ -0,0 +1,26 @@
# Automatic Prompt Engineer (APE)
import { Callout, FileTree } from 'nextra-theme-docs'
import {Screenshot} from 'components/screenshot'
import APE from '../../img/APE.png'
import APECOT from '../../img/ape-zero-shot-cot.png'
<Screenshot src={APE} alt="APE" />
Image Source: [Zhou et al., (2022)](https://arxiv.org/abs/2211.01910)
[Zhou et al., (2022)](https://arxiv.org/abs/2211.01910) propone automatic prompt engineer (APE), un framework per la generazione e la selezione automatica delle istruzioni. Il problema della generazione delle istruzioni viene inquadrato come sintesi del linguaggio naturale e affrontato come un problema di ottimizzazione black-box che utilizza gli LLM per generare e ricercare le soluzioni candidate.
La prima fase coinvolge un modello linguistico di grandi dimensioni (come modello di inferenza) a cui vengono fornite dimostrazioni in uscita per generare istruzioni candidate per un compito. Queste soluzioni candidate guidano la procedura di ricerca. Le istruzioni vengono eseguite utilizzando un modello di destinazione e poi viene selezionata l'istruzione più appropriata in base ai punteggi di valutazione calcolati.
APE scopre un prompt di zero-shot CoT migliore del prompt "Pensiamo passo dopo passo", progettato manualmente ([Kojima et al., 2022](https://arxiv.org/abs/2205.11916)).
Il prompt "Lavoriamo passo dopo passo per essere sicuri di avere la risposta giusta" suscita un ragionamento a catena e migliora le prestazioni nei benchmark MultiArith e GSM8K:
<Screenshot src={APECOT} alt="APECOT" />
Image Source: [Zhou et al., (2022)](https://arxiv.org/abs/2211.01910)
Questa ricerca tratta un argomento importante legato al prompt engineering, ovvero l'idea di ottimizzare automaticamente i prompt. Anche se in questa guida non approfondiamo l'argomento, ecco alcuni documenti chiave se siete interessati all'argomento:
- [AutoPrompt](https://arxiv.org/abs/2010.15980) - propone un approccio per la creazione automatica di suggerimenti per una serie di compiti diversi, basato sulla ricerca guidata dal gradiente.
- [Prefix Tuning](https://arxiv.org/abs/2101.00190) - un'alternativa leggera alla sintonizzazione fine che aggiunge un prefisso continuo addestrabile per i compiti NLG.
- [Prompt Tuning](https://arxiv.org/abs/2104.08691) - propone un meccanismo per l'apprendimento di suggerimenti morbidi attraverso la retropropagazione.

@ -0,0 +1,68 @@
# Self-Consistency
Forse una delle tecniche più avanzate per l'ingegneria del prompt è l'autoconsistenza. Proposta da [Wang et al. (2022)](https://arxiv.org/pdf/2203.11171.pdf), l'autoconsistenza mira a "sostituire l'ingenua decodifica avida utilizzata nel prompt a catena di pensieri". L'idea è quella di campionare percorsi di ragionamento multipli e diversificati attraverso la CoT a pochi colpi e di utilizzare le generazioni per selezionare la risposta più coerente. Questo aiuta a migliorare le prestazioni della richiesta di CoT su compiti che coinvolgono l'aritmetica e il ragionamento di senso comune.
Proviamo il seguente esempio di ragionamento aritmetico:
*Prompt:*
```
Quando avevo 6 anni mia sorella aveva la metà dei miei anni.
Ora ho 70 anni, quanti ne ha mia sorella?
```
*Output:*
```
35
```
L'output è sbagliato! Come possiamo migliorare questo risultato con l'autoconsistenza? Proviamo. Utilizzeremo gli esempi di pochi scatti di Wang et al. 2022 (Tabella 17):
*Prompt:*
```
D: Nel boschetto ci sono 15 alberi. Gli operai del boschetto pianteranno gli alberi oggi. Quando avranno finito,
ci saranno 21 alberi. Quanti alberi hanno piantato oggi gli operai del boschetto?
R: Iniziamo con 15 alberi. Successivamente abbiamo 21 alberi. La differenza deve essere il numero di alberi che hanno piantato. Quindi, devono aver piantato 21 - 15 = 6 alberi. La risposta è 6.
D: Se ci sono 3 auto nel parcheggio e ne arrivano altre 2, quante auto ci sono nel parcheggio?
R: Ci sono già 3 macchine nel parcheggio. Ne arrivano altre 2. Ora ci sono 3 + 2 = 5 auto. La risposta è 5.
D: Leah aveva 32 cioccolatini e sua sorella 42. Se ne hanno mangiati 35, quanti pezzi sono rimasti in totale?
R: Leah aveva 32 cioccolatini e la sorella di Leah ne aveva 42. Ciò significa che in origine c'erano 32 + 42 = 74
cioccolatini. 35 sono stati mangiati. Quindi in totale hanno ancora 74 - 35 = 39 cioccolatini. La risposta è 39.
D: Jason aveva 20 lecca-lecca. Ha dato a Denny alcuni lecca-lecca. Ora Jason ha 12 lecca-lecca. Quanti lecca-lecca Jason ha dato a Denny?
R: Jason aveva 20 lecca-lecca. Poiché ora ne ha solo 12, deve aver dato il resto a Denny. Il numero di
lecca-lecca che ha dato a Denny deve essere 20 - 12 = 8 lecca-lecca. La risposta è 8.
D: Shawn ha cinque giocattoli. Per Natale ha ricevuto due giocattoli ciascuno da mamma e papà. Quanti giocattoli ha ora?
R: Ha 5 giocattoli. Ne ha ricevuti 2 dalla mamma, quindi ha 5 + 2 = 7 giocattoli. Poi ne ha ricevuti altri 2 dal papà, quindi in totale ha 7 + 2 = 9 giocattoli. La risposta è 9.
D: Nella sala server c'erano nove computer. Ogni giorno, da lunedì a giovedì, sono stati installati altri cinque computer. Quanti computer ci sono ora nella sala server?
R: Ci sono 4 giorni da lunedì a giovedì. Ogni giorno sono stati aggiunti 5 computer. Ciò significa che in totale sono stati aggiunti 4 * 5 = 20 computer. All'inizio c'erano 9 computer, quindi ora ci sono 9 + 20 = 29 computer. La risposta è 29.
D: Michael aveva 58 palline da golf. Martedì ha perso 23 palline da golf. Mercoledì ha perso altre 2 palline. Quante palline da golf alla fine di mercoledì?
R: Michael aveva inizialmente 58 palline. Martedì ne ha perse 23, quindi ha 58 - 23 = 35 palline. Il mercoledì ne ha perse altre 2, quindi ora ha 35 - 2 = 33 palline. La risposta è 33.
D: Olivia ha 23 euro e ha comprato cinque bagel a 3 euro l'uno. Quanti soldi le sono rimasti?
R: Ha comprato 5 bagel a 3 euro l'uno. Ciò significa che ha speso 5
D: Quando avevo 6 anni mia sorella aveva la metà dei miei anni. Ora che ho 70 anni, quanti ne ha mia sorella?
R:
```
*Output 1:*
```
Quando avevo 6 anni mia sorella aveva la metà dei miei anni, quindi ne aveva 3. Ora ne ho 70, quindi lei ne ha 70 - 3 = 67. La risposta è 67.
```
*Output 2:*
```
Quando il narratore aveva 6 anni, sua sorella aveva la metà dei suoi anni, cioè 3. Ora che il narratore ha 70 anni, sua sorella avrebbe 70 - 3 = 67 anni. La risposta è 67.
```
*Output 3:*
```
Quando avevo 6 anni mia sorella aveva la metà dei miei anni, quindi ne aveva 3. Ora ne ho 70, quindi lei ne ha 70/2 = 35. La risposta è 35.
```
Il calcolo della risposta finale comporta alcuni passaggi (per i dettagli, consultare l'articolo scientifico), ma per semplicità possiamo vedere che è già emersa una risposta maggioritaria, che diventerà quindi essenzialmente la risposta finale.

@ -0,0 +1,92 @@
# Chain-of-Thought Prompting
import {Screenshot} from 'components/screenshot'
import COT from '../../img/cot.png'
import ZEROCOT from '../../img/zero-cot.png'
## Chain-of-Thought (CoT) Prompting
<Screenshot src={COT} alt="COT" />
Image Source: [Wei et al. (2022)](https://arxiv.org/abs/2201.11903)
Introdotto in [Wei et al. (2022)](https://arxiv.org/abs/2201.11903), il prompt a catena di pensieri (CoT) consente di ottenere capacità di ragionamento complesse attraverso fasi di ragionamento intermedie. Si può combinare con il prompt few-shot per ottenere risultati migliori su compiti più complessi che richiedono un ragionamento prima di rispondere.
*Prompt:*
```
La somma dei numeri dispari di questo gruppo corrisponde ad un numero pari: 4, 8, 9, 15, 12, 2, 1.
R: Sommando tutti i numeri dispari (9, 15, 1) si ottiene 25. La risposta è Falsa.
La somma dei numeri dispari di questo gruppo è un numero pari: 17, 10, 19, 4, 8, 12, 24.
R: La somma di tutti i numeri dispari (17, 19) risulta 36. La risposta è Corretta.
La somma dei numeri dispari di questo gruppo è un numero pari: 16, 11, 14, 4, 8, 13, 24.
A: La somma di tutti i numeri dispari (11, 13) risulta 24. La risposta è Corretta.
La somma dei numeri dispari di questo gruppo è un numero pari:: 17, 9, 10, 12, 13, 4, 2.
A: La somma di tutti i numeri dispari (17, 9, 13) risulta 39. La risposta è Falsa.
I numeri dispari di questo gruppo si sommano in un numero pari.: 15, 32, 5, 13, 82, 7, 1.
A:
```
*Output:*
```
La somma di numeri dispari (15, 5, 13, 7, 1) risulta 41. La risposta è Falsa.
```
Wow! Possiamo vedere un risultato perfetto quando abbiamo fornito la fase di ragionamento. In effetti, possiamo risolvere questo compito fornendo ancora meno esempi, cioè un solo esempio sembra sufficiente:
*Prompt:*
```
La somma dei numeri dispari in questo gruppo è un numero pari: 4, 8, 9, 15, 12, 2, 1.
R: Sommando tutti i numeri dispari (9, 15, 1) si ottiene 25. La risposta è Falsa.
La somma dei numeri dispari in questo gruppo è un numero pari: 15, 32, 5, 13, 82, 7, 1.
R:
```
*Output:*
```
La somma dei numeri dispari (15, 5, 13, 7, 1) è 41. La risposta è Falsa.
```
Si tenga presente che gli autori sostengono che si tratta di una capacità emergente che si manifesta con modelli linguistici sufficientemente grandi.
## Zero-shot COT Prompting
<Screenshot src={ZEROCOT} alt="Zero-shot COT" />
Image Source: [Kojima et al. (2022)](https://arxiv.org/abs/2205.11916)
Un'idea emersa più di recente è quella della [zero-shot CoT](https://arxiv.org/abs/2205.11916) (Kojima et al. 2022) che consiste essenzialmente nell'aggiungere "Pensiamo passo dopo passo" al prompt originale. Proviamo un problema semplice e vediamo come si comporta il modello:
*Prompt:*
```
Sono andato al mercato e ho comprato 10 mele. Ho dato 2 mele al vicino e 2 al riparatore. Poi sono andato a comprare altre 5 mele e ne ho mangiata una. Quante mele mi sono rimaste?
```
*Output:*
```
11 mele
```
La risposta è errata! Proviamo ora con il prompt speciale.
*Prompt:*
```
Sono andato al mercato e ho comprato 10 mele. Ho dato 2 mele al vicino e 2 all'operaio. Poi sono andato a comprare altre 5 mele e ne ho mangiata una. Quante mele mi sono rimaste?
Pensiamo passo dopo passo.
```
*Output:*
```
In primo luogo, si è partiti da 10 mele.
Hai dato via 2 mele al vicino e 2 all'operaio, quindi ti sono rimaste 6 mele.
Poi ha comprato altre 5 mele, per cui ora ne ha 11.
Infine, avete mangiato 1 mela, quindi ti rimarranno 10 mele.
```
È impressionante come questo semplice prompt sia efficace nello svolgere questo compito. Dimostra di essere particolarmente utile quando non si hanno molti esempi da utilizzare nel prompt.

@ -0,0 +1,16 @@
# Directional Stimulus Prompting
import { Callout, FileTree } from 'nextra-theme-docs'
import {Screenshot} from 'components/screenshot'
import DSP from '../../img/dsp.jpeg'
[Li et al., (2023)](https://arxiv.org/abs/2302.11520) propone una nuova tecnica di prompting per guidare meglio il LLM nella generazione della sintesi desiderata.
Per generare lo stimolo/il suggerimento viene addestrata una politica LM sintonizzabile. Si vede un maggiore uso di RL per ottimizzare i LLM.
La figura seguente mostra come il Directional Stimulus Prompting si confronta con il prompt standard. La politica LM può essere piccola e ottimizzata per generare i suggerimenti che guidano un LLM congelato black-box.
<Screenshot src={DSP} alt="DSP" />
Image Source: [Li et al., (2023)](https://arxiv.org/abs/2302.11520)
Esempio completo in arrivo!

@ -0,0 +1,108 @@
# Few-Shot Prompting
Sebbene i modelli di grandi dimensioni dimostrino notevoli capacità di apprendimento zero-shot, non sono ancora all'altezza di compiti più complessi quando si utilizza questa impostazione. Il prompt few-shot può essere utilizzato come tecnica per consentire l'apprendimento in contesto, in cui forniamo dimostrazioni nel prompt per guidare il modello verso prestazioni migliori. Le dimostrazioni servono come condizionamento per gli esempi successivi in cui vorremmo che il modello generasse una risposta.
Secondo [Touvron et al. 2023](https://arxiv.org/pdf/2302.13971.pdf) l'uso di poche proprietà appaiono per la prima volta quando i modelli vengono scalati a una dimensione sufficiente [(Kaplan et al., 2020)](https://arxiv.org/abs/2001.08361).
Dimostriamo il prompt a pochi colpi con un esempio presentato da [Brown et al. 2020](https://arxiv.org/abs/2005.14165). Nell'esempio, il compito consiste nell'utilizzare correttamente una nuova parola in una frase.
*Prompt:*
```
Il "whatpu" è un piccolo animale peloso originario della Tanzania. Un esempio di frase che utilizza la parola whatpu è:
Eravamo in viaggio in Africa e abbiamo visto questi simpaticissimi whatpu.
Fare un "farduddle" significa saltare su e giù molto velocemente.
Un esempio di frase che usa la parola farduddle è:
```
*Output:*
```
Quando abbiamo vinto la partita, abbiamo iniziato a festeggiare tutti insieme.
```
Possiamo osservare che il modello ha in qualche modo imparato a svolgere il compito fornendogli un solo esempio (cioè, 1-shot). Per compiti più difficili, possiamo sperimentare l'aumento delle dimostrazioni (ad esempio, 3-shot, 5-shot, 10-shot, ecc.).
Seguendo i risultati di [Min et al. (2022)](https://arxiv.org/abs/2202.12837), ecco qualche altro consiglio sulle dimostrazioni/esempi quando si fanno pochi shot:
- "lo spazio delle etichette e la distribuzione del testo di input specificato dalle dimostrazioni sono entrambi importanti (indipendentemente dal fatto che le etichette siano corrette per i singoli input)".
- anche il formato utilizzato gioca un ruolo fondamentale nelle prestazioni, anche se si utilizzano solo etichette casuali, è molto meglio che non averne affatto.
- ulteriori risultati mostrano che anche la selezione di etichette casuali da una vera distribuzione di etichette aiuta (invece che da una distribuzione uniforme).
Proviamo alcuni esempi. Partiamo innanzitutto un esempio con etichette casuali (cioè le etichette Negativo e Positivo assegnate in modo casuale agli ingressi):
*Prompt:*
```
E' fantastico! // Negativo
Questo è brutto! // Positivo
Wow, quel film era fantastico! // Positivo
Che spettacolo orribile! //
```
*Output:*
```
Negativo
```
Si ottiene ancora la risposta corretta, anche se le etichette sono state generate casualmente. Si noti che abbiamo mantenuto anche il formato, il che aiuta. In effetti, con ulteriori esperimenti, sembra che i nuovi modelli GPT che stiamo sperimentando stiano diventando più robusti anche nei confronti dei formati casuali. Esempio:
*Prompt:*
```
Positivo Questo è fantastico!
Questo è brutto! Negativo
Wow, questo film era fantastico!
Positivo
Che spettacolo orribile! --
```
*Output:*
```
Negativo
```
Non c'è coerenza nel formato di cui sopra, ma il modello ha comunque previsto l'etichetta corretta. Dobbiamo condurre un'analisi più approfondita per confermare se questo vale per compiti diversi e più complessi, comprese diverse varianti di prompt.
### Limiti di un Few-shot Prompting
Il prompt standard di few-shot funziona bene per molti compiti, ma non è ancora una tecnica perfetta, soprattutto quando si tratta di compiti di ragionamento più complessi. Dimostriamo perché questo è il caso. Ricordate l'esempio precedente in cui abbiamo fornito il seguente compito:
```
La somma dei numeri dispari di questo gruppo è un numero pari: 15, 32, 5, 13, 82, 7, 1.
D:
```
Se si riprova, il modello produce il seguente risultato:
```
Sì, i numeri dispari di questo gruppo si sommano a 107, che è un numero pari.
```
Questa non è la risposta corretta, che non solo evidenzia i limiti di questi sistemi, ma anche la necessità di un prompt engineering più avanzato.
Proviamo ad aggiungere alcuni esempi per vedere se la richiesta a few-shot migliora i risultati.
*Prompt:*
```
La somma dei numeri dispari di questo gruppo è un numero pari: 4, 8, 9, 15, 12, 2, 1.
R: La risposta è Falsa.
La somma dei numeri dispari di questo gruppo è un numero pari: 17, 10, 19, 4, 8, 12, 24.
R: La risposta è Corretta
La somma dei numeri dispari di questo gruppo è un numero pari: 16, 11, 14, 4, 8, 13, 24.
R: La risposta è Corretta
La somma dei numeri dispari di questo gruppo è un numero pari: 17, 9, 10, 12, 13, 4, 2.
R: La risposta è Falsa.
La somma dei numeri dispari di questo gruppo è un numero pari: 15, 32, 5, 13, 82, 7, 1.
R:
```
*Output:*
```
La risposta è Corretta
```
Non ha funzionato. Sembra che un prompt di few-shot non sia sufficiente per ottenere risposte affidabili per questo tipo di problemi di ragionamento. L'esempio precedente fornisce informazioni di base sul compito. Se si guarda più da vicino, il tipo di compito che abbiamo introdotto comporta alcune fasi di ragionamento in più. In altre parole, potrebbe essere utile scomporre il problema in fasi e dimostrarlo al modello. Più recentemente, il [chain-of-thought (CoT) prompting] (https://arxiv.org/abs/2201.11903) è stato diffuso per affrontare compiti più complessi di ragionamento aritmetico, di senso comune e simbolico.
Nel complesso, sembra che fornire esempi sia utile per risolvere alcuni compiti. Quando il prompt zero-shot e quello a few-shot non sono sufficienti, potrebbe significare che quanto appreso dal modello non è sufficiente per svolgere bene il compito. Da qui si consiglia di iniziare a pensare a una messa a punto dei modelli o a sperimentare tecniche di prompt più avanzate. A seguire parleremo di una delle tecniche di prompting più diffuse, chiamata prompting a catena di pensieri (chain of thought), che ha guadagnato molta popolarità.

@ -0,0 +1,5 @@
# GraphPrompts
[Liu et al., 2023](https://arxiv.org/abs/2302.08043) presenta GraphPrompt, un nuovo framework di prompting per i grafi per migliorare le prestazioni dei compiti a valle.
Altre novità in arrivo!

@ -0,0 +1,92 @@
# Generated Knowledge Prompting
import {Screenshot} from 'components/screenshot'
import GENKNOW from '../../img/gen-knowledge.png'
<Screenshot src={GENKNOW} alt="GENKNOW" />
Fonte dell'immagine: [Liu et al. 2022](https://arxiv.org/pdf/2110.08387.pdf)
I LLM continuano a essere migliorati ed una tecnica popolare include la capacità di incorporare conoscenze o informazioni per aiutare il modello a fare previsioni più accurate.
Utilizzando un'idea simile, è possibile utilizzare il modello anche per generare conoscenza prima di fare una previsione? È quello che si cerca di fare nell'articolo di [Liu et al. 2022](https://arxiv.org/pdf/2110.08387.pdf): generare conoscenza da utilizzare come parte del prompt. In particolare, quanto è utile per compiti come il ragionamento di senso compiuto?
Proviamo con un semplice prompt:
*Prompt:*
```
Una parte del golf consiste nel cercare di ottenere un totale di punti più alto degli altri. Sì o no?
```
*Output:*
```
Sì.
```
Questo tipo di errore rivela i limiti dei LLM nell'eseguire compiti che richiedono una maggiore conoscenza del mondo. Come possiamo migliorare questo aspetto con la generazione di conoscenza?
Innanzitutto, generiamo alcune "conoscenze":
*Prompt:*
```
Input: La Grecia è più grande del Messico.
Conoscenza: La Grecia ha una superficie di circa 131.957 km², mentre il Messico ha una superficie di circa 1.964.375 km², il che rende il Messico più grande della Grecia del 1.389%.
Input: Gli occhiali si appannano sempre.
Conoscenza: La condensa si verifica sulle lenti degli occhiali quando il vapore acqueo prodotto dal sudore, dall'alito e dall'umidità ambientale si deposita su una superficie fredda, si raffredda e si trasforma in minuscole gocce di liquido, formando una pellicola che si presenta come nebbia. Le lenti saranno relativamente fresche rispetto al respiro, soprattutto quando l'aria esterna è fredda.
Input: Un pesce è capace di pensare.
Conoscenza: I pesci sono più intelligenti di quanto sembri. In molte aree, come la memoria, i loro poteri cognitivi corrispondono o superano quelli dei vertebrati "superiori", compresi i primati non umani. La memoria a lungo termine dei pesci li aiuta a tenere traccia di complesse relazioni sociali.
Input: Un effetto comune del fumare molte sigarette nel corso della vita è una probabilità più alta del normale di ammalarsi di cancro ai polmoni.
Conoscenza: Coloro che fumavano costantemente meno di una sigaretta al giorno nel corso della loro vita avevano un rischio nove volte superiore di morire di cancro ai polmoni rispetto ai non fumatori. Tra le persone che fumavano tra una e 10 sigarette al giorno, il rischio di morire di cancro ai polmoni era quasi 12 volte superiore a quello dei non fumatori.
Input: Un sasso ha le stesse dimensioni di un sassolino.
Knowledge: Un ciottolo è un clasto di roccia con una dimensione delle particelle compresa tra 4 e 64 millimetri secondo la scala Udden-Wentworth della sedimentologia. I ciottoli sono generalmente considerati più grandi dei granuli (da 2 a 4 millimetri di diametro) e più piccoli dei ciottoli (da 64 a 256 millimetri di diametro).
Input: Una parte del golf consiste nel cercare di ottenere un totale di punti più alto degli altri.
Knowledge:
```
*Conoscenza 1:*
```
L'obiettivo del golf è giocare una serie di buche nel minor numero di colpi. Un round di golf consiste tipicamente in 18 buche. Ogni buca viene giocata una volta nel corso del round su un campo da golf standard. Ogni colpo viene conteggiato come un punto e il numero totale di colpi viene utilizzato per determinare il vincitore della partita.
```
*Conoscenza 2:*
```
Il golf è uno sport di precisione con bastoni e palline in cui i giocatori (o golfisti) usano diversi tipi di bastoni per colpire le palline in una serie di buche su un campo utilizzando il minor numero di colpi. L'obiettivo è completare il percorso con il punteggio più basso, calcolato sommando il numero totale di colpi effettuati su ogni buca. Il giocatore con il punteggio più basso vince la partita.
```
Utilizziamo il prompt fornito nel documento di [Liu et al. 2022](https://arxiv.org/pdf/2110.08387.pdf).
Il passo successivo è integrare le conoscenze e ottenere una previsione. Ho riformattato la domanda in formato D/R per guidare il formato della risposta.
*Prompt:*
```
Domanda: Una parte del golf consiste nel cercare di ottenere un totale di punti più alto degli altri. Sì o no?
Conoscenza: L'obiettivo del golf è giocare una serie di buche nel minor numero di colpi. Un round di golf consiste tipicamente in 18 buche. Ogni buca viene giocata una volta nel corso del round su un campo da golf standard. Ogni colpo viene conteggiato come un punto e il numero totale di colpi viene utilizzato per determinare il vincitore della partita.
Spiegazione e risposta:
```
*Risposta 1 (fiducia molto alta):*
```
No, l'obiettivo del golf non è ottenere un punteggio totale più alto degli altri. L'obiettivo è piuttosto quello di giocare una serie di buche nel minor numero di colpi. Il numero totale di colpi viene utilizzato per determinare il vincitore della partita, non il numero totale di punti.
```
```
Domanda: Una parte del golf consiste nel cercare di ottenere un totale di punti più alto degli altri. Sì o no?
Conoscenza: Il golf è uno sport di precisione con bastoni e palline in cui i giocatori (o golfisti) usano diversi tipi di bastoni per colpire le palline in una serie di buche su un campo utilizzando il minor numero di colpi. L'obiettivo è completare il percorso con il punteggio più basso, calcolato sommando il numero totale di colpi effettuati su ogni buca. Il giocatore con il punteggio più basso vince la partita.
Spiegazione e risposta:
```
*Risposta 2 (la fiducia è molto più bassa):*
```
Sì, una parte del golf consiste nel cercare di ottenere un totale di punti più alto degli altri. Ogni giocatore cerca di completare il percorso con il punteggio più basso, che viene calcolato sommando il numero totale di colpi effettuati in ogni buca. Il giocatore con il punteggio più basso vince la partita.
```
Con questo esempio sono successe cose davvero interessanti. Nella prima risposta, il modello era molto sicuro di sé, ma nella seconda non tanto. Ho semplificato il processo a scopo dimostrativo, ma ci sono alcuni dettagli in più da considerare per arrivare alla risposta finale. Per saperne di più, consultate l'articolo scientifico.

@ -0,0 +1,15 @@
# Multimodal CoT Prompting
import { Callout, FileTree } from 'nextra-theme-docs'
import {Screenshot} from 'components/screenshot'
import MCOT from '../../img/multimodal-cot.png'
[Zhang et al. (2023)](https://arxiv.org/abs/2302.00923) recently proposed a multimodal chain-of-thought prompting approach. Traditional CoT focuses on the language modality. In contrast, Multimodal CoT incorporates text and vision into a two-stage framework. The first step involves rationale generation based on multimodal information. This is followed by the second phase, answer inference, which leverages the informative generated rationales.
The multimodal CoT model (1B) outperforms GPT-3.5 on the ScienceQA benchmark.
<Screenshot src={MCOT} alt="MCOT" />
Image Source: [Zhang et al. (2023)](https://arxiv.org/abs/2302.00923)
Further reading:
- [Language Is Not All You Need: Aligning Perception with Language Models](https://arxiv.org/abs/2302.14045) (Feb 2023)

@ -0,0 +1,14 @@
# ReAct
import { Callout, FileTree } from 'nextra-theme-docs'
import {Screenshot} from 'components/screenshot'
import REACT from '../../img/react.png'
[Yao et al., 2022](https://arxiv.org/abs/2210.03629) introduced a framework where LLMs are used to generate both reasoning traces and task-specific actions in an interleaved manner. Generating reasoning traces allow the model to induce, track, and update action plans, and even handle exceptions. The action step allows to interface with and gather information from external sources such as knowledge bases or environments.
The ReAct framework can allow LLMs to interact with external tools to retrieve additional information that leads to more reliable and factual responses.
<Screenshot src={REACT} alt="REACT" />
Image Source: [Yao et al., 2022](https://arxiv.org/abs/2210.03629)
Full example coming soon!

@ -0,0 +1,21 @@
# Zero-Shot Prompting
LLMs today trained on large amounts of data and tuned to follow instructions, are capable of performing tasks zero-shot. We tried a few zero-shot examples in the previous section. Here is one of the examples we used:
*Prompt:*
```
Classify the text into neutral, negative or positive.
Text: I think the vacation is okay.
Sentiment:
```
*Output:*
```
Neutral
```
Note that in the prompt above we didn't provide the model with any examples -- that's the zero-shot capabilities at work.
Instruction tuning has shown to improve zero-shot learning [Wei et al. (2022)](https://arxiv.org/pdf/2109.01652.pdf). Instruction tuning is essentially the concept of finetuning models on datasets described via instructions. Furthermore, [RLHF](https://arxiv.org/abs/1706.03741) (reinforcement learning from human feedback) has been adopted to scale instruction tuning wherein the model is aligned to better fit human preferences. This recent development powers models like ChatGPT. We will discuss all these approaches and methods in upcoming sections.
When zero-shot doesn't work, it's recommended to provide demonstrations or examples in the prompt which leads to few-shot prompting. In the next section, we demonstrate few-shot prompting.
Loading…
Cancel
Save