Program of Thoughts Prompting (FR)
Program of Thoughts Prompting (PoT, de l'anglais « programme de pensées ») est une méthode de prompt engineering pour les grands modèles de langage (LLM), dans laquelle le modèle génère du code de programmation comme étapes intermédiaires pour résoudre un problème, au lieu d'une explication textuelle[1]. Cette approche permet de séparer le raisonnement logique des calculs mathématiques : le modèle de langage élabore un plan de résolution sous forme de programme (par exemple, en Python), et les calculs sont effectués par un interpréteur de code externe et déterministe.
La méthode a été proposée en 2022 par un groupe de chercheurs dirigé par Wenhu Chen et vise principalement les tâches à caractère numérique ou logique (problèmes mathématiques, calculs financiers), où les méthodes de raisonnement traditionnelles, telles que le Chain-of-Thought, rencontraient des difficultés en termes de précision des calculs[1].
Contexte et concept
Limites du Chain-of-Thought
La méthode PoT est une évolution de l'idée du Chain-of-Thought (CoT) (chaîne de pensée), qui était auparavant l'approche principale pour améliorer le raisonnement logique des LLM[2]. Dans la méthode CoT, le modèle génère une séquence d'étapes intermédiaires en langage naturel. Malgré une amélioration significative de la qualité du raisonnement, cette approche présente une limite fondamentale : le modèle effectue à la fois la logique et les calculs sous forme de texte. Cela conduit souvent à des opérations arithmétiques inexactes, des erreurs d'arrondi et d'autres imprécisions, car les modèles de langage ne sont pas, par nature, des calculateurs précis.
Idée principale du Program of Thoughts
L'idée principale de PoT est de déléguer les calculs à un système externe (un interpréteur de code), tandis que le modèle de langage est uniquement chargé de formaliser le plan de résolution sous la forme d'un programme exécutable[1]. Le modèle agit en tant que « programmeur » plutôt que « calculateur ».
Le processus de fonctionnement est le suivant :
- Le modèle reçoit une tâche en entrée (par exemple, un problème mathématique textuel).
- Au lieu de générer un raisonnement textuel, il produit un script dans un langage de programmation (par exemple, Python) qui résout cette tâche.
- Le code généré est transmis à un interpréteur externe, qui l'exécute.
- Le résultat de l'exécution du code constitue la réponse finale.
Ainsi, les calculs complexes et précis (opérations sur de grands nombres, appels à des bibliothèques spécialisées) sont effectués non pas par le modèle lui-même, mais par le programme, ce qui garantit le déterminisme et une grande précision[3].
Implémentation et utilisation de bibliothèques
Dans l'implémentation de PoT, la capacité du LLM à générer du code correct et efficace est cruciale. Les auteurs de l'approche ont utilisé le modèle OpenAI Codex, spécialement entraîné sur des tâches de programmation. L'approche PoT permet au modèle d'utiliser des bibliothèques externes, ce qui élargit considérablement la classe des problèmes pouvant être résolus. Par exemple, pour résoudre des problèmes de mathématiques symboliques, le modèle peut générer du code utilisant la bibliothèque SymPy pour la résolution analytique d'équations, ce qui dépasse les capacités des méthodes purement linguistiques[1].
Le prompt pour PoT peut être fourni dans deux modes :
- Few-shot : Le prompt contient plusieurs exemples de paires « question — programme de résolution ».
- Zero-shot : Le prompt ne contient qu'une instruction décrivant la tâche, sans exemples.
Même en mode zero-shot, PoT démontre une grande efficacité grâce à la structure explicite que le modèle doit générer[4].
Résultats et efficacité
La méthode PoT a démontré une amélioration significative de la qualité des solutions pour les tâches nécessitant un raisonnement numérique en plusieurs étapes. Dans l'article original, elle a été testée sur huit ensembles de données de problèmes mathématiques et financiers, dont GSM8K, AQUA, SVAMP, FinQA et d'autres.
- Augmentation de la précision : Dans tous les cas, PoT a surpassé l'approche de base CoT. En moyenne, un gain relatif d'environ ~12 % a été atteint en termes de proportion de solutions correctes.
- Sur l'ensemble de données mathématiques populaire GSM8K, la précision du modèle avec PoT a atteint 71,6 %, alors qu'elle était de 63,1 % avec CoT.
- Pour les problèmes financiers, le gain a été encore plus significatif : sur l'ensemble de données FinQA, la précision est passée de 40,4 % (CoT) à 64,5 % (PoT)[1].
- Combinaison avec la Self-Consistency : L'efficacité de PoT peut être encore améliorée en la combinant avec la méthode d' auto-cohérence (self-consistency). Dans ce cas, le modèle génère plusieurs programmes de résolution indépendants, et la réponse finale est choisie selon le « principe de la majorité » parmi les résultats de leur exécution. Combiné à la self-consistency, PoT a établi un nouvel état de l'art (state-of-the-art) au moment de sa publication pour tous les benchmarks mathématiques et financiers testés[1].
Avantages et limites
Avantages
- Précision des calculs : C'est le principal avantage. L'exécution des opérations arithmétiques par un interpréteur externe élimine les erreurs d'arrondi et les imprécisions inhérentes aux LLM.
- Possibilité d'utiliser des bibliothèques : Le modèle peut faire appel à de puissantes bibliothèques externes (par exemple, pour le calcul symbolique, l'analyse statistique, la manipulation de dates), résolvant ainsi des problèmes qui étaient auparavant hors de sa portée.
- Interprétabilité et débogage : Le code de programmation est une représentation formelle et structurée de la logique de résolution, ce qui facilite sa vérification et son débogage par rapport à un raisonnement en langage naturel.
- Universalité : L'approche est efficace aussi bien en mode few-shot qu'en mode zero-shot et s'applique à divers domaines (mathématiques, finance, sciences).
Limites
- Sécurité : L'exécution de code généré sur un interpréteur externe présente des risques de sécurité. Le modèle pourrait théoriquement générer du code malveillant (par exemple, pour supprimer des fichiers). Par conséquent, l'application pratique de PoT nécessite un environnement d'exécution isolé (sandbox) et un filtrage rigoureux du code[4].
- Domaine d'application limité : La méthode est plus efficace pour les tâches qui peuvent être clairement formalisées sous forme d'algorithme. Pour les tâches nécessitant une compréhension des nuances du langage, du bon sens ou une approche créative, l'application directe de PoT est difficile.
- Dépendance à la qualité du code : L'efficacité de la méthode dépend directement de la capacité du LLM à générer du code syntaxiquement correct et logiquement valide.
Approches connexes
L'idée d'utiliser du code pour améliorer le raisonnement des LLM a également été développée dans d'autres approches similaires.
- Program-Aided Language Models (PAL) : Une méthode proposée presque simultanément à PoT, qui utilise également la génération de code Python pour résoudre des problèmes[5]. Conceptuellement, PAL et PoT sont très proches et confirment l'efficacité de la stratégie du « raisonnement via le code ».
- Tree of Thoughts (ToT) : Une méthode plus complexe qui propose de générer et d'explorer un « arbre » d'étapes de résolution possibles, ce qui constitue une extension de l'idée d'une « chaîne » de pensées linéaire. PoT peut être utilisé au sein des nœuds de cet arbre pour vérifier des hypothèses.
Liens externes
- Article de recherche original sur le Program of Thoughts Prompting
- Guide sur le PoT sur le portail Learn Prompting
Bibliographie
- 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.
Références
- ↑ 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]