L’importance prise par le logiciel dans le fonctionnement des entreprises et de la société toute entière n’est plus à démontrer. Qu’il s’agisse des services financiers, de la santé, des smartphones, des habitats connectés ou des voitures qui, rappelle IBM, supportent maintenant des dizaines de millions de lignes de code. Au total, ce sont des milliards de lignes de code. Mais maintenir et débugguer des logiciels d’une telle complexité relève aussi du défi permanent. Pour en faciliter la correction et la mise à jour, l’intelligence artificielle s’impose comme une évidence, déjà mise en oeuvre par un certain nombre d’éditeurs d’outils spécialisés. Le projet open source CodeNet a l’ambition d’aller plus loin dans l’AI for code. Annoncé il y a quelques jours par IBM, à l’occasion de sa conférence Think, il a l’objectif de fournir à la communauté de recherche un vaste ensemble d'exemples de code, organisé et diversifié, pour stimuler l’innovation dans ce domaine de l’IA appliqué au code.
Dans le répertoire du projet CodeNet sur GitHub, IBM explique que l’IA pour le code est sur le point de passer du stade du proof-of-concept à l’adoption généralisée. Big blue pense que CodeNet peut agir comme un catalyseur dans cette bascule. A des fins de benchmarking et d’expérimentation, le projet réunit 14 millions d’échantillons de code et environ 500 millions de lignes de programmation dans plus de 55 langages différents, quoi que 95% d'entre elles proviennent des six langages les plus courants actuellement : C++, Python, Java, C, Ruby, C # (mais on y trouve aussi du Rust, du Go, du Pascal, du Fortran et du Cobol). Chaque échantillon est présenté comme une solution à l’un des 4000 problèmes de codage. IBM explique que son projet présente des similitudes avec ImageNet, un immense dataset dans le domaine de l’imagerie qui a eu un impact considérable sur la recherche en matière de vision par ordinateur. « CodeNet vise à faire pour l’IA for code ce qu’ImageNet a fait pour la vision par ordinateur », note-t-il sur GitHub.
Plus de 90% des problèmes décrits
Ceux qui travaillent déjà dans l'IA to code utilisent des technologies comme le traitement du langage naturel (NLP) en les complétant d’analyse de code et de techniques de compilation pour exécuter différentes tâches pratiques telles que la recherche de code, la synthèse, la complétion ainsi que la traduction d’un code à l’autre. Cette dernière est notamment employée pour moderniser des applications existantes héritées et les transformer en micro-services, ainsi que Ruchir Puri, d’IBM Research, l’explique notamment dans un podcast.
Ce qui distingue CodeNet des initiatives déjà menées, c’est d’une part la mise à disposition d’exemples sur plus de 50 langages, avec différentes informations : taille, empreinte mémoire, runtime CPU, ainsi que le statut qui indique les types d’acceptation ou d’erreur. Plus de 90% des problèmes sont décrits, avec les formats d’entrée et de sortie. « Les utilisateurs peuvent exécuter les échantillons de code acceptés (plus de 50% des soumissions sont acceptées) pour extraire des métadonnées supplémentaires et vérifier l’exactitude des résultats des modèles d’IA génératif », indique IBM en ajoutant un autre domaine couvert par le projet : la qualité des exemples de données. Il évoque à ce sujet l’article d’un chercheur de Microsoft Research de Cambridge (Royaume-Uni), Miltiadis Allamanis, sur « Les effets indésirables de la duplication de code dans les modèles d’apprentissage machine de code ». Plusieurs benchmarks ont été développés pour réduire ces problèmes. Des outils de productivité sont par ailleurs fournis pour que les utilisateurs puissent agréger les échantillons en fonction de leurs propres critères.
L'importance du contexte pour convertir un programme
Dans un billet, IBM souligne également l’importance des projets de modernisation des logiciels. Il rappelle que la conversion d’une application écrite dans un langage vers un autre langage en se basant sur des règles n’est pas si facile, notamment parce que chaque langage a son contexte. « Plus le programme est grand, plus il est difficile à traduire », pointe le fournisseur. « Alors que dans le langage humain, le contexte peut être limité à un paragraphe ou deux, ici le contexte peut se rapporter à plusieurs bibliothèques de code. C’est un défi à relever pour l’IA ». Les systèmes basés sur des règles peuvent traduire entre 50 et 60% d’un programme. Le reste doit être fait manuellement en faisant appel à des règles complexes. Et c’est là où l’IA peut intervenir, en se comportant comme le ferait un humain. « Projet CodeNet peut stimuler l’innovation algorithmique pour extraire le contexte avec des modèles séquence à séquence, tout comme nous l’avons appliqué dans les langages humains ».
IBM termine son billet en citant l’exemple d’un client de l’industrie automobile lui ayant demandé son aide pour mettre à jour 3 500 fichiers Java de différentes générations réunissant plus d’un million de lignes de code sur une décennie. « Il s’agissait d’un code d’applicaton monolithique complexe, peu propice aux environnements de cloud », décrit le fournisseur. « Avec notre pile AI for Code, nous avons réduit le processus de migration engagé par l’entreprise sur un an à seulement 4 semaines en générant plus de 25 nouveaux micro-services par réusinage de code ».