Program of Thoughts Prompting (SV)
Program of Thoughts Prompting (PoT, eng. «program of thoughts») — är en metod inom prompt engineering för stora språkmodeller (LLM), där modellen genererar programkod som mellanliggande steg i lösningen av en uppgift, istället för en textbaserad förklaring[1]. Detta tillvägagångssätt gör det möjligt att separera logiskt resonemang från matematiska beräkningar: språkmodellen konstruerar en lösningsplan i form av ett program (exempelvis i Python), medan beräkningarna utförs av en extern, deterministisk kodtolk.
Metoden föreslogs år 2022 av en forskargrupp ledd av Wenhu Chen och riktar sig framför allt mot uppgifter av numerisk eller logisk karaktär (matematikuppgifter, finansiella beräkningar), där traditionella resonemangsmetoder som Chain-of-Thought stötte på svårigheter med beräkningsprecision[1].
Förutsättningar och koncept
Begränsningar hos Chain-of-Thought
PoT-metoden är en vidareutveckling av idén bakom Chain-of-Thought (CoT) (tankekedja), som tidigare var det huvudsakliga tillvägagångssättet för att förbättra logisk slutledning hos LLM[2]. I CoT-metoden genererar modellen en sekvens av mellanliggande steg på naturligt språk. Trots en avsevärd förbättring av resonemangets kvalitet har detta tillvägagångssätt en fundamental begränsning: modellen utför både logiken och själva beräkningarna i textform. Detta leder ofta till inexakta aritmetiska operationer, avrundningsfel och andra brister, eftersom språkmodeller till sin natur inte är precisa räknare.
Grundidén bakom Program of Thoughts
Grundidén med PoT är att delegera beräkningarna till ett externt system (en kodtolk), och att endast kräva att språkmodellen formaliserar lösningsplanen i form av ett körbart program[1]. Modellen agerar som "programmerare" snarare än "räknare".
Arbetsprocessen ser ut som följer:
- Modellen tar emot en uppgift som indata (exempelvis en textbaserad matematikuppgift).
- Istället för textbaserade resonemang genererar den ett skript i ett programmeringsspråk (exempelvis Python) som löser uppgiften.
- Den genererade koden skickas till en extern tolk som kör den.
- Resultatet av kodkörningen är det slutgiltiga svaret.
På detta sätt utförs komplexa och precisa beräkningar (operationer med stora tal, anrop till specialiserade bibliotek) inte av modellen själv utan av programmet, vilket säkerställer determinism och hög precision[3].
Implementering och användning av bibliotek
Vid implementering av PoT är LLM:ens förmåga att generera korrekt och effektiv kod avgörande. Metodens upphovsmän använde modellen OpenAI Codex, som är specialtränad på programmeringsuppgifter. PoT-metoden gör det möjligt för modellen att använda externa bibliotek, vilket väsentligt utökar klassen av lösbara uppgifter. Exempelvis kan modellen vid lösning av symboliska matematikuppgifter generera kod som använder biblioteket SymPy för analytisk lösning av ekvationer, vilket går bortom möjligheterna hos rent språkliga metoder[1].
En prompt för PoT kan ges i två lägen:
- Few-shot: Prompten innehåller flera exempel på par av typen "fråga — lösningsprogram".
- Zero-shot: Prompten innehåller endast en instruktion som beskriver uppgiften, utan exempel.
Även i zero-shot-läget uppvisar PoT hög effektivitet tack vare den tydliga struktur som modellen förväntas generera[4].
Resultat och effektivitet
PoT-metoden har visat en betydande förbättring av lösningskvaliteten på uppgifter som kräver flerstegsbaserat numeriskt resonemang. I den ursprungliga studien testades den på åtta uppsättningar av matematik- och finansuppgifter, däribland GSM8K, AQUA, SVAMP, FinQA med flera.
- Förbättrad precision: I samtliga fall överträffade PoT det grundläggande CoT-tillvägagångssättet. I genomsnitt uppnåddes en relativ förbättring på ~12% i andelen korrekta lösningar.
- På den populära matematiska datamängden GSM8K nådde modellens precision med PoT 71,6%, medan den med CoT låg på 63,1%.
- Vid finansiella uppgifter var förbättringen ännu mer påtaglig: på datasetet FinQA ökade precisionen från 40,4% (CoT) till 64,5% (PoT)[1].
- Kombination med Self-Consistency: PoT:s effektivitet kan ytterligare förbättras i kombination med metoden självkonsistens (self-consistency). I detta fall genererar modellen flera oberoende lösningsprogram, och det slutgiltiga svaret väljs enligt "majoritetsprincipen" utifrån resultaten av deras körning. I kombination med self-consistency etablerade PoT ett nytt state-of-the-art vid publiceringstillfället för samtliga testade matematik- och finansbenchmarks[1].
Fördelar och begränsningar
Fördelar
- Beräkningsprecision: Den huvudsakliga fördelen. Att utföra aritmetiska operationer med en extern tolk eliminerar avrundningsfel och de inexaktheter som är inneboende i LLM.
- Möjlighet att använda bibliotek: Modellen kan utnyttja kraftfulla externa bibliotek (exempelvis för symboliska beräkningar, statistisk analys, datumhantering) och lösa uppgifter som tidigare var otillgängliga.
- Tolkningsbarhet och felsökning: Programkod är en formell och strukturerad representation av lösningslogiken, vilket underlättar granskning och felsökning jämfört med resonemang på naturligt språk.
- Mångsidighet: Metoden är effektiv både i few-shot- och zero-shot-lägen och är tillämpbar inom olika domäner (matematik, finans, naturvetenskap).
Begränsningar
- Säkerhet: Exekvering av genererad kod i en extern tolk skapar säkerhetsrisker. Modellen kan i teorin generera skadlig kod (exempelvis för att radera filer). Praktisk tillämpning av PoT kräver därför isolering av körningsmiljön (sandbox) och noggrann filtrering av koden[4].
- Begränsat tillämpningsområde: Metoden är mest effektiv för uppgifter som tydligt kan formaliseras som en algoritm. För uppgifter som kräver förståelse av språkliga nyanser, sunt förnuft eller ett kreativt tillvägagångssätt är direkt tillämpning av PoT svår.
- Beroende av kodkvalitet: Metodens effektivitet beror direkt på LLM:ens förmåga att generera syntaktiskt korrekt och logiskt riktig kod.
Relaterade metoder
Idén att använda kod för att förbättra LLM:ens resonemang har utvecklats även inom andra liknande metoder.
- Program-Aided Language Models (PAL): En metod som föreslogs nästan samtidigt med PoT och som också använder generering av Python-kod för att lösa uppgifter[5]. Konceptuellt är PAL och PoT mycket nära varandra och bekräftar effektiviteten hos strategin "resonemang genom kod".
- Tree of Thoughts (ToT): En mer komplex metod som föreslår att man genererar och utforskar ett "träd" av möjliga lösningssteg, vilket är en vidareutveckling av idén om den linjära "tankekedjan". PoT kan användas inom trädets noder för att verifiera hypoteser.
Hänvisningar
- Originalet vetenskaplig artikel om Program of Thoughts Prompting
- Guide till PoT på portalen Learn Prompting
Litteratur
- 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.
Noter
- ↑ 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]