

Découvrez plus de Ruby Biscuit
[HORS SÉRIE #1] La rencontre entre Ruby et l'IA
C’est une nouveauté pour nous, on espère que ca vous plaira !
Hello les petits Biscuits !
Bienvenue sur la 1ère édition hors série de Ruby Biscuit dédiée à l’IA.
Vous êtes maintenant 346 abonnés 🥳
Aujourd’hui je vous laisse entre les mains de Chyrine. 😊
Chyrine est chercheuse en traitement automatique du langage (TAL), sous-domaine de l’intelligence artificielle. Elle a écrit ses premières lignes de codes à 12 ans, puis suite à un master en recherche, elle s’est prise de passion pour le TAL. Cette passion l’a poussée jusqu’en doctorat pour devenir chercheuse. 🎓
Elle s’est gentiment proposée pour vous partager ses connaissances et vulgariser des sujets complexes.
Cette édition spéciale pourrait plaire à d’autres, aidez-nous à la faire connaître en la partageant à vos ami(e)s dévs ! Un petit pas pour l’homme, un grand pas pour Ruby Biscuit ❤️
Temps de lecture : 5 min
Il y a un certain temps déjà que l'Intelligence Artificielle (IA) a transcendé les laboratoires de recherche et les grandes entreprises pour se fondre dans notre quotidien. Elle s'invite dans nos vies, que ce soit par le biais de la reconnaissance faciale sur nos smartphones, les recommandations sur-mesure de Netflix, ou encore les suggestions de mots qui se glissent sous nos doigts lorsque nous pianotons sur nos appareils. L'IA ouvre des portes uniques pour simplifier nos interactions avec la technologie et améliorer l'efficacité de nombreux processus.
Cependant, ce qui se trame dans les coulisses est tout aussi marquant. Les laboratoires de recherche de pointe et de grandes organisations se consacrent aujourd’hui à la conception de la prochaine génération d'IA, avec des visées révolutionnaires dans des domaines aussi variés que la santé, les transports, la finance, entre autres. C'est une ère d'innovation sans précédent, et l'IA ne se contente plus de ces champs, elle a également conquis le monde de la programmation. Dans cet article, bien que l’assistance automatique aux développeurs existe depuis un certain moment sous d’autres formes, nous abordons l’IA moderne et laissons la discussion sur son évolution précédente à des éditions futures.
Pour la communauté Ruby, l'impact de l'IA est particulièrement captivant. Vous avez peut-être déjà testé Copilot ou ChatGPT, des alliés qui vous guident dans l'univers du code et vous aident à minimiser les erreurs, tout en vous offrant l'occasion d'apprendre de nouvelles techniques en chemin. La programmation assistée par l'IA, c'est comme avoir un ami expert en programmation à vos côtés, prêt à vous prodiguer des conseils pour améliorer votre code Ruby. Cet ami astucieux n'est autre qu'une intelligence artificielle spécialement conçue pour faciliter la programmation. Lorsque vous rédigez du code, elle saisit vos intentions et vous suggère des ajouts pertinents. Elle peut vous guider en recommandant les fonctions ou méthodes appropriées pour Ruby on Rails, corriger les erreurs courantes, voire vous fournir des exemples de code à intégrer dans votre projet.
Vous vous rappelez de la manière dont votre smartphone anticipe vos mots et les complète lorsque vous rédigez des messages ? Eh bien, c'est la même technologie qui opère en coulisses ! Le Traitement Automatique du Langage Naturel (TAL), ou NLP (🇬🇧), est un sous-domaine de l'IA qui se consacre à la compréhension et au traitement du texte écrit ainsi qu'au langage naturel humain. C'est cette technologie qui alimente les avancées exceptionnelles que nous observons aujourd'hui dans le monde de l’IA et de la programmation tout particulièrement. Les IA assistantes ont appris à partir d'une multitude d'exemples, et elles vous proposent des suggestions basées sur leur connaissance approfondie, un peu à l'image de votre ami passionné de code qui ne cesse d'apprendre.
De manière concrète, le Traitement Automatique du Langage représente un champ vaste et multidisciplinaire, situé à l'intersection de la linguistique et de l'informatique. Il a connu une évolution considérable au cours du dernier siècle. Aujourd'hui, grâce aux progrès réalisés dans les capacités de calcul et dans l'exploitation de vastes quantités de données, le TAL repose principalement sur des modèles de langage. Parmi les diverses méthodes existantes, la modélisation autoregressive est une approche courante où un modèle prédit le mot suivant en se basant uniquement sur les mots antérieurs de la séquence. Par contraste, la modélisation de langage masquée, une autre méthode populaire, implique de prédire un mot caché dans une séquence en s'appuyant sur le contexte des mots environnants, tant avant qu'après le mot masqué.
La création de ces modèles de langage est un processus exhaustif et méticuleux. Il peut viser une compréhension générale d'une langue, telle que le français, ou se spécialiser dans un jargon professionnel, à l'image du vocabulaire médical. Le matériel d'apprentissage provient souvent d'une vaste collection de textes, y compris ceux accessibles sur Internet - et l'idée d'exploiter l'intégralité du web n'est guère exagérée. Au cours de cette phase, un modèle autoregressif s'entraîne en prédisant chaque mot suivant dans une séquence, en se basant sur tous les mots précédents, alors qu’un modèle se basant sur le masquage apprend en devinant des mots masqués au sein de leur contexte. Ces deux approches exigent l'analyse d'énormes corpus textuels, souvent puisés dans les vastes ressources d'Internet, pour apprendre les subtilités de la langue à modéliser.
Pour illustrer ces différents principes de modélisation du langage, considérons deux exemples. Dans une approche, un modèle comme GPT suivrait une séquence telle que “J'adore les cookies” et prédirait “pépites”, puis “de”, ensuite “chocolat”, en se basant uniquement sur les mots précédents pour générer la suite logique (et oui, il n'y a pas de débat, 🍪 est la suite la plus logique). C'est la modélisation autoregressive, qui prédit le mot suivant de manière séquentielle.
En revanche, avec la modélisation de langage avec masquage, utilisée par des modèles comme BERT, l'approche est différente. Un mot est masqué dans une phrase, par exemple “J’adore les [MASQUE] pépites de chocolat”, et le modèle utilise le contexte avant et après le masque pour prédire le mot caché, dans ce cas, “cookies”. J’adore les [MASQUE] pépites de chocolat. => cookies 🍪
Cet entraînement intensif est répété des milliards de fois, sur des exemples diversifiés, permettant aux modèles de prédire des mots et de générer des textes avec une précision croissante. Une fois cette étape achevée, on peut affiner les modèles pour accomplir des tâches plus spécifiques, comme classifier des e-mails en spam ou non, ou même pour assister les professionnels de santé, comme aider les radiologues à interpréter des rapports cliniques. Ce processus en deux étapes est appelé le paradigme de pré-entraînement et réglage-fin/affinement (🇬🇧 pre-training & fine-tuning) et constitue l'une des bases essentielles du TAL moderne.
Vous pourriez vous demander pourquoi le TAL est particulièrement pertinent dans le domaine de la programmation et en quoi le fait de parler français pourrait avoir un lien avec le développement Ruby. La réponse réside dans l'hypothèse de naturalité du logiciel (🇬🇧 Software Naturalness Hypothesis), qui suggère que les propriétés statistiques du code dans les langages de programmation sont similaires à celles des langues naturelles humaines, rendant les techniques de TAL applicables au code source. Ainsi, tout comme un modèle d'IA peut apprendre le français à partir de textes variés, il peut également se familiariser avec Ruby en analysant des corpus de code issus de projets réels. En entraînant ces modèles sur des bases de code Ruby (potentiellement avec d’autres langages de programmation tels que Python, C++, ..), qui sont souvent disponibles grâce à la communauté open-source, l'IA devient capable de saisir les subtilités et les modèles de conception propres à Ruby. Cela lui permet de fournir des recommandations de code pertinentes et de comprendre les conventions spécifiques de Rails, améliorant ainsi la qualité et la pertinence des suggestions faites aux développeurs.
L'IA assistante à la programmation offre ainsi une multitude d'opportunités aux développeurs Ruby. Elle se divise principalement en deux catégories essentielles : la génération et la compréhension. La génération de code consiste à produire automatiquement ou semi-automatiquement des structures de code Ruby typiques, qu'il s'agisse de méthodes, de classes ou de structures de données. Par exemple, elle pourrait proposer une implémentation de base pour une classe User avec des attributs standards comme name et email, tout en suivant les conventions Ruby et Rails. Elle peut également vous assister dans la création de modèles de données ou de formulaires web, accélérant ainsi le processus de développement et réduisant le temps consacré à la saisie manuelle de code. Quant à la compréhension de code, elle permet à l'IA d'analyser et de comprendre le code existant en détectant les erreurs potentielles, proposer des refactorisations pour améliorer la lisibilité, et en identifiant des similitudes entre différentes parties de code (détection de clones). Par exemple, elle pourrait suggérer de remplacer les itérations complexes par des méthodes Enumerable plus idiomatiques, ou identifier des cas où unless serait plus clair que if négatif.
Cela signifie que l'IA peut aider à maintenir la qualité du code, faciliter le respect des principes de Ruby, et simplifier la maintenance. Les modèles actuels vont encore plus loin en offrant des fonctionnalités de chat, profitant de leur capacité à modéliser à la fois le langage et le code. Vous pouvez ainsi interagir avec l'IA, discuter, expliquer des erreurs et formuler des demandes en langage naturel, tout comme vous le feriez avec un ami développeur.
Cependant, malgré ces avancées et ces perspectives prometteuses, il est essentiel de garder à l'esprit les limites et les risques de l'IA assistante à la programmation Ruby. Il peut être tentant de se laisser emporter par des démonstrations impressionnantes, mais il est important de se rappeler que ces modèles ont encore leurs limites. Par exemple, ils peuvent avoir du mal à saisir le contexte global d'une application Rails complexe. Ils analysent généralement le code ligne par ligne et peuvent manquer une compréhension approfondie de la structure globale du programme ou de la logique métier. Cela peut entraîner une interprétation occasionnelle incorrecte de l'intention du code et des suggestions moins précises.
De plus, les modèles d'IA peuvent ne pas avoir d'expertise dans un domaine spécifique ni une connaissance des bibliothèques propres à une industrie. Ils se basent sur des schémas et des exemples dans leurs données d'entraînement, qui peuvent ne pas couvrir tous les domaines spécialisés. Si vous êtes développeur dans un domaine particulier, cela peut entraîner des suggestions limitées ou moins précises pour certaines zones de niche.
Enfin, les outils de programmation assistée par l'IA peuvent introduire un certain surcoût de performance en raison de la nécessité d'inférer le modèle et de communiquer avec des serveurs externes. Cela peut entraîner une latence accrue ou une consommation de ressources supérieure pendant les sessions de codage, bien que des efforts soient déployés pour optimiser ces aspects.
Il est important de se rappeler que la programmation assistée par l'IA est un outil destiné à compléter et à aider les développeurs Ruby, plutôt qu'à remplacer leur expertise. Bien qu'elle puisse fournir des suggestions précieuses et améliorer l'efficacité de la programmation, les développeurs doivent toujours appliquer leur propre jugement et leurs connaissances pour garantir la qualité et la correction de leur code. Cependant, lorsqu'elle est utilisée de manière judicieuse, l'IA peut réellement transformer la manière dont vous travaillez et vous permettre de réaliser des tâches plus rapidement (certaines études ont montré un gain de 55 % en temps de développement, réduisant le délai nécessaire pour achever des fonctionnalités de 4 jours à 2 jours, par exemple).
On se retrouve dans un mois pour parler des modèles de langage à grande échelle
(🇬🇧 Large Language Models ou LLM) et notamment ceux spécifiques pour le code.
Si vous avez des questions d’ici la, n’hésitez pas à me les poser directement à rubybiscuit@capsens.eu. J’y répondrais avec plaisir dans les prochaines éditions hors série. 😊
— Chyrine