Program of Thoughts Prompting
Program of Thoughts Prompting (PoT, англ. «программа мыслей») — это метод инженерии промптов для больших языковых моделей (LLM), при котором модель генерирует программный код в качестве промежуточных шагов решения задачи вместо текстового объяснения[1]. Такой подход позволяет отделить логическое рассуждение от математических вычислений: языковая модель строит план решения в виде программы (например, на Python), а вычисления выполняются внешним, детерминированным интерпретатором кода.
Метод был предложен в 2022 году группой исследователей во главе с Вэньху Ченом (Wenhu Chen) и нацелен прежде всего на задачи числового или логического характера (математические задачи, финансовые расчёты), где традиционные методы рассуждений, такие как Chain-of-Thought, сталкивались с трудностями в точности вычислений[1].
Предпосылки и концепция
Ограничения Chain-of-Thought
Метод PoT является развитием идеи Chain-of-Thought (CoT) (цепочка рассуждений), который ранее был основным подходом для улучшения логического вывода LLM[2]. В методе CoT модель генерирует последовательность промежуточных шагов на естественном языке. Несмотря на значительное повышение качества рассуждений, у этого подхода есть фундаментальное ограничение: модель выполняет и логику, и сами вычисления в текстовой форме. Это часто приводит к неточным арифметическим операциям, ошибкам округления и другим неточностям, поскольку языковые модели по своей природе не являются точными калькуляторами.
Основная идея Program of Thoughts
Основная идея PoT заключается в том, чтобы делегировать вычисления внешней системе (интерпретатору кода), а от языковой модели требовать только формализации плана решения в виде исполняемой программы[1]. Модель выступает в роли «программиста», а не «вычислителя».
Процесс работы выглядит следующим образом:
- Модель получает на вход задачу (например, текстовую математическую задачу).
- Вместо текстовых рассуждений она генерирует скрипт на языке программирования (например, Python), который решает эту задачу.
- Сгенерированный код передаётся внешнему интерпретатору, который его выполняет.
- Результат выполнения кода является окончательным ответом.
Таким образом, сложные и точные вычисления (операции с большими числами, вызов специализированных библиотек) выполняются не самой моделью, а программой, что обеспечивает детерминированность и высокую точность[3].
Реализация и использование библиотек
В реализации PoT ключевым является способность LLM генерировать корректный и эффективный код. Авторы подхода использовали модель OpenAI Codex, специально обученную на задачах программирования. Подход PoT позволяет модели задействовать внешние библиотеки, что существенно расширяет класс решаемых задач. Например, при решении задач символической математики модель может сгенерировать код, использующий библиотеку SymPy для аналитического решения уравнений, что выходит за рамки возможностей чисто языковых методов[1].
Подсказка для PoT может быть предоставлена в двух режимах:
- Few-shot: В промпте содержатся несколько примеров пар «вопрос — программа-решение».
- Zero-shot: В промпте даётся только инструкция, описывающая задачу, без примеров.
Даже в режиме zero-shot PoT показывает высокую эффективность благодаря явной структуре, которую модель должна сгенерировать[4].
Результаты и эффективность
Метод PoT продемонстрировал значительное повышение качества решений на задачах, требующих многошагового числового рассуждения. В оригинальной работе он был протестирован на восьми наборах математических и финансовых задач, включая GSM8K, AQUA, SVAMP, FinQA и др.
- Повышение точности: Во всех случаях PoT превзошёл базовый подход CoT. В среднем был достигнут относительный выигрыш в ~12% по доле правильных решений.
- На популярном математическом наборе GSM8K точность модели с PoT достигла 71,6%, тогда как с CoT она составляла 63,1%.
- В финансовых задачах выигрыш был ещё более существенным: на датасете FinQA точность увеличилась с 40,4% (CoT) до 64,5% (PoT)[1].
- Комбинация с Self-Consistency: Эффективность PoT может быть дополнительно улучшена при сочетании с методом самосогласованности (self-consistency). В этом случае модель генерирует несколько независимых программ-решений, и итоговый ответ выбирается по «принципу большинства» из результатов их выполнения. В сочетании с self-consistency PoT установил новое состояние дел (state-of-the-art) на момент публикации для всех протестированных математических и финансовых бенчмарков[1].
Преимущества и ограничения
Преимущества
- Точность вычислений: Главное преимущество. Выполнение арифметических операций внешним интерпретатором устраняет ошибки округления и неточности, присущие LLM.
- Возможность использования библиотек: Модель может привлекать мощные внешние библиотеки (например, для символьных вычислений, статистического анализа, работы с датами), решая задачи, которые были недоступны ранее.
- Интерпретируемость и отладка: Программный код является формальным и структурированным представлением логики решения, что облегчает его проверку и отладку по сравнению с рассуждениями на естественном языке.
- Универсальность: Подход эффективен как в few-shot, так и в zero-shot режимах и применим в разных доменах (математика, финансы, наука).
Ограничения
- Безопасность: Исполнение сгенерированного кода на внешнем интерпретаторе создаёт риски безопасности. Модель теоретически может сгенерировать вредоносный код (например, для удаления файлов). Поэтому практическое применение PoT требует изоляции среды выполнения (sandbox) и тщательной фильтрации кода[4].
- Ограниченная область применимости: Метод наиболее эффективен для задач, которые можно чётко формализовать в виде алгоритма. Для задач, требующих понимания нюансов языка, здравого смысла или творческого подхода, прямое применение PoT затруднено.
- Зависимость от качества кода: Эффективность метода напрямую зависит от способности LLM генерировать синтаксически корректный и логически правильный код.
Связанные подходы
Идея использования кода для улучшения рассуждений LLM получила развитие и в других схожих подходах.
- Program-Aided Language Models (PAL): Метод, предложенный почти одновременно с PoT, который также использует генерацию Python-кода для решения задач[5]. Концептуально PAL и PoT очень близки и подтверждают эффективность стратегии «рассуждение через код».
- Tree of Thoughts (ToT): Более сложный метод, который предлагает генерировать и исследовать «дерево» возможных шагов решения, что является развитием идеи линейной «цепочки» мыслей. PoT может быть использован в рамках узлов этого дерева для проверки гипотез.
Ссылки
- Оригинальная научная статья о Program of Thoughts Prompting
- Руководство по PoT на портале Learn Prompting
Литература
- 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.
Примечания
- ↑ 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]