Program of Thoughts Prompting (CS)

From Systems analysis Wiki
Jump to navigation Jump to search

Program of Thoughts Prompting (PoT, angl. «program myšlenek») — je metoda prompt engineeringu pro velké jazykové modely (LLM), při níž model generuje programový kód jako mezikroky řešení úlohy namísto textového vysvětlení[1]. Tento přístup umožňuje oddělit logické uvažování od matematických výpočtů: jazykový model sestavuje plán řešení v podobě programu (například v Pythonu), přičemž samotné výpočty provádí externí, deterministický interpret kódu.

Metoda byla navržena v roce 2022 skupinou výzkumníků v čele s Wenhu Chenem (Wenhu Chen) a je zaměřena především na úlohy číselného nebo logického charakteru (matematické úlohy, finanční výpočty), kde tradiční metody uvažování, jako je Chain-of-Thought, narážely na potíže s přesností výpočtů[1].

Předpoklady a koncepce

Omezení Chain-of-Thought

Metoda PoT je rozvinutím myšlenky Chain-of-Thought (CoT) (řetězec uvažování), která dříve představovala hlavní přístup ke zlepšení logického odvozování LLM[2]. V metodě CoT model generuje posloupnost mezikroků v přirozeném jazyce. Přes výrazné zlepšení kvality uvažování má tento přístup zásadní omezení: model provádí jak logiku, tak samotné výpočty v textové formě. To často vede k nepřesným aritmetickým operacím, chybám zaokrouhlování a dalším nepřesnostem, protože jazykové modely ze své podstaty nejsou přesnými kalkulačkami.

Základní myšlenka Program of Thoughts

Základní myšlenka PoT spočívá v delegování výpočtů na externí systém (interpret kódu), přičemž od jazykového modelu se požaduje pouze formalizace plánu řešení v podobě spustitelného programu[1]. Model tak vystupuje v roli „programátora", nikoliv „počítadla".

Postup práce vypadá takto:

  1. Model obdrží na vstupu úlohu (například textovou matematickou úlohu).
  2. Namísto textového uvažování generuje skript v programovacím jazyce (například Python), který tuto úlohu řeší.
  3. Vygenerovaný kód je předán externímu interpretu, který jej vykoná.
  4. Výsledek vykonání kódu je konečnou odpovědí.

Složité a přesné výpočty (operace s velkými čísly, volání specializovaných knihoven) tedy neprovádí samotný model, ale program, což zajišťuje determinismus a vysokou přesnost[3].

Implementace a využití knihoven

Při implementaci PoT je klíčová schopnost LLM generovat správný a efektivní kód. Autoři přístupu využili model OpenAI Codex, speciálně natrénovaný na programátorských úlohách. Přístup PoT umožňuje modelu využívat externí knihovny, což výrazně rozšiřuje třídu řešitelných úloh. Například při řešení úloh symbolické matematiky může model vygenerovat kód využívající knihovnu SymPy pro analytické řešení rovnic, což přesahuje možnosti čistě jazykových metod[1].

Prompt pro PoT může být poskytnut ve dvou režimech:

  • Few-shot: Prompt obsahuje několik příkladů párů „otázka — program-řešení".
  • Zero-shot: Prompt obsahuje pouze instrukci popisující úlohu, bez příkladů.

Dokonce i v režimu zero-shot vykazuje PoT vysokou efektivitu díky explicitní struktuře, kterou musí model vygenerovat[4].

Výsledky a efektivita

Metoda PoT prokázala výrazné zlepšení kvality řešení u úloh vyžadujících vícekrokové číselné uvažování. V původní práci byla otestována na osmi sadách matematických a finančních úloh, včetně GSM8K, AQUA, SVAMP, FinQA a dalších.

  • Zvýšení přesnosti: Ve všech případech PoT překonal základní přístup CoT. V průměru bylo dosaženo relativního zisku přibližně ~12 % v podílu správných řešení.
    • Na populární matematické sadě GSM8K dosáhla přesnost modelu s PoT 71,6 %, zatímco s CoT činila 63,1 %.
    • U finančních úloh byl zisk ještě výraznější: na datasetu FinQA vzrostla přesnost z 40,4 % (CoT) na 64,5 % (PoT)[1].
  • Kombinace se Self-Consistency: Efektivita PoT může být dále zlepšena v kombinaci s metodou samosoudržnosti (self-consistency). V tomto případě model generuje několik nezávislých programů-řešení a výsledná odpověď je zvolena „principem většiny" z výsledků jejich vykonání. V kombinaci se self-consistency dosáhl PoT nového stavu umění (state-of-the-art) v době publikace pro všechny testované matematické a finanční benchmarky[1].

Výhody a omezení

Výhody

  • Přesnost výpočtů: Hlavní výhoda. Provádění aritmetických operací externím interpretem odstraňuje chyby zaokrouhlování a nepřesnosti vlastní LLM.
  • Možnost využití knihoven: Model může využívat výkonné externí knihovny (například pro symbolické výpočty, statistickou analýzu, práci s daty), čímž řeší úlohy, které dříve nebyly dostupné.
  • Interpretovatelnost a ladění: Programový kód je formálním a strukturovaným vyjádřením logiky řešení, což usnadňuje jeho ověření a ladění ve srovnání s uvažováním v přirozeném jazyce.
  • Univerzálnost: Přístup je efektivní jak v režimu few-shot, tak zero-shot a je použitelný v různých doménách (matematika, finance, věda).

Omezení

  • Bezpečnost: Vykonávání vygenerovaného kódu na externím interpretu vytváří bezpečnostní rizika. Model může teoreticky vygenerovat škodlivý kód (například pro mazání souborů). Praktické použití PoT proto vyžaduje izolaci prostředí pro vykonávání (sandbox) a důkladnou filtraci kódu[4].
  • Omezená oblast použitelnosti: Metoda je nejefektivnější pro úlohy, které lze jasně formalizovat v podobě algoritmu. Pro úlohy vyžadující porozumění jazykovým nuancím, zdravý rozum nebo kreativní přístup je přímé použití PoT obtížné.
  • Závislost na kvalitě kódu: Efektivita metody přímo závisí na schopnosti LLM generovat syntakticky správný a logicky korektní kód.

Související přístupy

Myšlenka využití kódu ke zlepšení uvažování LLM se rozvinula i v dalších podobných přístupech.

  • Program-Aided Language Models (PAL): Metoda navržená téměř současně s PoT, která rovněž využívá generování Python kódu pro řešení úloh[5]. Koncepčně jsou PAL a PoT velmi blízké a potvrzují efektivitu strategie „uvažování prostřednictvím kódu".
  • Tree of Thoughts (ToT): Složitější metoda, která navrhuje generovat a prozkoumávat „strom" možných kroků řešení, což je rozvinutím myšlenky lineárního „řetězce" myšlenek. PoT může být použit v rámci uzlů tohoto stromu pro ověřování hypotéz.

Odkazy

  • Původní vědecký článek o Program of Thoughts Prompting
  • Průvodce PoT na portálu Learn Prompting

Literatura

  • 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.

Poznámky

  1. 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]
  2. Wei, J. et al. «Chain-of-Thought Prompting Elicits Reasoning in Large Language Models». arXiv:2201.11903, 2022. [2]
  3. «Program of Thoughts: Everything You Need to Know». The Ministry of AI. [3]
  4. 4.0 4.1 «Program of Thoughts Prompting: Enhancing Accuracy in Reasoning and Computation». Learn Prompting. [4]
  5. «PAL (Program-Aided Language Models)». Prompt Engineering Guide. [5]