CodeChain : Vers une génération de code modulaire via une chaîne d'auto-révisions avec des sous-modules représentatifs
CodeChain: Towards Modular Code Generation Through Chain of Self-revisions with Representative Sub-modules
October 13, 2023
Auteurs: Hung Le, Hailin Chen, Amrita Saha, Akash Gokul, Doyen Sahoo, Shafiq Joty
cs.AI
Résumé
Les modèles de langage de grande taille (LLMs) sont déjà devenus très compétents pour résoudre des tâches de programmation simples, comme celles des benchmarks HumanEval ou MBPP. Cependant, la résolution de tâches de programmation plus complexes et compétitives reste un défi pour ces modèles, probablement en raison de leur tendance à générer des solutions sous forme de blocs de code monolithiques plutôt que de les décomposer en sous-tâches et sous-modules logiques. D'un autre côté, les programmeurs expérimentés écrivent instinctivement du code modulaire avec des abstractions pour résoudre des tâches complexes, en réutilisant souvent des modules développés précédemment. Pour combler cet écart, nous proposons CodeChain, un nouveau cadre d'inférence qui suscite la génération de code modulaire à travers une chaîne d'auto-révisions, chacune étant guidée par des sous-modules représentatifs générés lors des itérations précédentes. Concrètement, CodeChain commence par instruire le LLM pour générer du code modulaire via une incitation en chaîne de pensée. Ensuite, il applique une chaîne d'auto-révisions en itérant les deux étapes suivantes : 1) extraire et regrouper les sous-modules générés, puis sélectionner les représentants des clusters comme des implémentations plus génériques et réutilisables, et 2) augmenter l'incitation originale en chaîne de pensée avec ces implémentations de modules sélectionnées et instruire le LLM pour regénérer de nouvelles solutions modulaires. Nous constatons qu'en encourageant naturellement le LLM à réutiliser les sous-modules précédemment développés et vérifiés, CodeChain peut considérablement améliorer à la fois la modularité et la justesse des solutions générées, obtenant des améliorations relatives de 35 % sur APPS et de 76 % sur CodeContests en termes de pass@1. Il s'avère efficace aussi bien sur les LLMs d'OpenAI que sur les LLMs open-source comme WizardCoder. Nous menons également des études d'ablation approfondies avec différentes méthodes d'incitation, nombre de clusters, tailles de modèles, qualités de programmes, etc., pour fournir des insights utiles qui sous-tendent le succès de CodeChain.
English
Large Language Models (LLMs) have already become quite proficient at solving
simpler programming tasks like those in HumanEval or MBPP benchmarks. However,
solving more complex and competitive programming tasks is still quite
challenging for these models - possibly due to their tendency to generate
solutions as monolithic code blocks instead of decomposing them into logical
sub-tasks and sub-modules. On the other hand, experienced programmers
instinctively write modularized code with abstraction for solving complex
tasks, often reusing previously developed modules. To address this gap, we
propose CodeChain, a novel framework for inference that elicits modularized
code generation through a chain of self-revisions, each being guided by some
representative sub-modules generated in previous iterations. Concretely,
CodeChain first instructs the LLM to generate modularized codes through
chain-of-thought prompting. Then it applies a chain of self-revisions by
iterating the two steps: 1) extracting and clustering the generated sub-modules
and selecting the cluster representatives as the more generic and re-usable
implementations, and 2) augmenting the original chain-of-thought prompt with
these selected module-implementations and instructing the LLM to re-generate
new modularized solutions. We find that by naturally encouraging the LLM to
reuse the previously developed and verified sub-modules, CodeChain can
significantly boost both modularity as well as correctness of the generated
solutions, achieving relative pass@1 improvements of 35% on APPS and 76% on
CodeContests. It is shown to be effective on both OpenAI LLMs as well as
open-sourced LLMs like WizardCoder. We also conduct comprehensive ablation
studies with different methods of prompting, number of clusters, model sizes,
program qualities, etc., to provide useful insights that underpin CodeChain's
success.