Ingegneria rapida per problemi di ragionamento aritmetico

Una soluzione rapida per i problemi di ragionamento aritmetico

Esplora varie tecniche di ingegneria delle prompt per problemi di ragionamento aritmetico, migliori pratiche e sperimentazioni rapide con prompt di qualità di produzione con Vellum.ai

Architettura di quattro diverse tecniche di prompt: Input-Output, Chain-of-Thought (CoT), Self Consistency con Chain-of-Thought (CoT) e Tree of Thought (ToT) (Immagine da Yao et el. (2023))

Introduzione

I Large Language Models (LLM) stanno attirando sempre più attenzione sia da parte dei ricercatori accademici che degli esperti del settore, grazie alla loro competenza nell’interpretazione e nella generazione del linguaggio. La ragione delle loro capacità di comprensione del testo risiede nel processo di addestramento, che prevede l’esposizione a grandi quantità di dati con l’obiettivo principale di prevedere le parole successive. Per ottimizzare questi modelli per compiti specifici, è essenziale il fine-tuning. Ciò può essere ottenuto attraverso due metodi: “pre-training e fine-tuning” o “prompt fine-tuning”.

Nell’approccio tradizionale “pre-training e fine-tuning”, il LLM viene sottoposto a fine-tuning su un dataset pertinente ai compiti che dovrà svolgere in seguito, aggiornando così i parametri nella fase di fine-tuning. Al contrario, il “prompt fine-tuning” guida il modello con un segmento di testo per eseguire il compito.

Una prompt è un input fornito dall’utente a cui il modello è progettato per rispondere. Le prompt possono contenere istruzioni, contesto, domande o un indicatore di output. L’ingegneria delle prompt è un campo emergente dedicato allo sviluppo e al miglioramento delle prompt per l’utilizzo efficace dei modelli linguistici.

Tuttavia, una sfida significativa consiste nel garantire che il modello possa affrontare problemi che richiedono ragionamento aritmetico e di senso comune. In questo articolo, ci concentriamo specificamente sull’ingegneria delle prompt per problemi aritmetici.

Prerequisiti

Non è richiesta alcuna conoscenza preliminare. Tutte le dimostrazioni fornite di seguito possono essere eseguite sia sul Playground di OpenAI sia tramite l’API di OpenAI. Sebbene questo articolo utilizzi principalmente i modelli OpenAI, è importante notare che queste sono semplicemente tecniche di prompt che esploreremo e sei libero di utilizzare qualsiasi LLM disponibile sul mercato.

Ingegneria delle Prompt per Problemi Aritmetici

Tutti i problemi menzionati d’ora in poi sono tratti dal dataset GSM8K e sono stati testati utilizzando il modello GPT-3.5 Turbo Instruct di OpenAI con configurazioni predefinite.

Vedremo diverse tecniche testate specificamente sul seguente problema aritmetico:

Jennifer ha acquistato 40 lattine di latte nel negozio prima di incontrare la sua compagna di classe Mark, che stava anch'egli comprando il latte. Jennifer ha comprato 6 lattine aggiuntive per ogni 5 lattine che Mark ha comprato. Se Mark ha comprato 50 lattine, quante lattine di latte ha portato Jennifer a casa dal negozio?

La risposta corretta al problema sopra riportato è 100 lattine.

Zero-Shot Prompting

Uno shot si riferisce fondamentalmente a un esempio. Lo Zero-Shot è una tecnica di prompt di base in cui viene posta una domanda al modello senza fornire dimostrazioni. Questa tecnica, in generale, produce risultati favorevoli in modelli più grandi che sono stati addestrati su grandi quantità di dati.

Prompt:

Q: {{ domanda }}A:

Output:

 Jennifer ha portato a casa 76 lattine di latte dal negozio.

Nel prompt precedente, non abbiamo aggiunto domande con delle dimostrazioni, il che ha portato al fallimento dei modelli nel fornire la risposta corretta al problema aritmetico. I problemi di ragionamento e di buon senso raramente producono risultati soddisfacenti con prompt di zero-shot. Pertanto, è essenziale includere degli esempi quando si affrontano tali problemi.

Few-Shot Prompting

Con il prompting few-shot, forniamo al modello un piccolo numero di dimostrazioni, anche conosciute come esempi. Questi esempi servono a guidare il modello in modo che le domande successive possano essere trattate in modo simile. Il numero di dimostrazioni necessarie varia in base alla complessità del problema e al modello specifico in uso.

Prompt:

Q: Ken ha creato un pacchetto di cura da inviare a suo fratello, che era lontano a scuola. Ken ha messo una scatola su una bilancia, e poi ha versato abbastanza fagioli di gelatina nella scatola per portare il peso a 2 libbre. Poi, ha aggiunto abbastanza brownies per far triplicare il peso. Successivamente, ha aggiunto altre 2 libbre di fagioli di gelatina. E infine, ha aggiunto abbastanza vermi gommosi per raddoppiare nuovamente il peso. Qual è stato il peso finale della scatola di leccornie, in libbre?A: 16Q: Mark ha un giardino con dei fiori. Ha piantato piante di tre colori diversi. Dieci di loro sono gialli, e ce ne sono il 80% in più di quelli di colore viola. Ci sono solo il 25% dei fiori verdi rispetto ai fiori gialli e viola. Quanti fiori ci sono nel giardino di Mark?A: 35 Q: James scrive una lettera di 3 pagine a 2 amici diversi due volte a settimana. Quante pagine scrive in un anno? A: 624 Q: Albert si chiede quanto di pizza riesce a mangiare in un giorno. Compra 2 pizze grandi e 2 pizze piccole. Una pizza grande ha 16 fette e una pizza piccola ha 8 fette. Se le mangia tutte, quante fette mangia quel giorno?A: 48Q: Betty sta risparmiando soldi per un nuovo portafoglio che costa $100. Betty ha solo la metà dei soldi necessari. I suoi genitori hanno deciso di darle $15 per questo scopo, e i suoi nonni il doppio di quanto danno i suoi genitori. Di quanti altri soldi ha bisogno Betty per comprare il portafoglio?A: 5Q: {{ domanda }}A:

Output:

76

Anche se questa tecnica funziona bene nel risolvere problemi difficili, il modello potrebbe comunque fallire nel trovare risultati soddisfacenti nei problemi di ragionamento aritmetico. Questo perché il modello non riesce a ragionare passi immediati.

Few-Shot Chain-of-Thought (CoT) Prompting

Few-shot chain-of-thought (CoT), il prompting fornisce al modello alcuni esempi per guidarlo nel processo di raggiungimento di una soluzione. Questa guida, nota anche come passi di ragionamento intermedi, è fondamentale per aiutare il modello a lavorare attraverso i passaggi e generare logicamente l’output desiderato.

Prompt:

Q: James scrive una lettera di 3 pagine a 2 amici differenti due volte a settimana. Quante pagine scrive in un anno? A: Scrive a ogni amico 3*2=6 pagine a settimana Quindi scrive 6*2=12 pagine ogni settimana Ciò significa che scrive 12*52=624 pagine in un anno. La risposta è 624.Q: {{ domanda }}A:

Output:

 Jennifer ha comprato 40+6/5*50=40+12*10=40+120=160 lattine di latte. La risposta è 160.

Nell’output precedente, il modello ha cercato di ragionare attraverso i passaggi ma è arrivato alla risposta finale incorretta. Osserviamo che questa discrepanza potrebbe essere attribuita all’esempio irrilevante fornito. Ci sono due modi per affrontare questo problema: fornire al modello più esempi o assicurarsi che gli esempi forniti siano pertinenti. Di seguito, cerchiamo di correggere il problema con un esempio pertinente.

Prompt:

Q: Mark ha un giardino con dei fiori. Ha piantato piante di tre colori diversi. Dieci di loro sono gialli, e ce ne sono l'80% in più rispetto a quelli viola. Ci sono solo il 25% dei fiori verdi rispetto ai fiori gialli e viola. Quanti fiori ci sono nel giardino di Mark?A: Ci sono l'80/100*10=8 fiori viola in più rispetto ai fiori gialli. Quindi nel giardino di Mark ci sono 10+8=18 fiori viola. I fiori viola e gialli insieme sono 10+18=28 fiori. Ciò significa che nel giardino di Mark ci sono il 25/100*28=7 fiori verdi. Quindi in totale Mark ha 28+7=35 piante nel suo giardino. La risposta è 35.Q: {{ domanda }}A:

Output:

 Per ogni 5 lattine che Mark ha comprato, Jennifer ha comprato altre 6 lattine. Quindi per 50 lattine, Jennifer ha comprato 6/5*50=60 lattine aggiuntive. In totale, Jennifer ha comprato 40+60=100 lattine di latte. Quindi, Jennifer ha portato a casa 100 lattine di latte dal negozio.

La risposta finale ottenuta è corretta. Considera il compito, la scelta del modello e la rilevanza degli esempi, poiché tutto contribuisce a giungere alla soluzione corretta.

Program-Aided Language Model (PAL)

Un modello linguistico assistito da un programma (PAL) non è una tecnica di formazione delle domande, ma è un’applicazione dell’ingegneria delle promete. Similmente a CoT, PAL mira a dedurre le fasi intermedie. Tuttavia, invece di utilizzare testo normale come passaggi di ragionamento, PAL utilizza passaggi programmatici intermedi utilizzando un runtime programmatico come l’interprete Python.

Prompt:

D: James scrive una lettera di 3 pagine a 2 amici diversi due volte alla settimana. Quante pagine scrive in un anno? R: #James hasnumber_of_friends=2#He writes each friend 3-page letter each time.page_letter_size=3#He writes twice to each friend in a week.number_of_times_written_to_friend=2#Total pages written in a week to each friendpages_written_to_each_friend_per_week=page_letter_size*number_of_times_written_to_friend=6#So, total pages written by him per week,total_pages_each_week=pages_written_to_each_friend_per_week*total_number_of_friends=12#Number of weeks in a year.total_weeks_in_a_year=52#That means he writes,total_pages_written_in_a_year=total_pages_each_week*total_weeks_in_a_year=624#pages per year.The answer is 624.Q: {{ question }}R:

Output:

#Jennifer inizialmente ha comprato 40 lattine di latte.initial_cans_bought=40#Per ogni 5 lattine che Mark ha comprato, Jennifer ha comprato altre 6 lattine.additional_cans_bought=6mark_cans_bought=50#Quindi, per ogni 5 lattine che Mark ha comprato, Jennifer ha comprato altre 6 lattine.additional_cans_bought=6mark_cans_bought=50#Numero di volte in cui Mark ha comprato 5 lattinenumber_of_times_mark_bought=mark_cans_bought/5=10#Totale lattine aggiuntive acquistate da Jennifertotal_additional_cans_bought=additional_cans_bought*number_of_times_mark_bought=60#Totale lattine di latte portate a casa da Jennifertotal_cans_brought_home=initial_cans_bought+total_additional_cans_bought=40+60=100La risposta è di 100 lattine di latte.

Anche con l’esempio irrilevante che non ha portato a una risposta corretta utilizzando la tecnica CoT di few-shot, PAL ha trovato con successo la soluzione finale corretta.

Zero-Shot Chain-of-Thought (CoT) Prompting

In una situazione in cui non sono disponibili dimostrazioni per la tecnica few-shot Chain-of-Thought (CoT), un approccio semplice ed efficace consiste nel chiedere al modello stesso di ragionare attraverso le fasi intermedie. Questo è chiamato zero-shot Chain-of-Thought (CoT). Puoi ottenere questo aggiungendo un testo simile a ‘Pensiamo passo dopo passo…’ alla domanda di promemoria. Questa semplice tecnica ha mostrato risultati eccezionali.

Prompt:

D: {{ question }}R: Pensiamo passo dopo passo...

Output:

1. Jennifer ha inizialmente comprato 40 lattine di latte. 2. Per ogni 5 lattine che Mark ha comprato, Jennifer ha comprato altre 6 lattine. 3. Dato che Mark ha comprato 50 lattine, Jennifer ne ha comprate altre 6 per ogni 5 lattine, il che significa che ha comprato (6/5) x 50 = 60 lattine. 4. Pertanto, Jennifer ha portato a casa un totale di 40 + 60 = 100 lattine di latte dal negozio.

Dall’esempio sopra, osserviamo che il modello ragiona con successo attraverso le fasi e arriva alla soluzione corretta senza richiedere esempi o indicazioni.

Promemoria albero del pensiero (ToT)

Promemoria albero del pensiero (ToT) implica l’esplorazione di possibili soluzioni in modo simile alla navigazione di una struttura ad albero di pensieri, simile alla risoluzione di problemi umani. Questo approccio consente la possibilità di rivedere i passaggi quando necessario, riflettendo il modo in cui gli esseri umani possono riesaminare e adattare il loro modo di pensare durante il processo di risoluzione dei problemi. In sostanza, ToT mira a replicare la natura adattiva ed iterativa del ragionamento umano attraverso prove ed errori.

Basandosi sul framework ToT, Dave Hulbert ha proposto il prompting albero del pensiero. Questa tecnica utilizza un approccio diretto con un singolo prompt, chiedendo al modello di valutare i passaggi intermedi.

Prompt:

Identifica e comportati come tre diversi esperti adatti a rispondere a questa domanda. Tutti gli esperti dovranno scrivere il passaggio e il loro modo di pensare ad esso, poi condividerlo con il gruppo. Successivamente, tutti gli esperti passeranno al passaggio successivo, ecc. Ad ogni passaggio tutti gli esperti dovranno valutare la risposta dei loro colleghi con un punteggio compreso tra 1 e 5, 1 significando che è altamente improbabile e 5 significando che è altamente probabile. Se un qualsiasi esperto viene giudicato erroneo in qualsiasi momento, dovrà lasciare. Dopo che tutti gli esperti hanno fornito la loro analisi, tu analizzerai tutte e 3 le analisi e fornirai la soluzione di consenso o la tua soluzione migliore. Di seguito si presenta la domanda:Q: {{ question }}A:

Output:

Esperto 1: Esperto di matematicaPasso 1: Calcola il numero totale di lattine di latte acquistate da Mark.Mark ha comprato 50 lattine di latte.Punteggio: 5 (molto probabile)Passo 2: Calcola il numero di lattine di latte acquistate da Jennifer prima di incontrare Mark.Jennifer ha comprato 40 lattine di latte.Punteggio: 5 (molto probabile)Passo 3: Calcola il numero di lattine di latte aggiuntive acquistate da Jennifer per ogni 5 lattine acquistate da Mark.Per ogni 5 lattine che Mark compra, Jennifer acquista 6 lattine aggiuntive.Punteggio: 5 (molto probabile)Passo 4: Calcola il numero totale di lattine di latte acquistate da Jennifer.Jennifer ha comprato 40 + (6/5)*50 = 40 + 60 = 100 lattine di latte.Punteggio: 5 (molto probabile)Passo 5: ConclusioniJennifer ha portato a casa 100 lattine di latte dal negozio.Punteggio: 5 (molto probabile)Esperto 2: Esperto di venditePasso 1: Determina il numero medio di lattine di latte acquistate dai clienti nel negozio.Sulla base dei dati di vendita precedenti, il numero medio di lattine di latte acquistate dai clienti è 10.Punteggio: 4 (probabile)Passo 2: Calcola il numero totale di lattine di latte acquistate da Mark.Mark ha comprato 50 lattine di latte.Punteggio: 5 (molto probabile)Passo 3: Calcola il numero di lattine di latte acquistate da Jennifer prima di incontrare Mark.Jennifer ha comprato 40 lattine di latte.Punteggio: 5 (molto probabile)Passo 4: Calcola il numero totale di lattine di latte acquistate da Jennifer.Jennifer ha comprato 40 + (6/5)*50 = 40 + 60 = 100 lattine di latte.Punteggio: 5 (molto probabile)Passo 5: ConclusioniJennifer ha portato a casa 100 lattine di latte dal negozio.Punteggio: 5 (molto probabile)Esperto 3: Esperto di psicologiaPasso 1: Analizza il comportamento e il processo decisionale di Jennifer.Jennifer potrebbe aver acquistato 40 lattine di latte in base alle sue esigenze e preferenze.Punteggio: 4 (probabile)Passo 2: Analizza il comportamento e il processo decisionale di Mark.Mark potrebbe aver acquistato 50 lattine di latte in base alle sue esigenze e preferenze.Punteggio: 4 (probabile)Passo 3: Considera l'influenza delle norme sociali e della pressione dei pari.Jennifer potrebbe essersi sentita pressata ad acquistare più lattine di latte dopo aver visto l'acquisto di Mark.Punteggio: 3 (abbastanza probabile)Passo 4: Analizza l'impatto della decisione di Jennifer di comprare lattine aggiuntive per ogni 5 lattine acquistate da Mark.Jennifer potrebbe aver preso questa decisione desiderando stare al passo con Mark o apparire generosa.Punteggio: 3 (abbastanza probabile)Passo 5: ConclusioniJennifer ha portato a casa 100 lattine di latte dal negozio, possibilmente influenzata da norme sociali e pressioni dei pari.Punteggio: 3 (abbastanza probabile)Soluzione di consenso:In base all'analisi dei tre esperti, è molto probabile che Jennifer abbia portato a casa 100 lattine di latte dal negozio. L'analisi dell'esperto di matematica fornisce un solido calcolo, mentre l'analisi dell'esperto di vendite tiene conto del numero medio di lattine acquistate dai clienti. L'analisi dell'esperto di psicologia aggiunge una prospettiva diversa considerando l'influenza delle norme sociali e della pressione dei pari. Nel complesso, la soluzione di consenso è che Jennifer abbia portato a casa 100 lattine di latte dal negozio.

La tecnica ToT utilizzata nell’esempio sopra fornisce una soluzione accurata. Vale la pena menzionare che il prompt ToT utilizzato è preso da ToT prompts di Dave Hulbert. Tuttavia, uno svantaggio di questa tecnica è un significativo aumento delle dimensioni del prompt.

Oltre alle tecniche di ingegneria menzionate sopra, possono essere adottati alcuni metodi aggiuntivi per risolvere i problemi di ragionamento aritmetico. Tuttavia, è importante notare che queste tecniche – Automatic Chain-of-Thought (Auto-CoT), Self-Consistency, Automatic Reasoning and Tool-Use (ART) e Active Prompt – sono al di là dello scopo di questo articolo.

Best Practices

I modelli sono efficaci quando sono ottimizzati con prompt ben progettati. Elvis Saravia ha notato che un prompt può essere composto da quattro elementi, anche se non sono sempre tutti necessari:

  1. Istruzione: Specifica un compito o un’azione particolare che si desidera che il modello esegua.
  2. Contesto: Informazioni esterne o dettagli aggiuntivi che guidano il modello nella generazione di risposte più accurate.
  3. Dati di input: L’input specifico o la domanda per cui si cerca una risposta.
  4. Indicatori di output: Il tipo o il formato atteso dell’output.

È consigliabile posizionare le istruzioni all’inizio, separandole dal resto del prompt utilizzando separatori designati come ‘#’.

Santu and Feng (2023) hanno introdotto una tassonomia completa, TELeR (Turn, Expression, Level of Details, Role), progettata per consentire confronti più significativi tra più LLM (Language Model) riguardo alle loro prestazioni su varie attività. La tassonomia dei prompt categorizza le direttive dei prompt in sei livelli in base al livello di dettaglio fornito. Il sesto livello può essere utilizzato in modo efficace per ottimizzare le prestazioni del modello in base al prompt fornito:

  1. Fornire una breve descrizione dell’obiettivo di alto livello.
  2. Presentare un elenco puntato dettagliato di sotto-attività.
  3. Specificare i criteri per valutare l’output del Language Model (LLM) o includere alcuni esempi rilevanti.
  4. Includere informazioni pertinenti aggiuntive ottenute mediante tecniche di recupero.
  5. Richiedere una dichiarazione esplicita dal LLM che spieghi il suo output.

In generale, è consigliabile essere specifici, offrire dettagli chiari, affinare continuamente il prompt attraverso iterazioni, formattare correttamente il prompt con separazioni chiare e menzionare i do’s e non i don’ts.

Riprendiamo il prompt, prendendo in considerazione le pratiche sopra citate e applicando la tecnica di prompting zero-shot.

Prompt:

### ISTRUZIONE ###È necessario rispondere a domande di ragionamento aritmetico. Seguire i seguenti passaggi mentre si risolve il problema. 1. Risolvere tutti i problemi in quanti passaggi necessari e numerare ciascun passaggio.2. Tutti i calcoli devono essere chiari e semplici da capire.3. Fornire una risposta finale precisa alla fine del ragionamento nel seguente formato: 'La risposta è '.Sarai valutato su:- quanto sono più facili da capire i calcoli effettuati?- quanto è accurata la risposta?### DATI DI INPUT ###Q: {{ question }}A:

Output:

1. Jennifer ha comprato 40 lattine di latte al negozio.2. Mark ha comprato 50 lattine di latte.3. Jennifer ha comprato 6 lattine aggiuntive per ogni 5 lattine che Mark ha comprato.4. Per ogni 5 lattine che Mark ha comprato, Jennifer ha comprato 6 lattine aggiuntive.5. Pertanto, per 50 lattine che Mark ha comprato, Jennifer ha comprato (6/5)*50 = 60 lattine aggiuntive.6. Totale lattine di latte che Jennifer ha comprato = 40 + 60 = 100 lattine.La risposta è 100 lattine.

Inizialmente, il modello non è riuscito a fornire la soluzione corretta utilizzando la tecnica di zero-shot prompting. Tuttavia, con l’applicazione di istruzioni e formattazioni appropriate, lo stesso modello genera con successo la risposta corretta utilizzando la tecnica di zero-shot prompting.

Disclaimer: La seguente sezione fornisce informazioni su Vellum, una piattaforma per sviluppatori utile per la produzione rapida di prompt. La menzione di Vellum è solo a scopo informativo e non costituisce un’approvazione o promozione. Non ho affiliazioni con Vellum e non ricevo alcun compenso per la sua inclusione.

Vellum

Identificare il prompt appropriato può essere una sfida. Il processo inizia con un prompt di base, che viene gradualmente affinato attraverso più iterazioni, un compito difficile da supervisionare. I fogli di calcolo potrebbero essere sufficienti per alcuni esperimenti, ma falliscono quando si incontrano problemi intricati che richiedono molteplici iterazioni. Quindi, sorge la domanda: come possiamo monitorare efficacemente i nostri prompt? E se il nostro obiettivo è condividere senza soluzione di continuità i nostri esperimenti con il prompt con il nostro team? Presentiamo Vellum, la risposta a queste domande.

Vellum fornisce una serie di strumenti progettati per l’ingegneria dei prompt, la ricerca semantica, il controllo delle versioni, i test quantitativi e il monitoraggio delle prestazioni per sviluppare applicazioni LLM di produzione. Nel contesto dell’ingegneria del prompt, consente di testare ed valutare un prompt specifico su tutti i principali LLM disponibili sul mercato. Facilita anche la collaborazione sui prompt.

Screenshot della sandbox Vellum (Screenshot dell'autore)

L’immagine sopra è uno screenshot rappresentativo della sandbox Vellum. Vellum consente di passare facilmente tra modelli di testo e modelli di chat e consente di regolare senza sforzo i parametri del modello. Offre anche il vantaggio del tracciamento della latenza e della valutazione quantitativa su quattro metriche di valutazione: corrispondenza esatta, corrispondenza regex, similarità semantica e webhook.

Vellum – Piattaforma per sviluppatori di app LLM

Vellum è la piattaforma di sviluppo per la creazione di app LLM con strumenti per l’ingegneria del prompt, la ricerca semantica, la versione…

www.vellum.ai

Riassunto

Questo articolo inizia introducendo i prompt e poi approfondisce l’ingegneria del prompt per i problemi di ragionamento aritmetico. Abbiamo esplorato varie tecniche di ingegneria del prompt, tra cui zero-shot, few-shot, few-shot chain-of-thought, zero-shot chain-of-thought, program-aided language model e tree-of-thought.

In seguito, abbiamo appreso alcune best practice per la creazione di prompt migliori. In generale, è consigliabile essere specifici, fornire dettagli chiari, affinare continuamente il prompt attraverso l’iterazione, formattarlo correttamente con chiare separazioni e menzionare suggerimenti utili.

Infine, per affrontare la sfida del monitoraggio e della valutazione dei prompt, nonché per condividerli tra i membri del team, abbiamo esaminato lo strumento Vellum.

Se ti è piaciuto questo articolo, assicurati di seguirmi qui. Puoi collegarti e contattarmi tramite LinkedIn e X (formalmente, Twitter).