Program of Thoughts Prompting (PT)

From Systems analysis Wiki
Jump to navigation Jump to search

Program of Thoughts Prompting (PoT, do inglês "programa de pensamentos") é um método de engenharia de prompts para modelos de linguagem grandes (LLMs) no qual o modelo gera código de programação como passos intermediários para a resolução de um problema, em vez de uma explicação textual[1]. Essa abordagem permite separar o raciocínio lógico dos cálculos matemáticos: o modelo de linguagem constrói um plano de solução na forma de um programa (por exemplo, em Python), e os cálculos são executados por um interpretador de código externo e determinístico.

O método foi proposto em 2022 por um grupo de pesquisadores liderado por Wenhu Chen e destina-se principalmente a tarefas de natureza numérica ou lógica (problemas matemáticos, cálculos financeiros), nas quais métodos de raciocínio tradicionais, como o Chain-of-Thought, enfrentavam dificuldades com a precisão dos cálculos[1].

Contexto e Conceito

Limitações do Chain-of-Thought

O método PoT é uma evolução da ideia do Chain-of-Thought (CoT) (cadeia de pensamentos), que era anteriormente a principal abordagem para melhorar a inferência lógica dos LLMs[2]. No método CoT, o modelo gera uma sequência de passos intermediários em linguagem natural. Apesar de uma melhoria significativa na qualidade do raciocínio, essa abordagem possui uma limitação fundamental: o modelo executa tanto a lógica quanto os próprios cálculos em formato de texto. Isso frequentemente leva a operações aritméticas imprecisas, erros de arredondamento e outras inexatidões, pois os modelos de linguagem, por sua natureza, não são calculadoras precisas.

A Ideia Principal do Program of Thoughts

A ideia principal do PoT consiste em delegar os cálculos a um sistema externo (um interpretador de código), exigindo do modelo de linguagem apenas a formalização do plano de solução na forma de um programa executável[1]. O modelo atua como um "programador", e não como um "calculador".

O processo de funcionamento é o seguinte:

  1. O modelo recebe uma tarefa como entrada (por exemplo, um problema matemático em texto).
  2. Em vez de raciocínios textuais, ele gera um script em uma linguagem de programação (por exemplo, Python) que resolve essa tarefa.
  3. O código gerado é passado para um interpretador externo, que o executa.
  4. O resultado da execução do código é a resposta final.

Dessa forma, cálculos complexos e precisos (operações com números grandes, chamadas a bibliotecas especializadas) não são realizados pelo modelo em si, mas pelo programa, o que garante determinismo e alta precisão[3].

Implementação e Uso de Bibliotecas

Na implementação do PoT, a capacidade do LLM de gerar código correto e eficiente é fundamental. Os autores da abordagem utilizaram o modelo OpenAI Codex, especialmente treinado em tarefas de programação. A abordagem PoT permite que o modelo utilize bibliotecas externas, o que expande significativamente a classe de problemas que podem ser resolvidos. Por exemplo, ao resolver problemas de matemática simbólica, o modelo pode gerar um código que utiliza a biblioteca SymPy para a solução analítica de equações, algo que está além das capacidades de métodos puramente linguísticos[1].

O prompt para PoT pode ser fornecido em dois modos:

  • Few-shot: O prompt contém vários exemplos de pares "pergunta — programa-solução".
  • Zero-shot: O prompt fornece apenas uma instrução que descreve a tarefa, sem exemplos.

Mesmo no modo zero-shot, o PoT demonstra alta eficácia graças à estrutura explícita que o modelo deve gerar[4].

Resultados e Eficácia

O método PoT demonstrou um aumento significativo na qualidade das soluções para tarefas que exigem raciocínio numérico de múltiplos passos. No trabalho original, ele foi testado em oito conjuntos de dados de problemas matemáticos e financeiros, incluindo GSM8K, AQUA, SVAMP, FinQA, entre outros.

  • Aumento da precisão: Em todos os casos, o PoT superou a abordagem base CoT. Em média, foi alcançado um ganho relativo de ~12% na proporção de soluções corretas.
    • No popular conjunto de dados matemáticos GSM8K, a precisão do modelo com PoT atingiu 71,6%, enquanto com CoT era de 63,1%.
    • Em problemas financeiros, o ganho foi ainda mais substancial: no dataset FinQA, a precisão aumentou de 40,4% (CoT) para 64,5% (PoT)[1].
  • Combinação com Self-Consistency: A eficácia do PoT pode ser ainda mais aprimorada quando combinada com o método de autoconsistência (self-consistency). Nesse caso, o modelo gera vários programas-solução independentes, e a resposta final é escolhida pelo "princípio da maioria" a partir dos resultados de sua execução. Em combinação com self-consistency, o PoT estabeleceu um novo estado da arte (state-of-the-art) no momento da publicação para todos os benchmarks matemáticos e financeiros testados[1].

Vantagens e Limitações

Vantagens

  • Precisão dos cálculos: A principal vantagem. A execução de operações aritméticas por um interpretador externo elimina os erros de arredondamento e as imprecisões inerentes aos LLMs.
  • Capacidade de usar bibliotecas: O modelo pode utilizar bibliotecas externas poderosas (por exemplo, para computação simbólica, análise estatística, manipulação de datas), resolvendo problemas que antes eram inacessíveis.
  • Interpretabilidade e depuração: O código do programa é uma representação formal e estruturada da lógica da solução, o que facilita sua verificação e depuração em comparação com raciocínios em linguagem natural.
  • Universalidade: A abordagem é eficaz tanto nos modos few-shot quanto zero-shot e é aplicável em diversos domínios (matemática, finanças, ciência).

Limitações

  • Segurança: A execução do código gerado em um interpretador externo cria riscos de segurança. Teoricamente, o modelo pode gerar código malicioso (por exemplo, para deletar arquivos). Portanto, a aplicação prática do PoT requer um ambiente de execução isolado (sandbox) e uma filtragem cuidadosa do código[4].
  • Escopo de aplicação limitado: O método é mais eficaz para tarefas que podem ser claramente formalizadas como um algoritmo. Para problemas que exigem a compreensão de nuances da linguagem, bom senso ou uma abordagem criativa, a aplicação direta do PoT é difícil.
  • Dependência da qualidade do código: A eficácia do método depende diretamente da capacidade do LLM de gerar código sintaticamente correto e logicamente válido.

Abordagens Relacionadas

A ideia de usar código para aprimorar o raciocínio dos LLMs também foi desenvolvida em outras abordagens semelhantes.

  • Program-Aided Language Models (PAL): Um método proposto quase simultaneamente ao PoT, que também utiliza a geração de código Python para resolver problemas[5]. Conceitualmente, PAL e PoT são muito próximos e confirmam a eficácia da estratégia de "raciocínio através do código".
  • Tree of Thoughts (ToT): Um método mais complexo que propõe a geração e exploração de uma "árvore" de possíveis passos de solução, sendo uma evolução da ideia da "cadeia" linear de pensamentos. O PoT pode ser utilizado nos nós dessa árvore para testar hipóteses.

Ligações externas

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.

Notas

  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]