Programmation en binôme pilotée par la génération de langage de programmation

Rejoignez les dirigeants du 26 au 28 juillet pour la semaine AI & Edge de Transform. Écoutez les meilleurs dirigeants discuter de sujets liés à la technologie AL/ML, à l’IA conversationnelle, à l’IVA, à la PNL, à Edge, etc. Réservez votre pass gratuit dès maintenant !


Alors que l’intelligence artificielle élargit son horizon et innove, elle défie l’imagination des gens en ouvrant de nouvelles frontières. Alors que de nouveaux algorithmes ou modèles aident à résoudre un nombre et des types croissants de problèmes commerciaux, les progrès du traitement du langage naturel (TAL) et des modèles de langage incitent les programmeurs à réfléchir à la façon de révolutionner le monde de la programmation.

Avec l’évolution de plusieurs langages de programmation, le travail d’un programmeur est devenu de plus en plus complexe. Alors qu’un bon programmeur peut être capable de définir un bon algorithme, le convertir en un langage de programmation pertinent nécessite une connaissance de sa syntaxe et des bibliothèques disponibles, ce qui limite la capacité d’un programmeur dans divers langages.

Les programmeurs se sont traditionnellement appuyés sur leurs connaissances, leur expérience et leurs référentiels pour créer ces composants de code dans tous les langages. IntelliSense les a aidés avec des invites syntaxiques appropriées. Advanced IntelliSense est allé encore plus loin avec la saisie semi-automatique des instructions en fonction de la syntaxe. Google (code) search/GitHub code search a même répertorié des extraits de code similaires, mais la charge de tracer les bons morceaux de code ou de scripter le code à partir de zéro, de les composer ensemble, puis de les contextualiser en fonction d’un besoin spécifique repose sur les épaules des programmeurs .

Programmation des machines

Nous assistons maintenant à l’évolution des systèmes intelligents qui peuvent comprendre l’objectif d’une tâche atomique, appréhender le contexte et générer le code approprié dans le langage requis. Cette génération de code contextuel et pertinent ne peut se produire que lorsqu’il existe une bonne compréhension des langages de programmation et du langage naturel. Les algorithmes peuvent désormais comprendre ces nuances d’une langue à l’autre, ouvrant un éventail de possibilités :

  • Conversion de code: comprendre le code d’une langue et générer un code équivalent dans une autre langue.
  • Documentation sur les codes: générer la représentation textuelle d’un morceau de code donné.
  • Génération de codes: générer un code approprié basé sur une entrée textuelle.
  • Validation des codes: valider l’alignement du code sur la spécification donnée.

Conversion de code

L’évolution de la conversion de code est mieux comprise lorsque l’on regarde Google Translate, que nous utilisons assez fréquemment pour les traductions en langage naturel. Google Translate a appris les nuances de la traduction à partir d’un vaste corpus d’ensembles de données parallèles – les déclarations en langue source et leurs déclarations équivalentes en langue cible – contrairement aux systèmes traditionnels, qui reposaient sur des règles de traduction entre les langues source et cible.

Puisqu’il est plus facile de collecter des données que d’écrire des règles, Google Translate s’est adapté pour traduire entre plus de 100 langues naturelles. La traduction automatique neuronale (NMT), un type de modèle d’apprentissage automatique, a activé Google Translate apprendre à partir d’un énorme ensemble de données de paires de traduction. L’efficacité de Google Translate a inspiré la première génération de traducteurs de langage de programmation basés sur l’apprentissage automatique à adopter NMT. Mais le succès des traducteurs de langages de programmation basés sur NMT a été limité en raison de l’indisponibilité d’ensembles de données parallèles à grande échelle (apprentissage supervisé) dans les langages de programmation.

Cela a donné naissance à des modèles de traduction automatique non supervisée qui exploitent la base de code monolingue à grande échelle disponible dans le domaine public. Ces modèles apprennent du code monolingue du langage de programmation source, puis du code monolingue du langage de programmation cible, puis sont équipés pour traduire le code de la source vers la cible. Le TransCoder de Facebook, construit sur cette approche, est un modèle de traduction automatique non supervisé qui a été formé sur plusieurs bases de code monolingues à partir de projets GitHub open source et peut traduire efficacement des fonctions entre C++, Java et Python.

Génération de codes

La génération de code évolue actuellement sous différents avatars – en tant que générateur de code simple ou en tant que programmeur en binôme complétant automatiquement le code d’un développeur.

La technique clé utilisée dans les modèles NLP est l’apprentissage par transfert, qui consiste à pré-entraîner les modèles sur de grands volumes de données, puis à les affiner en fonction d’ensembles de données limités ciblés. Celles-ci reposent en grande partie sur des réseaux de neurones récurrents. Récemment, les modèles basés sur l’architecture Transformer se sont avérés plus efficaces car ils se prêtent à la parallélisation, accélérant le calcul. Les modèles ainsi affinés pour la génération de langage de programmation peuvent alors être valides pour diverses tâches de codage, y compris la génération de code et la génération de scripts de test unitaire pour la validation de code.

Nous pouvons également inverser cette approche en appliquant les mêmes algorithmes pour comprendre le code afin de générer une documentation pertinente. Les systèmes de documentation traditionnels se concentrent sur la traduction du code hérité en anglais, ligne par ligne, nous donnant un pseudo-code. Mais cette nouvelle approche peut aider à résumer les modules de code dans une documentation de code complète.

Les modèles de génération de langage de programmation disponibles aujourd’hui sont CodeBERT, CuBERT, GraphCodeBERT, CodeT5, PLBART, CodeGPT, CodeParrot, GPT-Neo, GPT-J, GPT-NeoX, Codex, etc.

AlphaCode de DeepMind va encore plus loin en générant plusieurs échantillons de code pour les descriptions données tout en garantissant la validation des conditions de test données.

Programmation en binôme

La saisie semi-automatique du code suit la même approche que Gmail Smart Compose. Autant ont connu, Smart Compose invite l’utilisateur avec des suggestions contextuelles en temps réel, aidant à la composition plus rapide des e-mails. Ceci est essentiellement alimenté par un modèle de langage neuronal qui a été formé sur un volume important d’e-mails du domaine Gmail.

En étendant la même chose au domaine de la programmation, un modèle capable de prédire le prochain ensemble de lignes dans un programme basé sur les dernières lignes de code est un programmeur en binôme idéal. Cela accélère considérablement le cycle de vie du développement, améliore la productivité du développeur et garantit une meilleure qualité de code.

TabNine prédit les blocs de code suivants dans un large éventail de langages tels que JavaScript, Python, Typescript, PHP, Java, C++, Rust, Go, Bash, etc. Il a également des intégrations avec une large gamme d’IDE.

CoPilot peut non seulement compléter automatiquement des blocs de code, mais peut également éditer ou insérer du contenu dans du code existant, ce qui en fait un programmeur en binôme très puissant avec des capacités de refactoring. CoPilot est alimenté par Codex, qui a formé des milliards de paramètres avec un volume de code en vrac provenant de référentiels publics, y compris Github.

Un point clé à noter est que nous sommes probablement dans une phase transitoire avec une programmation en binôme fonctionnant essentiellement dans l’approche human-in-the-loop, ce qui en soi est une étape importante. Mais la destination finale est sans aucun doute la génération de code autonome. L’évolution des modèles d’IA qui évoquent la confiance et la responsabilité définira cependant ce voyage.

Défis

La génération de code pour des scénarios complexes qui exigent plus de résolution de problèmes et de raisonnement logique reste un défi, car cela peut justifier la génération de code jamais rencontré auparavant.

La compréhension du contexte actuel pour générer le code approprié est limitée par la taille de la fenêtre de contexte du modèle. L’ensemble actuel de modèles de langage de programmation prend en charge une taille de contexte de 2 048 jetons ; Le Codex prend en charge 4 096 jetons. Les échantillons dans les modèles d’apprentissage à quelques coups consomment une partie de ces jetons et seuls les jetons restants sont disponibles pour l’entrée du développeur et la sortie générée par le modèle, tandis que les modèles d’apprentissage à coup zéro/affinés réservent toute la fenêtre de contexte pour l’entrée et la sortie. .

La plupart des modèles de langage exigent un calcul élevé car ils sont construits sur des milliards de paramètres. Leur adoption dans différents contextes d’entreprise pourrait entraîner une augmentation de la demande sur les budgets de calcul. Actuellement, on se concentre beaucoup sur l’optimisation de ces modèles pour permettre une adoption plus facile.

Pour que ces modèles de génération de code fonctionnent en mode de programmation par paires, le temps d’inférence de ces modèles doit être plus court afin que leurs prédictions soient rendues aux développeurs dans leur IDE en moins de 0,1 seconde pour en faire une expérience transparente.

Kamalkumar Rathinasamy dirige le groupe de programmation machine basée sur l’apprentissage automatique chez Infosys, en se concentrant sur la création de modèles d’apprentissage automatique pour augmenter les tâches de codage.

Vamsi Krishna Oruganti est un passionné d’automatisation et dirige le déploiement de solutions d’IA et d’automatisation pour les clients des services financiers chez Infosys.

DataDecisionMakers

Bienvenue dans la communauté VentureBeat !

DataDecisionMakers est l’endroit où les experts, y compris les techniciens travaillant sur les données, peuvent partager des informations et des innovations liées aux données.

Si vous souhaitez en savoir plus sur les idées de pointe et les informations à jour, les meilleures pratiques et l’avenir des données et de la technologie des données, rejoignez-nous sur DataDecisionMakers.

Vous pourriez même envisager de rédiger votre propre article !

En savoir plus sur DataDecisionMakers

Leave a Comment