Comment traduire de l’anglais vers du code informatique grâce à l’IA ?

Converser avec une machine est l’un des fantasmes de l’humanité depuis la création de l’ordinateur. Dès 1950, Turing publiait son célèbre article testant la faculté d’une machine à imiter une conversation humaine.

 

Le développement récent du traitement automatique du langage naturel offre des perspectives prometteuses dans cette voie. Une autre manière d’aborder cette question est de considérer le développement informatique comme la première étape pour échanger avec un ordinateur.

En effet, grâce à des langages dédiés (langages de programmation comme Java, Python, html, css, etc.) il est aujourd’hui possible de réaliser toutes sortes d’outils comme des chatbots par exemple qui imitent le langage humain.

Créer un programme conforme à une requête exprimée en langage naturel

C’est à la croisée entre le langage parlé par des humains (le langage naturel) et le langage informatique (le langage formel) que se situe le travail de Nathanaël Beau, doctorant au sein des équipes de onepoint

En effet, la thèse de Nathanaël Beau porte sur la question suivante : dans quelle mesure est-il possible, pour une machine, de créer un programme conforme à une requête exprimée en langage naturel ? Cette question correspond à un problème de traduction où l’on prend une requête exprimée dans une langue naturelle (l’Anglais par exemple) et on cherche à générer le code informatique correspondant à la requête (comme du Python). Dans cette tâche, on étudie donc l’adéquation entre un langage naturel et un langage de formel où l’ambiguïté n’est pas permise.

Comment traduire de l’anglais vers du code informatique grâce à l’AI

Figure 1 : Exemple de problème posée et de code généré par une IA pour le résoudre [1]

Source : Dan Hendrycks et al. “Measuring Coding Challenge Competence With APPS”

Nathanaël Beau a deux objectifs au cours de sa thèse :

  • Créer un outil d’aide au développement permettant à un développeur de formuler une intention en langage naturel et d’obtenir le code informatique correspondant ;
  • Assurer la validité des codes générés par son modèle et permettre leur analyse fine pour éviter les biais et permettre de l’améliorer.

Pour ce faire, Nathanaël privilégie des méthodes d’apprentissages profonds qui ont montré des progrès impressionnants récemment dans le domaine de la traduction, notamment avec des architectures comme BERT et GPT.

Créer un outil d’aide au développement informatique

Tous les développeurs ont connu la situation où ils savent ce qu’ils veulent faire sans connaître la fonction informatique qui réalise leur intention. Pour résoudre cette difficulté, la plupart des développeurs effectuent des recherches sur le web, en formulant leur question en langage naturel, afin de sélectionner une solution possible dans le langage de programmation souhaité, puis de modifier la solution pour qu’elle soit conforme au contexte de leur projet.

Dans ce processus, Nathanaël identifie trois difficultés principales rencontrées par le développeur :

  • Formuler une intention sous la bonne forme pour effectuer une requête sur Internet ;
  • Sélectionner le bon code parmi tous ceux disponibles sur les différents sites ;
  • Modifier le code choisi pour qu’il convienne effectivement au contexte du projet.

Le premier but visé par Nathanaël Beau durant ses trois années de thèse est de résoudre les difficultés (2) et (3) grâce à un outil d’aide aux développeurs sur-mesure directement intégré dans leur environnement de développement (comme Pycharm ou Visual Studio Code) et de permettre une certaine flexibilité au développeur pour formuler son intention de la bonne manière.

Assurance de la validité du code généré et analyse fine de ses propriétés

De nombreuses entreprises comme onepoint visent aussi à créer un outil d’aide aux développeurs. On peut citer OpenAI qui a récemment sorti l’architecture Github Copilot basée sur GPT-3. Cette architecture a montré des résultats impressionnants pour la génération de code.

Pour autant, les chercheurs d’OpenAI ne prennent pas en considération la particularité du problème de traduction vers du code informatique : le programme généré doit respecter une grammaire avec des contraintes fortes pour pouvoir fonctionner. Notre première ambition a été d’intégrer du savoir a priori dans notre architecture de réseaux de neurones pour assurer que le code traduit respecte toujours les règles grammaticales propres au langage de programmation choisi.

Aussi, les résultats montrés dépassent les attentes comme on peut le voir sur la vidéo ci-dessous, mais très peu d’outil et de méthodes ont été déployés pour analyser précisément leurs forces, leurs faiblesses et les biais présents dans les modèles. Notre seconde ambition est donc de développer une architecture interprétable que l’on puisse analyser dans le détail pour cibler les axes d’améliorations.

Première publication à la suite de la première année de thèse

Nathanaël Beau et son directeur de thèse Benoît Crabbé, professeur à l’Université de Paris Cité, ont publié un premier article à la conférence internationale « Association for Computational Linguistics » que vous pouvez retrouver ici. Cet article vise à étudier une des architectures de l’état de l’art pour cibler les facteurs importants permettant de générer du code Python à partir d’un énoncé en anglais. Nathanaël présentera son travail devant ses pairs du 22 au 27 mai 2022 à Dublin.

 

[1] Source : Dan Hendrycks et al. “Measuring Coding Challenge Competence With APPS”. In: CoRR
abs/2105.09938 (2021). arXiv: 2105.09938. url: https://arxiv.org/abs/2105.09938.

Auteur : Nathanael Beau

Data Scientist -Doctorant CIFRE en NLP