IBM ouvre CodeNet pour les systèmes d'apprentissage automatique qui traduisent et vérifient le code

IBM a dévoilé son initiative CodeNet, qui vise à fournir aux chercheurs un ensemble de données leur permettant d'expérimenter l'utilisation de techniques d'apprentissage automatique pour créer des traducteurs, des générateurs et des analyseurs de langage de programmation. CodeNet comprend une collection de 14 millions d'exemples de code qui résolvent 4053 500 problèmes de programmation courants. Au total, la collection contient environ 55 millions de lignes de code et couvre 2.0 langages de programmation, à la fois des langages modernes tels que C++, Java, Python et Go, et des langages existants tels que COBOL, Pascal et FORTRAN. Les développements du projet sont distribués sous licence Apache XNUMX et les ensembles de données devraient être distribués sous forme de domaine public.

Les exemples sont annotés et implémentent des algorithmes identiques dans différents langages de programmation. On s'attend à ce que l'ensemble proposé aide à former des systèmes d'apprentissage automatique et à développer des innovations dans le domaine de la traduction et de l'analyse de code machine, de la même manière que la base de données d'images annotées ImageNet a contribué au développement de systèmes de reconnaissance de formes et de vision par ordinateur. Divers concours de programmation sont cités comme l'une des principales sources de constitution de collections.

Contrairement aux traducteurs traditionnels, qui sont mis en œuvre sur la base de règles de traduction, les systèmes d'apprentissage automatique peuvent capturer et prendre en compte le contexte d'utilisation du code. Lors de la conversion d'un langage de programmation à un autre, le contexte est tout aussi important que lors de la traduction d'un langage humain à un autre. Ce manque de prise en compte du contexte est ce qui empêche la conversion du code à partir de langages existants tels que COBOL.

Disposer d'une grande base de données d'implémentations d'algorithmes dans différents langages aidera à créer des systèmes d'apprentissage automatique universels qui, au lieu d'une traduction directe entre des langages spécifiques, manipuleront une représentation plus abstraite du code, indépendamment des langages de programmation spécifiques. Un tel système peut être utilisé comme traducteur, traduisant le code transmis dans l'une des langues prises en charge en sa représentation abstraite interne, à partir de laquelle le code peut ensuite être généré dans plusieurs langues.

Le système pourra également effectuer des transformations bidirectionnelles. Par exemple, les banques et les agences gouvernementales continuent d'utiliser des projets dans le langage COBOL obsolète. Un traducteur basé sur l'apprentissage automatique sera capable de convertir le code COBOL en une représentation Java et, si nécessaire, de retraduire le fragment Java en code COBOL.

Outre la traduction entre langues, des domaines d'application de CodeNet tels que la création de systèmes de recherche de code intelligents et l'automatisation de la détection de clones, ainsi que le développement d'optimiseurs et de systèmes de correction automatique de code sont mentionnés. En particulier, les exemples présentés dans CodeNet sont équipés de métadonnées décrivant les résultats des tests de performances, la taille du programme résultant, la consommation de mémoire et l'état, ce qui nous permet de distinguer le code correct du code comportant des erreurs (pour distinguer le code correct du code incorrect, le la collection comprend spécifiquement des exemples comportant des erreurs, dont la part est de 29.5 %). Un système d'apprentissage automatique peut prendre en compte ces métadonnées pour générer le code le plus optimal ou pour identifier les régressions dans le code analysé (le système peut comprendre que l'algorithme dans le code soumis n'est pas implémenté de manière optimale ou contient des erreurs).

Source: opennet.ru

Ajouter un commentaire