Program of Thoughts Prompting (IT)
Program of Thoughts Prompting (PoT, ingl. «programma di pensieri») — è un metodo di ingegneria dei prompt per i grandi modelli linguistici (LLM), in cui il modello genera codice di programmazione come passaggi intermedi nella risoluzione di un problema, al posto di una spiegazione testuale[1]. Tale approccio permette di separare il ragionamento logico dai calcoli matematici: il modello linguistico costruisce il piano di soluzione sotto forma di programma (ad esempio in Python), mentre i calcoli vengono eseguiti da un interprete di codice esterno e deterministico.
Il metodo è stato proposto nel 2022 da un gruppo di ricercatori guidati da Wenhu Chen e si rivolge principalmente a problemi di natura numerica o logica (problemi matematici, calcoli finanziari), dove i metodi di ragionamento tradizionali, come Chain-of-Thought, incontravano difficoltà di precisione nei calcoli[1].
Premesse e concetto
Limitazioni di Chain-of-Thought
Il metodo PoT rappresenta un'evoluzione dell'idea di Chain-of-Thought (CoT) (catena di ragionamenti), che in precedenza era l'approccio principale per migliorare l'inferenza logica degli LLM[2]. Nel metodo CoT il modello genera una sequenza di passaggi intermedi in linguaggio naturale. Nonostante il significativo miglioramento della qualità del ragionamento, questo approccio presenta una limitazione fondamentale: il modello esegue sia la logica che i calcoli stessi in forma testuale. Ciò porta spesso a operazioni aritmetiche imprecise, errori di arrotondamento e altre inesattezze, poiché i modelli linguistici per loro natura non sono calcolatori precisi.
Idea principale di Program of Thoughts
L'idea principale di PoT consiste nel delegare i calcoli a un sistema esterno (l'interprete di codice), richiedendo al modello linguistico solo la formalizzazione del piano di soluzione sotto forma di programma eseguibile[1]. Il modello svolge il ruolo di «programmatore», non di «calcolatore».
Il processo di funzionamento è il seguente:
- Il modello riceve in input un problema (ad esempio, un problema matematico testuale).
- Invece di ragionamenti testuali, genera uno script in un linguaggio di programmazione (ad esempio Python), che risolve il problema.
- Il codice generato viene passato a un interprete esterno, che lo esegue.
- Il risultato dell'esecuzione del codice costituisce la risposta definitiva.
In questo modo, i calcoli complessi e precisi (operazioni con numeri grandi, chiamate a librerie specializzate) vengono eseguiti non dal modello stesso, ma dal programma, garantendo determinismo e alta precisione[3].
Implementazione e utilizzo delle librerie
Nell'implementazione di PoT, la capacità degli LLM di generare codice corretto ed efficiente è fondamentale. Gli autori dell'approccio hanno utilizzato il modello OpenAI Codex, appositamente addestrato su compiti di programmazione. L'approccio PoT consente al modello di sfruttare librerie esterne, ampliando notevolmente la classe dei problemi risolvibili. Ad esempio, nella risoluzione di problemi di matematica simbolica, il modello può generare codice che utilizza la libreria SymPy per la soluzione analitica di equazioni, il che va oltre le capacità dei metodi puramente linguistici[1].
Il prompt per PoT può essere fornito in due modalità:
- Few-shot: Il prompt contiene alcuni esempi di coppie «domanda — programma soluzione».
- Zero-shot: Il prompt fornisce solo un'istruzione che descrive il problema, senza esempi.
Anche nella modalità zero-shot, PoT mostra un'alta efficacia grazie alla struttura esplicita che il modello deve generare[4].
Risultati ed efficacia
Il metodo PoT ha dimostrato un significativo miglioramento della qualità delle soluzioni su problemi che richiedono ragionamento numerico in più fasi. Nel lavoro originale è stato testato su otto dataset di problemi matematici e finanziari, tra cui GSM8K, AQUA, SVAMP, FinQA e altri.
- Aumento della precisione: In tutti i casi PoT ha superato l'approccio base CoT. In media è stato ottenuto un guadagno relativo di circa ~12% nella percentuale di soluzioni corrette.
- Sul popolare dataset matematico GSM8K la precisione del modello con PoT ha raggiunto il 71,6%, mentre con CoT era del 63,1%.
- Nei problemi finanziari il guadagno è stato ancora più sostanziale: sul dataset FinQA la precisione è aumentata dal 40,4% (CoT) al 64,5% (PoT)[1].
- Combinazione con Self-Consistency: L'efficacia di PoT può essere ulteriormente migliorata combinandola con il metodo della auto-coerenza (self-consistency). In questo caso il modello genera più programmi soluzione indipendenti, e la risposta finale viene selezionata in base al «principio di maggioranza» dai risultati della loro esecuzione. In combinazione con la self-consistency, PoT ha stabilito un nuovo stato dell'arte (state-of-the-art) al momento della pubblicazione per tutti i benchmark matematici e finanziari testati[1].
Vantaggi e limitazioni
Vantaggi
- Precisione dei calcoli: Il principale vantaggio. L'esecuzione delle operazioni aritmetiche tramite un interprete esterno elimina gli errori di arrotondamento e le imprecisioni proprie degli LLM.
- Possibilità di utilizzare librerie: Il modello può avvalersi di potenti librerie esterne (ad esempio per calcoli simbolici, analisi statistica, gestione delle date), risolvendo problemi che in precedenza erano inaccessibili.
- Interpretabilità e debug: Il codice di programmazione rappresenta una formalizzazione strutturata della logica di soluzione, il che ne facilita la verifica e il debug rispetto ai ragionamenti in linguaggio naturale.
- Universalità: L'approccio è efficace sia nella modalità few-shot che in quella zero-shot ed è applicabile in diversi domini (matematica, finanza, scienze).
Limitazioni
- Sicurezza: L'esecuzione del codice generato su un interprete esterno crea rischi per la sicurezza. Il modello potrebbe teoricamente generare codice dannoso (ad esempio, per la cancellazione di file). Pertanto l'applicazione pratica di PoT richiede l'isolamento dell'ambiente di esecuzione (sandbox) e un'attenta filtratura del codice[4].
- Ambito di applicabilità limitato: Il metodo è più efficace per problemi che possono essere chiaramente formalizzati sotto forma di algoritmo. Per problemi che richiedono la comprensione delle sfumature del linguaggio, il buon senso o un approccio creativo, l'applicazione diretta di PoT risulta difficoltosa.
- Dipendenza dalla qualità del codice: L'efficacia del metodo dipende direttamente dalla capacità degli LLM di generare codice sintatticamente corretto e logicamente valido.
Approcci correlati
L'idea di utilizzare il codice per migliorare il ragionamento degli LLM si è sviluppata anche in altri approcci simili.
- Program-Aided Language Models (PAL): Metodo proposto quasi contemporaneamente a PoT, che utilizza anch'esso la generazione di codice Python per la risoluzione di problemi[5]. Concettualmente PAL e PoT sono molto vicini e confermano l'efficacia della strategia «ragionamento tramite codice».
- Tree of Thoughts (ToT): Un metodo più complesso che propone di generare ed esplorare un «albero» di possibili passi di soluzione, rappresentando un'evoluzione dell'idea della «catena» lineare di pensieri. PoT può essere utilizzato all'interno dei nodi di questo albero per la verifica delle ipotesi.
Riferimenti
- Articolo scientifico originale su Program of Thoughts Prompting
- Guida a PoT sul portale Learn Prompting
Bibliografia
- Chen, W. et al. (2023). Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks. arXiv:2211.12588.
- Wei, J. et al. (2022). Chain of Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903.
- Wang, X. et al. (2022). Self-Consistency Improves Chain of Thought Reasoning in Language Models. arXiv:2203.11171.
- Gao, L. et al. (2022). PAL: Program-Aided Language Models. arXiv:2211.10435.
- Cobbe, K. et al. (2021). Training Verifiers to Solve Math Word Problems. arXiv:2110.14168.
- Chen, Z. et al. (2021). FinQA: A Dataset of Numerical Reasoning over Financial Data. arXiv:2109.00122.
- Zhu, F. et al. (2021). TAT-QA: A Question Answering Benchmark on a Hybrid of Tabular and Textual Content in Finance. arXiv:2105.07624.
- Patel, A. et al. (2021). Are NLP Models Really Able to Solve Simple Math Word Problems? (Introducing SVAMP). arXiv:2103.07191.
- Xu, F. et al. (2023). RECOMP: Improving Retrieval-Augmented LMs with Compression and Selective Augmentation. arXiv:2310.04408.
- Mu, J. et al. (2023). Learning to Compress Prompts with Gist Tokens. arXiv:2304.08467.
Note
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 Chen, W. et al. «Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks». arXiv:2211.12588, 2023. [1]
- ↑ Wei, J. et al. «Chain-of-Thought Prompting Elicits Reasoning in Large Language Models». arXiv:2201.11903, 2022. [2]
- ↑ «Program of Thoughts: Everything You Need to Know». The Ministry of AI. [3]
- ↑ 4.0 4.1 «Program of Thoughts Prompting: Enhancing Accuracy in Reasoning and Computation». Learn Prompting. [4]
- ↑ «PAL (Program-Aided Language Models)». Prompt Engineering Guide. [5]