# Que révèle l’article d’OpenAI sur Codex au sujet de l’IA qui écrit du code?

Date: 2021-07-08 · Author: Robert Scales · https://guidetoartificialintelligence.com/fr/apprendre/article-codex-humaneval-openai/

**Answer:** Le 7 juillet 2021, OpenAI a publié « Evaluating Large Language Models Trained on Code », qui décrit Codex, un modèle GPT ajusté finement sur du code public de GitHub, et présente HumanEval, un ensemble de 164 problèmes de programmation écrits à la main et vérifiés en exécutant des tests. Son plus grand modèle Codex résout 28,8 % des problèmes du premier coup, contre 0 % pour GPT-3, et l’article expose les limites et les risques du modèle avec un rare souci du détail.

Hier, 7 juillet 2021, une équipe de plus de cinquante chercheurs d’OpenAI, dirigée par Mark Chen, a mis en ligne sur arXiv un article intitulé « Evaluating Large Language Models Trained on Code ». C’est la première description publique détaillée de **Codex**, la famille de modèles derrière GitHub Copilot, l’assistant de programmation que GitHub et OpenAI ont présenté en aperçu à la fin du mois dernier.

L’article fait trois choses. Il explique comment Codex a été entraîné. Il présente un nouveau test, **HumanEval**, qui vérifie si les programmes écrits par l’IA fonctionnent vraiment. Et il consacre de nombreuses pages à ce qui peut mal tourner, des suggestions boguées au code biaisé.

## Ce qu’est Codex et comment il a été entraîné

Codex part d’un modèle de langage GPT, le même genre de modèle que GPT-3, entraîné à prédire le mot suivant d’un texte. OpenAI l’a ensuite soumis à un **ajustement fin** (*fine-tuning*), c’est-à-dire qu’il a poursuivi l’entraînement sur un corpus plus étroit, ici du code.

OpenAI a recueilli les données d’entraînement dans 54 millions de dépôts publics de GitHub en mai 2020. OpenAI a gardé les fichiers Python uniques de moins de 1 Mo, ce qui représentait 179 Go, puis a écarté les fichiers qui semblaient générés automatiquement ou qui avaient des lignes inhabituellement longues. Le jeu de données final comptait 159 Go de Python. La taille des modèles va jusqu’à 12 milliards de **paramètres**, les nombres internes ajustés pendant l’entraînement.

L’article décrit des versions de recherche préliminaires. OpenAI précise que les modèles qui alimentent Copilot sont des descendants distincts de ces travaux, conçus pour la production.

## Comment HumanEval teste le code

La plupart des façons d’évaluer un texte écrit par l’IA le comparent mot à mot à une réponse de référence. Cela ne fonctionne pas pour le code : deux programmes peuvent sembler très différents et être tous deux corrects, ou sembler presque identiques alors que l’un ne fonctionne pas. La réponse d’OpenAI est de juger la **justesse fonctionnelle** : exécuter le code et voir s’il réussit des **tests unitaires**, de petites vérifications automatiques qui s’assurent qu’une fonction donne la bonne sortie pour des entrées données.

HumanEval compte 164 problèmes écrits à la main pour cet article, qui portent sur la compréhension du langage, des algorithmes simples et des mathématiques de base, certains au niveau de questions faciles d’entrevue d’embauche. Ils ont été écrits de toutes pièces parce que GitHub contient déjà des solutions à bien des énigmes publiées, et que Codex a lu une grande partie de GitHub. Chaque problème est accompagné en moyenne de 7,7 tests. Comme exécuter du code non fiable est risqué, OpenAI a exécuté chaque programme généré dans un **bac à sable** (*sandbox*) verrouillé qui le tient à l’écart des autres systèmes.

Voici le format, illustré par un problème d’exemple écrit dans le même style. Le modèle voit le nom de la fonction et la **docstring**, la description entre triples guillemets, et doit écrire le corps :

```python
def count_long_words(sentence, n):
    """Retourne le nombre de mots de la phrase qui ont plus de n lettres.
    >>> count_long_words("the quick brown fox", 3)
    2
    """
```

Une bonne réponse découpe la phrase en mots et compte ceux qui sont plus longs que n. Des tests cachés essaient ensuite d’autres phrases et d’autres valeurs de n.

## Les résultats, expliqués

L’article présente ses résultats avec une mesure appelée **pass@k** : la probabilité qu’au moins une de k tentatives réussisse tous les tests. Pass@1 signifie un seul essai; pass@100 signifie que le modèle a droit à 100 essais et qu’on compte un succès si l’un d’eux fonctionne.

| Modèle | Taille | Problèmes HumanEval résolus, un essai |
|---|---|---|
| GPT-3 (et d’autres modèles GPT) | Variées | Environ 0 % |
| GPT-J, un modèle ouvert d’EleutherAI | 6 milliards | 11,4 % |
| Codex | 300 millions | 13,2 % |
| Codex | 12 milliards | 28,8 % |
| Codex-S, entraînement supplémentaire sur des fonctions autonomes correctes | 12 milliards | 37,7 % |

Plus d’essais aident beaucoup. Avec 100 tentatives par problème, Codex trouve une solution qui fonctionne pour 70,2 % des problèmes, et Codex-S pour 77,5 %. Comme les vrais utilisateurs ont rarement des tests cachés, l’équipe a aussi retenu la seule tentative que le modèle jugeait la plus probable; cela a permis de résoudre 44,5 % des problèmes.

> **À essayer :** écrivez une courte docstring Python pour une petite tâche que vous comprenez bien, comme compter les voyelles d’un mot, avec un exemple dans le style `>>>`. Écrivez ensuite trois cas de test rapides avec les réponses attendues. Vous venez de construire un problème de style HumanEval. Si vous avez accès à un assistant de programmation IA, demandez-lui la fonction et exécutez vos tests sur sa réponse.

## Les limites et les risques qu’énumère OpenAI

L’article est franc au sujet des faiblesses. Codex n’est pas **efficace en échantillons** (*sample efficient*) : il a appris à partir de centaines de millions de lignes de code, bien plus qu’aucun programmeur n’en voit au cours d’une carrière, et pourtant les auteurs s’attendent à ce qu’un bon étudiant ayant terminé un cours d’introduction à l’informatique résolve plus de problèmes HumanEval que Codex-12B. Il peut produire du code qui ne s’exécute pas, ou appeler des fonctions et des variables qui n’existent pas. Sa justesse chute brusquement à mesure que les consignes s’allongent : dans un test, chaque étape supplémentaire enchaînée dans une docstring divisait le taux de réussite par deux à trois. Il confond aussi quelle opération s’applique à quelle variable quand une description en contient plusieurs de chaque.

La section sur les répercussions plus larges va plus loin :

- **Dépendance excessive.** Codex peut suggérer du code qui a l’air correct, mais qui ne fait pas ce que l’utilisateur voulait, un risque particulier pour les débutants. OpenAI affirme qu’une supervision humaine est nécessaire.
- **Désalignement.** Quand un prompt contient des bogues subtils, Codex a tendance à écrire du code moins bon que ce dont il est capable, en copiant le style de ce qu’il voit. Les auteurs ont constaté que cet écart grandit avec la taille du modèle.
- **Biais.** On peut amener Codex à produire des commentaires nuisibles, et du code dont la structure reflète des stéréotypes. VentureBeat met en lumière un exemple : devant une fonction nommée d’après la race, Codex supposait un petit ensemble de catégories fixes.
- **Sécurité.** Il peut suggérer des réglages non sécuritaires et du code vulnérable; des personnes qualifiées devraient donc examiner ce qu’il produit avant de l’exécuter ou de s’y fier.
- **Emplois.** L’article prévoit des gains de productivité modestes pour l’instant, puisque les programmeurs consacrent une grande partie de leur journée à d’autres tâches que coder, et des effets plus importants plus tard.

## Pourquoi c’est important

HumanEval donne aux chercheurs un étalon commun et public pour les modèles qui écrivent du code, publié sur GitHub pour que n’importe qui puisse tester ses propres systèmes. Évaluer en exécutant des tests, plutôt qu’en comparant du texte, deviendra probablement une façon standard de mesurer ce genre d’IA.

L’article montre aussi à quel point l’entraînement sur du code change les choses : un modèle GPT général ne résout presque aucun de ces problèmes, alors que Codex en résout plus du quart du premier coup. Et il consigne, dans les mots mêmes d’OpenAI, les problèmes qui accompagnent un tel outil.

## Qu’est-ce que cela signifie pour les personnes qui utilisent GitHub Copilot?

Copilot tourne sur une version de production de Codex, pas sur les modèles exacts de l’article, mais les leçons s’appliquent. Traitez ses suggestions comme un premier jet d’un assistant rapide et cultivé qui ne comprend pas vos intentions. Lisez chaque suggestion, exécutez vos tests, et soyez particulièrement prudent avec le code sensible sur le plan de la sécurité, comme le chiffrement ou l’authentification.

Les résultats de l’article suggèrent aussi comment obtenir une meilleure aide. Des descriptions courtes et précises fonctionnent bien mieux que de longues chaînes de consignes; découpez donc une grosse tâche en petites fonctions avec des docstrings claires et des exemples. Gardez aussi votre propre code propre : Codex a tendance à suivre la qualité du code qui l’entoure.

OpenAI a indiqué à VentureBeat que les requêtes de Copilot sont limitées en fréquence pour empêcher les abus automatisés, et qu’il met à jour ses outils de sécurité en vue d’offrir Codex par son API.

## Sources

- Evaluating Large Language Models Trained on Code: https://arxiv.org/abs/2107.03374
- OpenAI warns AI behind GitHub's Copilot may be susceptible to bias: https://venturebeat.com/2021/07/08/openai-warns-ai-behind-githubs-copilot-may-be-susceptible-to-bias/
