Program of Thoughts Prompting (PL)
Program of Thoughts Prompting (PoT, ang. «program myśli») — metoda inżynierii promptów dla dużych modeli językowych (LLM), w której model generuje kod programistyczny jako pośrednie kroki rozwiązywania zadania zamiast tekstowego wyjaśnienia[1]. Takie podejście pozwala oddzielić logiczne rozumowanie od obliczeń matematycznych: model językowy buduje plan rozwiązania w postaci programu (na przykład w języku Python), a obliczenia są wykonywane przez zewnętrzny, deterministyczny interpreter kodu.
Metoda została zaproponowana w 2022 roku przez grupę badaczy pod przewodnictwem Wenhu Chena (Wenhu Chen) i jest skierowana przede wszystkim na zadania o charakterze numerycznym lub logicznym (zadania matematyczne, obliczenia finansowe), gdzie tradycyjne metody rozumowania, takie jak Chain-of-Thought, napotykały trudności z dokładnością obliczeń[1].
Przesłanki i koncepcja
Ograniczenia Chain-of-Thought
Metoda PoT jest rozwinięciem idei Chain-of-Thought (CoT) (łańcuch rozumowania), która wcześniej była głównym podejściem służącym poprawie wnioskowania logicznego LLM[2]. W metodzie CoT model generuje sekwencję pośrednich kroków w języku naturalnym. Mimo znacznej poprawy jakości rozumowania, podejście to ma fundamentalne ograniczenie: model wykonuje zarówno logikę, jak i same obliczenia w formie tekstowej. Często prowadzi to do niedokładnych operacji arytmetycznych, błędów zaokrąglenia i innych nieścisłości, ponieważ modele językowe ze swojej natury nie są precyzyjnymi kalkulatorami.
Podstawowa idea Program of Thoughts
Podstawowa idea PoT polega na tym, aby delegować obliczenia do zewnętrznego systemu (interpretera kodu), a od modelu językowego wymagać jedynie formalizacji planu rozwiązania w postaci wykonywalnego programu[1]. Model pełni rolę „programisty", a nie „kalkulatora".
Proces działania wygląda następująco:
- Model otrzymuje na wejściu zadanie (na przykład tekstowe zadanie matematyczne).
- Zamiast tekstowych rozumowań generuje skrypt w języku programowania (na przykład Python), który rozwiązuje to zadanie.
- Wygenerowany kod jest przekazywany do zewnętrznego interpretera, który go wykonuje.
- Wynik wykonania kodu jest ostateczną odpowiedzią.
W ten sposób złożone i precyzyjne obliczenia (operacje na dużych liczbach, wywołania wyspecjalizowanych bibliotek) są wykonywane nie przez sam model, lecz przez program, co zapewnia deterministyczność i wysoką dokładność[3].
Implementacja i wykorzystanie bibliotek
W implementacji PoT kluczowa jest zdolność LLM do generowania poprawnego i efektywnego kodu. Autorzy podejścia korzystali z modelu OpenAI Codex, specjalnie wytrenowanego na zadaniach programistycznych. Podejście PoT pozwala modelowi korzystać z zewnętrznych bibliotek, co istotnie rozszerza klasę rozwiązywanych zadań. Na przykład przy rozwiązywaniu zadań matematyki symbolicznej model może wygenerować kod wykorzystujący bibliotekę SymPy do analitycznego rozwiązywania równań, co wykracza poza możliwości czysto językowych metod[1].
Prompt dla PoT może być dostarczony w dwóch trybach:
- Few-shot: Prompt zawiera kilka przykładów par „pytanie — program-rozwiązanie".
- Zero-shot: Prompt zawiera jedynie instrukcję opisującą zadanie, bez przykładów.
Nawet w trybie zero-shot PoT wykazuje wysoką skuteczność dzięki jawnej strukturze, którą model musi wygenerować[4].
Wyniki i skuteczność
Metoda PoT wykazała znaczną poprawę jakości rozwiązań w zadaniach wymagających wieloetapowego rozumowania numerycznego. W oryginalnej pracy została przetestowana na ośmiu zbiorach zadań matematycznych i finansowych, w tym GSM8K, AQUA, SVAMP, FinQA i innych.
- Poprawa dokładności: We wszystkich przypadkach PoT przewyższył bazowe podejście CoT. Średnio osiągnięto względny zysk wynoszący ~12% pod względem odsetka poprawnych rozwiązań.
- Na popularnym matematycznym zbiorze GSM8K dokładność modelu z PoT osiągnęła 71,6%, podczas gdy z CoT wynosiła 63,1%.
- W zadaniach finansowych zysk był jeszcze bardziej znaczący: na zbiorze danych FinQA dokładność wzrosła z 40,4% (CoT) do 64,5% (PoT)[1].
- Kombinacja z Self-Consistency: Skuteczność PoT może być dodatkowo poprawiona w połączeniu z metodą samospójności (self-consistency). W tym przypadku model generuje kilka niezależnych programów-rozwiązań, a ostateczna odpowiedź jest wybierana na zasadzie „głosowania większościowego" spośród wyników ich wykonania. W połączeniu z self-consistency PoT ustanowił nowy stan sztuki (state-of-the-art) w momencie publikacji dla wszystkich przetestowanych matematycznych i finansowych benchmarków[1].
Zalety i ograniczenia
Zalety
- Dokładność obliczeń: Główna zaleta. Wykonywanie operacji arytmetycznych przez zewnętrzny interpreter eliminuje błędy zaokrąglenia i nieścisłości właściwe LLM.
- Możliwość korzystania z bibliotek: Model może wykorzystywać potężne zewnętrzne biblioteki (na przykład do obliczeń symbolicznych, analizy statystycznej, pracy z datami), rozwiązując zadania, które wcześniej były niedostępne.
- Interpretowalność i debugowanie: Kod programistyczny jest formalną i ustrukturyzowaną reprezentacją logiki rozwiązania, co ułatwia jego weryfikację i debugowanie w porównaniu z rozumowaniem w języku naturalnym.
- Uniwersalność: Podejście jest skuteczne zarówno w trybie few-shot, jak i zero-shot oraz ma zastosowanie w różnych dziedzinach (matematyka, finanse, nauka).
Ograniczenia
- Bezpieczeństwo: Wykonywanie wygenerowanego kodu na zewnętrznym interpreterze stwarza zagrożenia bezpieczeństwa. Model teoretycznie może wygenerować złośliwy kod (na przykład usuwający pliki). Dlatego praktyczne zastosowanie PoT wymaga izolacji środowiska wykonawczego (sandbox) i starannego filtrowania kodu[4].
- Ograniczony obszar stosowalności: Metoda jest najskuteczniejsza w zadaniach, które można wyraźnie sformalizować w postaci algorytmu. W przypadku zadań wymagających rozumienia niuansów językowych, zdrowego rozsądku lub podejścia twórczego, bezpośrednie zastosowanie PoT jest utrudnione.
- Zależność od jakości kodu: Skuteczność metody jest bezpośrednio uzależniona od zdolności LLM do generowania syntaktycznie poprawnego i logicznie właściwego kodu.
Powiązane podejścia
Idea wykorzystania kodu do poprawy rozumowania LLM znalazła rozwinięcie również w innych podobnych podejściach.
- Program-Aided Language Models (PAL): Metoda zaproponowana niemal jednocześnie z PoT, która również wykorzystuje generowanie kodu Python do rozwiązywania zadań[5]. Koncepcyjnie PAL i PoT są bardzo zbliżone i potwierdzają skuteczność strategii „rozumowanie przez kod".
- Tree of Thoughts (ToT): Bardziej złożona metoda, która proponuje generowanie i eksplorację „drzewa" możliwych kroków rozwiązania, będąca rozwinięciem idei liniowego „łańcucha" myśli. PoT może być stosowany w obrębie węzłów tego drzewa do weryfikacji hipotez.
Odnośniki
- Oryginalna artykuł naukowy o Program of Thoughts Prompting
- Przewodnik po PoT na portalu 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.
Przypisy
- ↑ 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]