Program of Thoughts Prompting (ES)

From Systems analysis Wiki
Jump to navigation Jump to search

Program of Thoughts Prompting (PoT, del inglés «programa de pensamientos») es un método de ingeniería de prompteo para grandes modelos de lenguaje (LLM) en el que el modelo genera código de programa como pasos intermedios para resolver un problema, en lugar de una explicación textual[1]. Este enfoque permite separar el razonamiento lógico de los cálculos matemáticos: el modelo de lenguaje construye un plan de solución en forma de programa (por ejemplo, en Python), y los cálculos son realizados por un intérprete de código externo y determinista.

El método fue propuesto en 2022 por un grupo de investigadores liderado por Wenhu Chen y está dirigido principalmente a problemas de naturaleza numérica o lógica (problemas matemáticos, cálculos financieros), donde los métodos de razonamiento tradicionales, como Chain-of-Thought, enfrentaban dificultades con la precisión de los cálculos[1].

Antecedentes y concepto

Limitaciones de Chain-of-Thought

El método PoT es una evolución de la idea de Chain-of-Thought (CoT) (cadena de pensamiento), que anteriormente era el enfoque principal para mejorar la inferencia lógica de los LLM[2]. En el método CoT, el modelo genera una secuencia de pasos intermedios en lenguaje natural. A pesar de mejorar significativamente la calidad del razonamiento, este enfoque tiene una limitación fundamental: el modelo realiza tanto la lógica como los cálculos en formato de texto. Esto a menudo conduce a operaciones aritméticas imprecisas, errores de redondeo y otras inexactitudes, ya que los modelos de lenguaje no son, por naturaleza, calculadoras precisas.

La idea principal de Program of Thoughts

La idea principal de PoT consiste en delegar los cálculos a un sistema externo (un intérprete de código), exigiendo al modelo de lenguaje únicamente la formalización del plan de solución en forma de un programa ejecutable[1]. El modelo actúa como un «programador», no como un «calculador».

El proceso funciona de la siguiente manera:

  1. El modelo recibe un problema como entrada (por ejemplo, un problema matemático de texto).
  2. En lugar de razonamientos textuales, genera un script en un lenguaje de programación (por ejemplo, Python) que resuelve el problema.
  3. El código generado se pasa a un intérprete externo que lo ejecuta.
  4. El resultado de la ejecución del código es la respuesta final.

De este modo, los cálculos complejos y precisos (operaciones con números grandes, llamadas a bibliotecas especializadas) no los realiza el modelo en sí, sino el programa, lo que garantiza la determinismo y una alta precisión[3].

Implementación y uso de bibliotecas

En la implementación de PoT, la capacidad del LLM para generar código correcto y eficiente es clave. Los autores del enfoque utilizaron el modelo OpenAI Codex, entrenado específicamente en tareas de programación. El enfoque PoT permite al modelo utilizar bibliotecas externas, lo que amplía significativamente la clase de problemas que se pueden resolver. Por ejemplo, al resolver problemas de matemáticas simbólicas, el modelo puede generar código que utiliza la biblioteca SymPy para la resolución analítica de ecuaciones, algo que está fuera del alcance de los métodos puramente lingüísticos[1].

El prompteo para PoT se puede proporcionar en dos modos:

  • Few-shot: El prompt contiene varios ejemplos de pares «pregunta - programa de solución».
  • Zero-shot: El prompt solo contiene una instrucción que describe el problema, sin ejemplos.

Incluso en el modo zero-shot, PoT demuestra una alta eficacia gracias a la estructura explícita que el modelo debe generar[4].

Resultados y eficacia

El método PoT ha demostrado una mejora significativa en la calidad de las soluciones en tareas que requieren razonamiento numérico de varios pasos. En el trabajo original, fue probado en ocho conjuntos de datos de problemas matemáticos y financieros, incluyendo GSM8K, AQUA, SVAMP, FinQA, entre otros.

  • Aumento de la precisión: En todos los casos, PoT superó al enfoque base de CoT. En promedio, se logró una ganancia relativa de ~12% en la proporción de soluciones correctas.
    • En el popular conjunto de datos matemáticos GSM8K, la precisión del modelo con PoT alcanzó el 71,6%, mientras que con CoT fue del 63,1%.
    • En problemas financieros, la ganancia fue aún más sustancial: en el conjunto de datos FinQA, la precisión aumentó del 40,4% (CoT) al 64,5% (PoT)[1].
  • Combinación con Self-Consistency: La eficacia de PoT puede mejorarse aún más al combinarlo con el método de autoconsistencia (self-consistency). En este caso, el modelo genera varios programas de solución independientes, y la respuesta final se elige por el «principio de la mayoría» a partir de los resultados de su ejecución. En combinación con self-consistency, PoT estableció un nuevo estado del arte (state-of-the-art) en el momento de su publicación para todos los benchmarks matemáticos y financieros probados[1].

Ventajas y limitaciones

Ventajas

  • Precisión en los cálculos: La principal ventaja. La ejecución de operaciones aritméticas por un intérprete externo elimina los errores de redondeo e imprecisiones inherentes a los LLM.
  • Posibilidad de usar bibliotecas: El modelo puede recurrir a potentes bibliotecas externas (por ejemplo, para cálculos simbólicos, análisis estadístico, manipulación de fechas), resolviendo problemas que antes eran inaccesibles.
  • Interpretabilidad y depuración: El código de programa es una representación formal y estructurada de la lógica de la solución, lo que facilita su verificación y depuración en comparación con los razonamientos en lenguaje natural.
  • Universalidad: El enfoque es eficaz tanto en los modos few-shot como zero-shot y es aplicable en diferentes dominios (matemáticas, finanzas, ciencia).

Limitaciones

  • Seguridad: La ejecución de código generado en un intérprete externo crea riesgos de seguridad. Teóricamente, el modelo podría generar código malicioso (por ejemplo, para eliminar archivos). Por lo tanto, la aplicación práctica de PoT requiere un entorno de ejecución aislado (sandbox) y un filtrado cuidadoso del código[4].
  • Ámbito de aplicación limitado: El método es más eficaz para problemas que pueden formalizarse claramente como un algoritmo. Para tareas que requieren comprender matices del lenguaje, sentido común o un enfoque creativo, la aplicación directa de PoT es difícil.
  • Dependencia de la calidad del código: La eficacia del método depende directamente de la capacidad del LLM para generar código sintácticamente correcto y lógicamente válido.

Enfoques relacionados

La idea de utilizar código para mejorar el razonamiento de los LLM también se ha desarrollado en otros enfoques similares.

  • Program-Aided Language Models (PAL): Un método propuesto casi simultáneamente con PoT, que también utiliza la generación de código Python para resolver problemas[5]. Conceptualmente, PAL y PoT son muy cercanos y confirman la eficacia de la estrategia de «razonamiento a través del código».
  • Tree of Thoughts (ToT): Un método más complejo que propone generar y explorar un «árbol» de posibles pasos de solución, lo que supone una evolución de la idea de una «cadena» lineal de pensamientos. PoT puede utilizarse dentro de los nodos de este árbol para verificar hipótesis.

Enlaces externos

Bibliografía

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

Referencias

  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]