Grands modèles de langage et montée en puissance des générateurs de code IA
Par Martin Heller
Éditeur collaborateur, InfoWorld |
Lorsque j'ai écrit sur GitHub Copilot en novembre 2021, Copilot était l'une des rares technologies de génération de code IA disponibles. Je l'ai testé en tant qu'extension Visual Studio Code. À l'époque, Copilot ne générait pas toujours un bon code, correct ou même en cours d'exécution, mais il était quand même quelque peu utile. La grande promesse derrière Copilot (et d'autres générateurs de code qui utilisent l'apprentissage automatique) est qu'il a été conçu pour s'améliorer au fil du temps, à la fois en incorporant les commentaires des utilisateurs et en ingérant de nouveaux échantillons de code dans son corpus de formation.
Depuis mai 2023, il existe des centaines d'extensions "IA" ou "génération de code" disponibles pour Visual Studio Code seul. Plusieurs d'entre eux pourraient vous faire gagner du temps lors du codage, mais si vous croyez leur code généré sans l'examiner, le tester et le déboguer, j'ai un pont à vous vendre.
Des centaines d'extensions Visual Studio Code sur le marché promettent une "génération de code" ou "IA", mais seule une fraction d'entre elles génèrent réellement du code basé sur l'apprentissage automatique.
Un développement prometteur dans ce domaine est que plusieurs outils ont une génération automatique de tests unitaires. La génération de tests unitaires est un problème beaucoup plus traitable que la génération de code à usage général - en fait, cela peut être fait à l'aide de modèles simples - mais vous devrez toujours examiner et exécuter les tests générés pour voir s'ils ont un sens.
Dans le reste de cet article, je proposerai un bref historique des modèles de langage, avant d'examiner les grands modèles de langage (LLM) à la pointe de la technologie, tels que la famille GPT d'OpenAI et LaMDA et PaLM de Google, utilisés pour la génération de texte. et la génération de code aujourd'hui. Nous terminerons par une présentation rapide de 10 outils de génération de code, dont Amazon CodeWhisperer, Google Bard et GitHub Copilot X.
Les modèles de langage remontent à Andrey Markov en 1913. Ce domaine d'étude s'appelle maintenant les chaînes de Markov, un cas particulier des modèles de Markov. Markov a montré qu'en russe, en particulier dans Eugène Onéguine de Pouchkine, la probabilité d'apparition d'une lettre dépend de la lettre précédente, et qu'en général, consonnes et voyelles ont tendance à s'alterner. Les méthodes de Markov ont depuis été généralisées aux mots, à d'autres langues et à d'autres applications linguistiques.
Le travail de Markov a été étendu par Claude Shannon en 1948 pour la théorie des communications, et à nouveau par Fred Jelinek et Robert Mercer d'IBM en 1985 pour produire un modèle de langage basé sur la validation croisée (qu'ils appelaient des estimations supprimées), et appliqué au temps réel, reconnaissance vocale à grand vocabulaire. Essentiellement, un modèle de langage statistique attribue des probabilités à des séquences de mots.
Pour voir rapidement un modèle linguistique en action, saisissez quelques mots dans la recherche Google ou une application de messagerie texte sur votre smartphone, et autorisez-le à proposer des options de saisie semi-automatique.
En 2000, Yoshua Bengio et al. a publié un article sur un modèle de langage probabiliste neuronal dans lequel les réseaux de neurones remplacent les probabilités dans un modèle de langage statistique, contournant la malédiction de la dimensionnalité et améliorant les prédictions de mots (basées sur les mots précédents) par rapport à un modèle de trigramme lissé (alors l'état de l'art ) de 20% à 35%. L'idée de modèles de langage de réseau de neurones autorégressifs et autorégressifs est encore utilisée aujourd'hui, bien que les modèles aient maintenant des milliards de paramètres et soient entraînés sur de vastes corpus, d'où le terme «grands modèles de langage».
Comme nous le verrons, les modèles de langage ont continué à s'agrandir au fil du temps pour les rendre plus performants. Il y a cependant des coûts à cela. L'article de 2021 Sur les dangers des perroquets stochastiques : les modèles de langage peuvent-ils être trop grands ? de Emily Bender, Timnit Gebru, et al. se demande si nous n'allons pas trop loin avec cette tendance. Les auteurs suggèrent, entre autres, que nous devrions d'abord peser les coûts environnementaux et financiers, et investir des ressources dans la conservation et la documentation minutieuse des ensembles de données plutôt que de tout ingérer sur le Web.
L'explosion récente de grands modèles de langage a été déclenchée par l'article de 2017 Attention is All You Need, par Ashish Vaswani et al. de Google Brain et Google Research. Cet article a introduit "une nouvelle architecture de réseau simple, le transformateur, basée uniquement sur des mécanismes d'attention, se passant entièrement de récurrence et de convolutions". Les modèles de transformateurs sont à la fois plus simples et supérieurs aux modèles récurrents et convolutifs. Ils ont également besoin de beaucoup moins de temps pour s'entraîner.
ELMo est une représentation de mots contextualisée en profondeur de 2018 d'AllenNLP (voir l'article ELMo) qui modélise à la fois les caractéristiques complexes de l'utilisation des mots (par exemple, la syntaxe et la sémantique) et la façon dont ces utilisations varient selon les contextes linguistiques (c'est-à-dire pour modéliser la polysémie). Le modèle original a 93,6 millions de paramètres et a été formé sur le One Billion Word Benchmark.
BERT est un modèle de langage 2018 de Google AI Language basé sur l'architecture de réseau neuronal Transformer (2017) de l'entreprise (voir l'article BERT). BERT est conçu pour pré-entraîner des représentations bidirectionnelles profondes à partir de texte non étiqueté en conditionnant conjointement le contexte gauche et droit dans toutes les couches. Les deux tailles de modèle utilisées dans l'article original étaient de 100 millions et 340 millions de paramètres au total. BERT utilise la modélisation de langage masqué (MLM) dans laquelle ~ 15% des jetons sont "corrompus" pour la formation. Il a été formé sur Wikipedia anglais et le Toronto Book Corpus.
Le modèle 2020 Text-To-Text Transfer Transformer (T5) de Google (voir l'article T5) synthétise un nouveau modèle basé sur les meilleures techniques d'apprentissage par transfert de GPT, ULMFiT, ELMo et BERT et leurs successeurs, en utilisant un nouveau open-source , ensemble de données de pré-formation appelé Colossal Clean Crawled Corpus (C4). Le C4 standard pour l'anglais est un ensemble de données de 800 Go basé sur l'ensemble de données Common Crawl. T5 recadre toutes les tâches de traitement du langage naturel dans un format texte à texte unifié où l'entrée et la sortie sont toujours des chaînes de texte, contrairement aux modèles de style BERT qui ne produisent qu'une étiquette de classe ou une étendue de l'entrée. Le modèle de base T5 compte environ 220 millions de paramètres au total.
OpenAI, une société de recherche et de déploiement d'IA, a pour mission "de veiller à ce que l'intelligence générale artificielle (IAG) profite à toute l'humanité". Bien sûr, OpenAI n'a pas encore atteint l'AGI. Et certains chercheurs en IA, comme le pionnier de l'apprentissage automatique Yann LeCun de Meta-FAIR, pensent que l'approche actuelle d'OpenAI en matière d'AGI est une impasse.
OpenAI est responsable de la famille GPT de modèles de langage, qui sont disponibles via l'API OpenAI et le service Azure OpenAI de Microsoft. Notez que toute la famille GPT est basée sur l'architecture de réseau neuronal Transformer 2017 de Google, qui est légitime car Google Transformer est open source.
GPT (Generative Pretrained Transformer) est un modèle 2018 d'OpenAI qui utilise environ 117 millions de paramètres (voir l'article GPT). GPT est un transformateur unidirectionnel qui a été pré-formé sur le Toronto Book Corpus et a été formé avec un objectif de modélisation causale du langage (CLM), ce qui signifie qu'il a été formé pour prédire le jeton suivant dans une séquence.
GPT-2 est une mise à l'échelle directe de GPT en 2019 avec 1,5 milliard de paramètres, formés sur un ensemble de données de huit millions de pages Web, ou ~ 40 Go de données textuelles. OpenAI restreignait à l'origine l'accès à GPT-2 car il était "trop bon" et conduirait à de "fausses nouvelles". La société a finalement cédé, bien que les problèmes sociaux potentiels se soient encore aggravés avec la sortie de GPT-3.
GPT-3 est un modèle de langage autorégressif de 2020 avec 175 milliards de paramètres, formé sur une combinaison d'une version filtrée de Common Crawl, WebText2, Books1, Books2 et English Wikipedia (voir l'article GPT-3). Le réseau neuronal utilisé dans GPT-3 est similaire à celui de GPT-2, avec quelques blocs supplémentaires.
Le plus gros inconvénient du GPT-3 est qu'il a tendance à "halluciner", c'est-à-dire à inventer des faits sans fondement discernable. GPT-3.5 et GPT-4 ont le même problème, quoique dans une moindre mesure.
CODEX est un descendant 2021 de GPT-3 qui a été affiné pour la génération de code sur 54 millions de dépôts GitHub open source. C'est le modèle utilisé dans GitHub Copilot, dont je parle dans la section suivante.
GPT-3.5 est un ensemble de mises à jour 2022 de GPT-3 et CODEX. Le modèle gpt-3.5-turbo est optimisé pour le chat mais fonctionne également bien pour les tâches d'achèvement traditionnelles.
GPT-4 est un grand modèle multimodal de 2023 (acceptant des entrées d'image et de texte, émettant des sorties de texte) qui, selon OpenAI, présente des performances de niveau humain sur diverses références professionnelles et académiques. GPT-4 a surpassé GPT-3.5 dans un certain nombre d'examens simulés, y compris l'examen uniforme du barreau, le LSAT, le GRE et plusieurs examens de sujet AP.
Il est très préoccupant qu'OpenAI n'ait pas expliqué comment GPT-4 a été formé ; la société affirme que c'est pour des raisons de concurrence, ce qui est logique compte tenu de la concurrence entre Microsoft (qui a financé OpenAI) et Google. Néanmoins, ne pas connaître les biais du corpus d'apprentissage signifie que nous ne connaissons pas les biais du modèle. Le point de vue d'Emily Bender sur GPT-4 (publié sur Mastodon le 16 mars 2023) est que "GPT-4 devrait être considéré comme une poubelle toxique jusqu'à ce que et à moins que #OpenAI ne soit * ouvert * sur ses données de formation, son architecture de modèle, etc."
ChatGPT et BingGPT sont des chatbots qui étaient à l'origine basés sur gpt-3.5-turbo et mis à niveau en mars 2023 pour utiliser GPT-4. Actuellement, pour accéder à la version de ChatGPT basée sur GPT-4, vous devez vous abonner à ChatGPT Plus. Le ChatGPT standard, basé sur GPT-3.5, a été formé sur des données coupées en septembre 2021. BingGPT, auquel vous pouvez accéder dans le navigateur Microsoft Edge, a également été formé sur des données coupées en 2021, mais dit (quand vous demandez it) que "j'apprends constamment et je mets à jour mes connaissances avec de nouvelles informations sur le Web".
BingGPT expliquant son modèle de langage et ses données d'entraînement, à droite de l'image. Capture d'écran prise le 16 mars 2023.
Début mars 2023, Pascale Fung du Center for Artificial Intelligence Research de l'Université des sciences et technologies de Hong Kong a donné une conférence sur l'évaluation de ChatGPT. Cela vaut bien la peine de passer une heure à le regarder.
LaMDA (Language Model for Dialogue Applications), la technologie de conversation "révolutionnaire" de Google en 2021, est un modèle Transformer de 2017 formé au dialogue et affiné pour améliorer considérablement la sensibilité et la spécificité de ses réponses. L'une des forces de LaMDA est qu'il peut gérer la dérive de sujet qui est courante dans les conversations humaines.
Une version de LaMDA alimente Bard, le service d'IA conversationnelle de Google. Bard est sorti le 21 mars 2023 et mis à la disposition générale le 10 mai 2023. Je discute de ses capacités de génération de code ci-dessous.
PaLM (Pathways Language Model) est un modèle Transformer dense de décodeur uniquement de Google Research avec 540 milliards de paramètres, formé avec le système Pathways (voir l'article PaLM). PaLM a été formé à l'aide d'une combinaison d'ensembles de données en anglais et multilingues comprenant des documents Web de haute qualité, des livres, Wikipedia, des conversations et du code GitHub.
Google a également créé un vocabulaire "sans perte" pour PaLM qui préserve tous les espaces (particulièrement importants pour le code), divise les caractères Unicode hors vocabulaire en octets et divise les nombres en jetons individuels, un pour chaque chiffre. PaLM-Coder est une version de PaLM 540B affiné sur un ensemble de données de code Python uniquement.
PaLM-E est un modèle de langage multimodal "incarné" (pour la robotique) de 2023 de Google. Les chercheurs ont commencé avec PaLM, un grand modèle de langage puissant, et l'ont incarné (le "E" dans PaLM-E) en le complétant avec des données de capteur de l'agent robotique. PaLM-E est également un modèle de vision et de langage généralement capable. En plus de PaLM, il intègre le modèle de vision ViT-22B.
LLaMA (Large Language Model Meta AI) est un grand modèle de langage "brut" de 65 milliards de paramètres publié par Meta AI (alias Meta-FAIR) en février 2023. Selon Meta, "La formation de modèles de base plus petits comme LLaMA est souhaitable dans le grand langage car il nécessite beaucoup moins de puissance de calcul et de ressources pour tester de nouvelles approches, valider le travail des autres et explorer de nouveaux cas d'utilisation. Tâches."
LLaMA a été publié en plusieurs tailles, ainsi qu'une carte modèle qui détaille la façon dont le modèle a été construit. À l'origine, vous deviez demander les points de contrôle et le tokenizer, mais ils sont maintenant dans la nature, car un torrent téléchargeable a été publié sur 4chan par quelqu'un qui a correctement obtenu les modèles en déposant une demande, selon Yann LeCun de Meta-FAIR.
Bien que plusieurs grands modèles de langage, dont ChatGPT et Bard, puissent être utilisés pour la génération de code tels qu'ils sont publiés, il est utile qu'ils soient affinés sur certains codes, généralement à partir de logiciels open source gratuits, pour éviter une violation manifeste du droit d'auteur. Cela soulève toujours le spectre du "piratage de logiciels open source", qui est la revendication d'un recours collectif fédéral de 2022 contre GitHub, Microsoft (propriétaire de GitHub) et OpenAI concernant le produit GitHub Copilot et le modèle OpenAI GPT Codex.
Notez qu'en plus d'utiliser des modèles d'IA formés en grande partie sur du code accessible au public, certains outils de génération de code s'appuient sur la recherche de sites de partage de code tels que Stack Overflow.
Amazon CodeWhisperer s'intègre à Visual Studio Code et aux IDE JetBrains, génère des suggestions de code en réponse aux commentaires et aux complétions de code basées sur le code existant, et peut analyser le code pour les problèmes de sécurité. Vous pouvez également activer CodeWhisperer pour une utilisation dans AWS Cloud9 et AWS Lambda.
CodeWhisperer prend bien en charge les langages de programmation Python, Java, JavaScript, TypeScript et C#, et 10 autres langages de programmation dans une moindre mesure. Il est disponible gratuitement pour les développeurs individuels et coûte 19 $ par utilisateur et par mois pour les équipes professionnelles.
CodeWhisperer m'a aidé à écrire le code Python ci-dessous. Je l'ai examiné, testé et débogué, et tout va bien.
Génération de code avec Amazon CodeWhisperer. J'ai tapé le commentaire en haut du fichier, et la plupart du reste était CodeWhisperer. J'ai dû choisir mon code parmi plusieurs options et supprimer une instruction d'importation inutilisée d'une option précédente.
La prise en charge de la programmation par Bard a été annoncée le 21 avril 2023. L'annonce note la prise en charge de plus de 20 langages de programmation, dont C++, Go, Java, JavaScript, TypeScript et Python. En guise de test rapide, j'ai demandé à Bard "d'écrire une fonction Go pour renvoyer la date et l'heure actuelles". C'est fait si vite :
Bard a généré une fonction de langage Go correcte, un exemple d'utilisation de la fonction et une explication de la fonction, le tout à partir de l'invite "écrivez une fonction go pour renvoyer la date et l'heure actuelles". Notez les icônes pour copier la fonction et le code de test.
Non seulement Bard a écrit la fonction, mais il a également expliqué la fonction et généré un exemple d'appel de la fonction.