Pour tout codeur, passer l’intégralité de son temps à coder relève de l’utopie. Tout code créé, on le sait bien, doit passer les phases de test nécessaires à sa validation et donc au bon développement de la solution.
Tester ses applications est en effet primordial, tant pour faire évoluer le produit que pour éviter des problèmes de régression. Intégrer les tests unitaires dans la création des applications devrait être un automatisme.
Disclaimer : Faire des tests unitaires ne vous met pas à l’abri d’un bug (on est tous humains et les erreurs ça existe).
Seul point bloquant, les tests unitaires s’avèrent souvent chronophages. Un problème qui n’est pas obligé de rester sans solution. Depuis quelques années, les entreprises tentent d’intégrer de nouvelles technologies dans leur code, on parlait alors de « big code » (notion de big data pour le code) ou bien de « big metadata ».
Une startup s’est lancé le défi d’exploiter le « machine Learning on code », notamment à travers le Natural Language Processing (NLP), où comment intégrer l’Intelligence Artificielle (IA) dans le développement même du code et lui confier le fastidieux travail de test.
Cette startup, c’est Ponicode.
Fondée en 2019 par Patrick Joubert, Ponicode intègre l’Intelligence Artificielle pour tester les différentes fonctions des programmes informatiques en libérant les codeurs de cette tâche. Elle a rejoint la communauté Microsoft AI Factory, à Station F, dont l’un des objectifs est de former des champions européens de l’IA.
Hamza Sayah, Data Scientist chez Ponicode, nous éclaire sur le sujet.
Ponicode exerce un travail intense de veille et de recherche dans le domaine de l’IA et s’attache particulièrement au Natural Language Processing (NLP).
La révolution du NLP a débuté avec la linguistique computationnelle, qui est un ensemble des disciplines fondé sur une modélisation statistique du langage ordinaire approché sous un angle informatique. Le NLP est en réalité un sujet ancien qui existe depuis l’invention des ordinateurs. Il a été longtemps boudé par l’industrie informatique, car la pensée commune était que ce domaine n'évoluerait jamais dans des proportions significatives.
Au cours de ces dernières années, le deep learning et les nouveaux algorithmes de vectorisation des unités de texte (mots, sous-mots, phrases, etc.) - embedding - ont démontré un potentiel inespéré. Des projets significatifs ont fait surface à travers le monde.
L’un des plus connus étant Open AI, dont Elon Musk fait partie. Il s'agit d’une association d’IA qui s’est fixé pour but de produire de la “véritable” IA, c'est-à-dire une intelligence significativement fonctionnelle et indépendante. Les résultats les plus récents produits par Open AI permettent d’imaginer des applications à haute valeur ajoutée dans toutes les industries et bien des aspects de nos vies quotidiennes.
Dans la même veine, Open AI a produit des avancées significatives dans le domaine du “reinforcement learning”, ces agents qui surpassent les humains dans certains jeux (c’est le cas pour les échecs et le go). Plus récemment, Facebook a créé un algorithme capable de battre des joueurs professionnels de poker. Même si le reinforcement learning a considérablement évolué, il n’est pas nouveau non plus et trouve ses racines dans la théorie du contrôle optimal. C’est l'évolution très récente de la puissance des processeurs graphiques (GPU) et des unités de traitement de tenseur (TPU), qui ont rendu une nouvelle vague d’innovation possible.
Aujourd’hui, on applique les réseaux de neurones à ces problématiques de reinforcement learning et cela conduit à des résultats impressionnants qui dépassent les humains sur des tâches de plus en plus complexes.
Enfin, et surtout, le NLP s'est développé dans la recherche et sur le marché grâce aux réseaux de neurones. On est passé d’une évolution de l’IA linéaire et constante à une véritable accélération des découvertes dans ce domaine dernièrement. On pensait que le texte, la sémantique et le sens des mots étaient hors de portée pour l’IA et les ordinateurs. On s’est aperçu que les robots étaient capables de comprendre le langage humain et ses subtilités. On s’approche des IA qui peuvent dire des choses sensées - alors que le sens dans le langage était une caractéristique tout particulière aux êtres humains que nous ne pensions pas possible de partager à une machine.
Ce qui est remarquable c’est qu’il s’agit d’évolutions d’ingénierie et non théoriques. Cela signifie qu’on a une approche fonctionnelle sur le terrain. Il y a donc un travail de théorisation des avancées faites dans les laboratoires d’IA et dans les projets innovants.
On peut même imaginer qu’il y ait des découvertes intéressantes à faire du côté de la théorie de l’IA.
À mon sens, les problématiques éthiques qui commencent à émerger et la théorie de l’IA constituent les futures innovations. La théorie des réseaux de neurones sera l’un des sujets principaux de la décennie. La théorie de l’IA, les maths derrière l’IA vont devenir un véritable sujet.
Nous avons mentionné les innovations majeures étudiées chez Ponicode, mais il y en a d’autres comme le traitement de l’image et le computer vision.
Un point que l’on voit beaucoup dans la recherche et (finalement) peu sur le marché : les graphes, les points reliés entre eux qui créent des réseaux. Les applications peuvent être extrêmement variées, car les réseaux sont présents partout dans notre monde. Par exemple, les réseaux de neurones peuvent être appliqués aux réseaux sociaux. Relier les membres d’un réseau social entre eux pour capter les informations qui relient ses points.
Le réseau de neurones va embedder le réseau et abstraire le sens en utilisant des graphes. Cela peut également s’appliquer au Language Processing (LP), car le texte peut être considéré comme un graphe avec des mots qui sont reliés par une grammaire.
Capter les relations entre les mots, c’est quelque chose que l’on voit dans le milieu académique, mais pas encore sur le marché, car c’est très lourd en termes computationnels et peu performant.
La bonne nouvelle c’est que notre industrie est une des rares où le fossé entre recherche et marché est extrêmement restreint. Les innovations issues de la recherche arrivent en très peu de temps. Le travail académique peut rapidement trouver un écho sur un marché avide d’innovation. Des entreprises basées sur GPT-3 par exemple se sont créées seulement quelques jours après sa diffusion publique.
La vitesse d’absorption du marché est phénoménale, cela est prometteur afin de créer un cercle vertueux entre expérimentation et mise en pratique.
Après nos recherches sur le NLP, nous nous sommes demandé comment l’appliquer au code.
Les recherches concernant le NLP portent davantage sur la sémantique que sur la grammaire, car le langage naturel ne nécessite pas une grammaire irréprochable. Un humain peut comprendre une phrase grammaticalement fausse, car le cerveau est plus flexible que l’ordinateur par rapport à la syntaxe du langage.
Un ordinateur lui, ne pourra être capable de comprendre qu’un langage très strict, il ne compile pas lorsqu’il manque un point ou une virgule.
Un aspect sémantique naturel existe pour que les développeurs puissent communiquer entre eux et l’aspect grammatical (rigoureux) est là pour que les développeurs puissent communiquer avec l’ordinateur.
Chez Ponicode, nous travaillons à appliquer les innovations d'intelligence artificielle appliquées au langage afin d'améliorer l’interaction entre un développeur et sa machine. C’est la complexité additionnelle à notre challenge technique. Il y a bien sûr d’autres problématiques au challenge technique de l’IA appliqué au code, mais celles-ci font partie de notre recette secrète.
Les innovations dans le domaine du NLP sont très récentes et les entreprises qui l’utilisent aussi. Avant le “machine learning on code”, il y avait la notion de “big code” (big data for code) ou “big metadata”, un concept né durant les années 2010 autour de la mouvance open source.
Grâce à l’open source, le monde s’est retrouvé avec une immense source de code disponible en ligne et peu exploitée statistiquement. Avec le NLP on a pu palier à ça. Cela a créé un nouveau champ des possibles.
Depuis l'arrivée (récente) de cette source de code, la recherche dans le domaine du NLP s’est détournée de la linguistique computationnelle classique, pour se concentrer sur les innovations liées aux réseaux de neurones (applique au code).
Je pense que la dimension éthique de l’intelligence artificielle va prendre une place grandissante. Il ne s’agit pas ici d’avoir un débat ou d'écrire une charte, mais bien de formuler mathématiquement ce qu’est une intelligence artificielle éthique.
Dans les 5 prochaines années, le domaine de l’intelligence artificielle devrait voir apparaître des innovations fondamentales.
En termes de performance, nous n’irons pas jusqu'à dire qu’il existera une IA pour résoudre le test de Turing, mais sûrement quelque chose qui s’en rapproche.
Par exemple, GPT3 a d’immenses défauts, mais voit une évolution exponentielle par rapport a GPT-2. Il existe désormais des IA qui font abstraction de la sémantique du et qui réagissent avec le texte, le modifient, le prédisent. “Les applications de GPT3 pourraient changer le monde” nous confie Hamza.
Enfin, le domaine du "reinforcement learning" devrait révolutionner les systèmes de recommandations.
Chez Ponicode, la protection des données personnelles ne constitue pas un ralentissement dans l'évolution de l’IA.
Il y a un point de vigilance sur le fait que cela devient un sujet politique. Je suis convaincu que les mathématiciens, les statisticiens, les personnes compétentes doivent être impliqués dans ces discussions éthiques et dans la construction de la législation qui encadre l’IA.
Dire que l’IA évolue à un rythme différent à cause de la pensée éthique est déjà une évolution en soi. Les dangers des algorithmes dans la vie quotidienne sont réels. Ce sont des dangers inhérents au pouvoir de nuisance des suggestions, de l’influence, des algorithmes qui exploitent les faiblesses du cerveau humain.
C’est ce que fait YouTube par exemple, au lieu de passer seulement quelques minutes sur la plateforme, l’utilisateur se retrouve à y passer des heures grâce aux recommandations qui le poussent à rester. Le contenu qui est suggéré présente aussi le risque de polariser la société.
On n’imagine pas à quel point les algorithmes peuvent effectuer ce travail de polarisation, d’influence dans bien des aspects de la société, c’est pourquoi tous les acteurs de la chaîne ont un devoir de vigilance et de lanceur d’alerte.
Les algorithmes d’intelligence artificielle ont des fonctions objectives et elles essayent de les optimiser.
Nous avons le devoir de questionner comment ces fonctions peuvent mener à des impasses éthiques ou des choses éthiquement inacceptables.
Après une extension Visual Studio code pour github, permettant d’assister dans la création de tests unitaires, Ponicode se tourne vers l’évolution de leurs produits et le lancement de nouveaux challenges techniques.
Notre premier produit était un assistant du développeur. Le développeur pouvait soutenir son travail, mais gardait toujours la main. Aujourd’hui Ponicode entre dans une nouvelle ère puisque nous créons des outils qui automatisent.
Cela signifie que le partenaire principal de leurs outils - le développeur - n’est plus le chef d’orchestre dans leur utilisation. La principale difficulté est donc de ne plus avoir de feedbacks développeurs en live, comme c'était le cas avec leur assistant.
En intégrant l’automatisation, c’est une information cruciale perdue pour la startup et le développement du produit. Avec l’assistant, même quand on fournit une solution imparfaite à un développeur, il la retouche et cela lui fait tout de même gagner du temps. En intégration continue et déploiement continu (CI/CD), il y a une exigence de qualité plus élevée ce qui représente un gros challenge.
Le défi est donc de ne pas trop en faire quand on automatise ; le développeur n’a plus à dire quand il souhaite solliciter Ponicode et dans quelle mesure. C’est à l’entreprise de paramétrer des filtres sur le nombre de tests unitaires à générer.
Cela peut paraître très théorique, mais cela pose de véritables difficultés techniques.
L’autre challenge chez Ponicode, c’est la solution Dogstring (exclusive au langage Python) qui est pour le moment en bêta publique. Elle leur a permis d’explorer la sémantique du code et plus particulièrement comment transformer du code très structuré destiné à des ordinateurs en code plus léger qui peut être compris par des humains. Un humain n’a pas besoin de tout ce qui est ingéré par un ordinateur pour comprendre le code, car l’humain n’a pas besoin de tout comprendre.
Finalement, ce que fait Ponicode avec Dogstring, c’est épurer la fonction de toute sa lourdeur syntaxique pour en faire une phrase courte en langage naturel.