Quel LLM pour coder en cobol ? Un benchmark spécifique émerge
Publié par Clément Bohic le - mis à jour à
Un benchmark spécifique à la génération de code cobol voit le jour, sur la base du dataset HumanEval.
Comment créer un benchmark spécifique à la génération de code cobol ? En adaptant un dataset existant.
Une start-up américaine a choisi cette option. Elle s’est appuyée sur la référence HumanEval. Il en résulte… COBOLEval.
Des 164 problèmes Python que contient HumanEval, 146 ont effectivement été traduits. Ont notamment été ignorés ceux acceptant ou retournant des types difficilement représentables en cobol, comme Any et Dict.
Les fonctions n’existant pas en cobol, il a fallu utiliser les sous-programmes (définition des arguments et des variables de retour dans la section de liaison).
Autre contrariété : en cobol, pas de chaînes, d’entiers ou de tableaux à longueur variable. Il faut spécifier, dans la clause PICTURE, le nombre de caractères occupés en mémoire. Un problème résolu par la mise en place d’un plafond : COBOLEval n’accepte ni ne retourne d’éléments de longueur supérieure à 100.
Cobol n’a, pas ailleurs, pas de variables locales. Il faut les déclarer par avance, dans la section dite de stockage de travail. Concilier cette structure stricte avec le fonctionnement des LLM a impliqué des techniques de décomposition et d’infilling.
Chaque problème s’assortit, en moyenne, de six tests. Une réponse doit les réussir tous pour qu’on la considère comme correcte. COBOLEval utilise le compilateur GnuCOBOL, récemment entré, en France, au Socle interministériel de logiciels libres.
Les auteurs de COBOLEval ont aussi développé un LLM « spécial cobol » : mAInframer-1, avec Code Llama comme socle. Ils en communiquent les performances dans des conditions bien précises : génération d’une seule solution (pass@1) avec température à 0.
Modèle | Taux de réponses correctes | Taux de compilation avec GnuCOBOL |
GPT-3.5 Turbo | 4,11 | 19,17 |
GPT-4 | 8,9 | 47,94 |
Code Llama 7B | 0,68 | 25,34 |
Code Llama 13B | 1,36 | 13,01 |
Code Llama 34B | 2,05 | 78,76 |
mAInframer 7B | 6,16 | 69,17 |
mAInframer 13B | 8,9 | 54,1 |
mAInframer 34B | 10,27 | 73,97 |
Illustration © Quardia Inc. – Adobe Stock