Machine learning

L’intelligence artificielle pour développer moins, plus vite, voire pas du tout

| mise à jour

Même s’il s’agit pour l’heure de recherche et de prospective, de nombreux chercheurs, ainsi que des entreprises comme Airbnb et Tesla, proposent d’exploiter le machine learning pour accélérer, simplifier, voire remplacer un jour les développements applicatifs.

Le monde de la recherche et certaines entreprises s’intéressent de plus en plus à l’optimisation du développement applicatif. De nombreux projets proposent notamment d’exploiter le machine learning pour générer du code informatique voire pour s’en passer.

Produire du code à partir d’un GUI

Dans le domaine du design des interfaces graphiques, Airbnb a ainsi conçu une solution capable de traduire en code source les différents éléments de son système de design à partir d’une simple ébauche sur un whiteboard.

«Nous sommes partis de l’idée que si un algorithme de machine learning peur classer précisément un ensemble complexe de milliers de caractères manuscrits – comme ceux de la calligraphie chinoise – alors nous devrions pouvoir classer les 150 composants design de notre système et d’enseigner à une machine à les reconnaître», explique Benjamin Wilkins, Design Technology Lead chez Airbnb dans un billet de blog. Objectif de l’initiative, simplifier les itérations entre développement et design, et éviter les nombreuses tâches redondantes et autres allers-retours où des experts traduisent en d’autres termes ce qui leur est livré.

Avec la même idée, le projet Pix2code va encore plus loin, puisqu’il utilise n’importe quelle interface utilisateur (GUI) comme input à partir de quoi il génère du code pour divers environnements (iOS, Android, web). A l’origine du projet, Tony Beltramelli, CEO de la société danoise UizardIO, explique atteindre une précision de 77% à partir d’une seule image. Le modèle d’intelligence artificielle qu’il a conçu apprend à associer du code à des captures d’écran dont il analyse les pixels, de manière analogue aux systèmes capables de légender automatiquement des images. Ici aussi, le chercheur met avant les atouts de la solution en termes d’efficacité, de confort et d’ubiquité. Les designers peuvent ainsi croquer leurs idées sur un cahier de notes sans avoir à les refaire sur Photoshop ou Sketch et sans que les développeurs aient ensuite à les traduire en code pour chaque plateforme.

Afin d’améliorer son système pour des environnements de production, Tony Beltramelli travaille actuellement avec un chercheur de l’Université de Berkeley sur un système de réseaux antagonistes génératifs (GAN). L’idée de ces solutions de renforcement, faire travailler deux systèmes intelligents en binôme, l’un cherchant à produire du code à partir de GUI, l’autre cherchant à distinguer les codes originaux produisant le GUI des codes générés artificiellement.

Générer du code à partir d’input/output

La génération automatique de code sera peut-être bientôt possible dans d’autres cas que les interfaces graphiques. En 2017, des chercheurs de Microsoft et de l’Université de Cambridge ont publié leurs travaux sur DeepCoder, un algorithme capable de générer des programmes basiques à partir des inputs/outputs désirés. Pour y parvenir, l’algorithme s’entraîne en analysant des codes existants dans un langage simplifié. A l’avenir, la solution pourrait scanner l'ensemble des programmes hébergés dans GitHub ou StackOverflow et chercher les plus à même de résoudre un problème donné. «Nous ciblons les personnes qui ne savent pas ou ne veulent pas coder, mais qui sont en mesure de décrire leur problème», explique l’un des chercheurs impliqués au site américain Quartz.

L’intelligence artificielle comme substitut au code

Et si, au lieu de générer du code, l’intelligence artificielle le remplaçait tout bonnement? Apprendre à transformer des inputs en outputs à partir de données d’entraînement est en effet la tâche typiquement confiée au machine learning. Pour Andrej Karpathy, Directeur de l’intelligence artificielle chez Tesla, les réseaux neuronaux préfigurent ainsi un changement fondamental dans la manière d’écrire des programmes. Au lieu de rédiger des instructions pour un ordinateur dans un langage de programmation x ou y, le travail des développeurs du futur sera d’entretenir, de nettoyer et d’étiqueter manuellement le jeu de données alimentant un réseau neuronal qui se substituerait au code actuel. Dans ce nouveau paradigme, il suffirait d’étiqueter davantage de données pour corriger des erreurs; un «programme» pourrait être accéléré en réduisant la densité du réseau neuronal, ou au contraire être rendu plus précis en le densifiant, et GitHub hébergerait des jeux de données étiquetées plutôt que du code. Plus agile et plus portables que du code, les réseaux neuronaux auraient néanmoins aussi des désavantages, comme leur opacité et leur dépendance à des données d’entraînement susceptibles d’être biaisées, reconnaît le responsable IA de Tesla. Réagissant à sa publication, d’autres spécialistes questionnent aussi la faisabilité du modèle pour écrire un logiciel professionnel, lorsque les données input/output manquent et qu’une précision à 99% n’est pas suffisante.

Aider les développeurs à profiter des codes existants

Si les projets évoqués précédemment concernent la recherche, l’amélioration de code grâce à l’analyse des repositories les plus populaires est déjà une réalité. C’est même le cœur de la solution de DeepCode, une spin-off de l’EPFZ qui vient de lever 1,1 millions de francs. La solution d’intelligence artificielle de la start-up alémanique s’appuie sur l’analyse de millions de codes en open source (Javascript, Java et Python) afin d’apprendre les meilleures pratiques en corrections de bugs et refactoring.

Sur le même principe, le projet Bayou élaboré à la Rice University utilise l’intelligence artificielle pour aider les développeurs à trouver des API Java correspondant à leurs besoins. La solution analyse les vastes quantités de code sur GitHub pour identifier des schèmes, qu’elle met ensuite en relation avec l’intention du développeur pour lui retourner un code correspondant. «Un développeur peu donner une petite quantité d’informations à Bayou – quelques mots clés ou instructions, vraiment – et Bayou essaiera de lire les pensées du programmeur et de prédire le programme qu’il souhaite», explique Swarat Chaudhuri, co-créateur du système et professeur associé d’informatique à Rice.

Webcode
DPF8_101236