# Qu’est-ce que le few-shot prompting?

Date: 2020-08-20 · Author: Robert Scales · https://guidetoartificialintelligence.com/fr/apprendre/prompt-few-shot-quelques-exemples/

**Answer:** Le few-shot prompting consiste à placer quelques exemples résolus d’une tâche directement dans le prompt, pour qu’un modèle de langage comme GPT-3 voie la régularité et l’applique à un nouveau cas. Les poids du modèle ne changent jamais : il apprend la tâche uniquement à partir de ce qu’il lit dans ce prompt.

Le terme vient de l’article sur GPT-3 que des chercheurs d’OpenAI ont publié en mai. Ils y décrivent trois façons de confier une tâche au modèle sans aucun entraînement supplémentaire. Le *zero-shot* ne donne qu’une consigne. Le *one-shot* ajoute une seule démonstration. Le *few-shot* en ajoute plusieurs. Un *shot*, c’est simplement un exemple résolu : une paire formée d’une entrée et de la bonne sortie.

Le *few-shot prompting* (le prompt à quelques exemples) est vite devenu la méthode de travail courante des personnes qui participent à la version bêta de l’API. Le billet de lancement d’OpenAI décrit d’ailleurs l’API comme un outil qu’on programme en lui montrant quelques exemples de ce qu’on veut. Même le prompt de questions et réponses qu’OpenAI propose par défaut est un prompt *few-shot* : une courte liste de questions, chacune suivie d’une réponse modèle, puis une nouvelle question laissée ouverte. Le développeur Kevin Lacker a utilisé exactement ce prompt de départ dans ses tests de GPT-3, largement partagés en juillet.

## Une tâche, trois prompts

Imaginez une petite boutique en ligne qui veut trier les courriels de ses clients dans quatre files : Facturation, Livraison, Technique et Autre. Voici le même travail écrit de trois façons.

**Zero-shot : la consigne seulement.**

```prompt
Classe le courriel du client dans une seule catégorie : Facturation, Livraison, Technique ou Autre.

Courriel : On m’a facturé deux fois la commande 4471. Pouvez-vous rembourser l’un des paiements?
Catégorie :
```

Cela fonctionne souvent pour un cas facile comme une double facturation, mais le modèle doit deviner le format de la réponse. Il pourrait écrire « Facturation », « problème de facturation » ou une phrase entière qui explique son raisonnement.

**One-shot : la consigne plus un exemple.**

```prompt
Classe le courriel du client dans une seule catégorie : Facturation, Livraison, Technique ou Autre.

Courriel : Mon colis est indiqué comme livré, mais il n’est pas devant ma porte.
Catégorie : Livraison

Courriel : On m’a facturé deux fois la commande 4471. Pouvez-vous rembourser l’un des paiements?
Catégorie :
```

Un seul exemple règle le format : un seul mot après « Catégorie : ». Mais le modèle n’a vu qu’un cas de Livraison; il sait donc peu de choses sur l’endroit où passent les frontières entre les catégories.

**Few-shot : la consigne plus plusieurs exemples.**

```prompt
Classe le courriel du client dans une seule catégorie : Facturation, Livraison, Technique ou Autre.

Courriel : Mon colis est indiqué comme livré, mais il n’est pas devant ma porte.
Catégorie : Livraison

Courriel : L’application me déconnecte chaque fois que j’ouvre la page du panier.
Catégorie : Technique

Courriel : Est-ce que je peux avoir une facture au nom de mon entreprise?
Catégorie : Facturation

Courriel : Avez-vous un magasin à Ottawa?
Catégorie : Autre

Courriel : Le numéro de suivi que vous m’avez envoyé ne fonctionne pas sur le site du transporteur.
Catégorie : Livraison

Courriel : On m’a facturé deux fois la commande 4471. Pouvez-vous rembourser l’un des paiements?
Catégorie :
```

Le modèle a maintenant au moins un exemple pour chaque file, dont un cas piège : un numéro de suivi qui ne fonctionne pas a l’air d’un problème technique, mais il relève de la Livraison. Cet exemple enseigne une frontière que la consigne seule n’énonce jamais.

## Ce qui fait un bon ensemble d’exemples

Les bases d’un prompt clair, comme des étiquettes cohérentes et un espace laissé libre pour la réponse, s’appliquent ici aussi. Le *few-shot prompting* ajoute quelques questions qui lui sont propres :

- **Chaque réponse possible apparaît-elle?** Si Facturation ne figure dans aucun de vos exemples, le modèle sera moins porté à la choisir.
- **Les exemples ressemblent-ils à de vraies entrées?** Reprenez la longueur, le ton et le désordre des courriels que vous recevez réellement, pas des phrases propres de manuel.
- **Les cas difficiles sont-ils couverts?** Consacrez vos exemples aux cas limites, comme le numéro de suivi ci-dessus, plutôt qu’aux cas évidents.
- **Les réponses des exemples sont-elles justes?** Le modèle copie la régularité que vous lui montrez, erreurs comprises.

Il vaut la peine de savoir ce que le *few-shot prompting* n’est pas. Ce n’est pas un entraînement. L’article sur GPT-3 est prudent sur ce point : aucun poids n’est mis à jour. Le modèle lit vos exemples à neuf à chaque requête et les oublie ensuite. OpenAI indique que l’API permet aussi un entraînement sur vos propres données pour de meilleurs résultats, mais c’est une étape distincte.

> **À essayer :** choisissez une tâche de tri de votre propre vie, comme classer des dépenses en Nourriture, Transport ou Maison. Écrivez la version *zero-shot*, puis ajoutez un exemple par catégorie, puis ajoutez deux cas limites. Faites passer chaque version sur les cinq mêmes nouveaux éléments et notez où les réponses changent.

## Combien d’exemples devriez-vous mettre dans un prompt?

L’article sur GPT-3 donne un cadre utile. Pour leurs tests *few-shot*, les auteurs ont habituellement utilisé entre 10 et 100 exemples, pour une raison pratique : c’est le nombre qui tient dans la fenêtre de 2 048 jetons de GPT-3, les morceaux de texte que le modèle lit. Ils rapportent aussi que plus d’exemples, c’est généralement mieux, mais pas toujours; ils ont donc essayé plusieurs nombres et gardé le meilleur. Sur SuperGLUE, un banc d’essai exigeant de tâches de lecture et de raisonnement, ils rapportent que moins de huit exemples par tâche ont suffi à GPT-3 pour battre un modèle BERT-Large ayant subi un ajustement fin.

Pour le travail de tous les jours, il en découle trois choses. D’abord, couvrez l’éventail avant d’ajouter du volume : un exemple par catégorie, plus vos cas les plus difficiles, compte souvent davantage qu’une longue liste de cas faciles. Ensuite, gérez votre budget de jetons. Un courriel de client réaliste de trois ou quatre phrases, avec son étiquette, prend environ 50 jetons; vingt exemples de ce genre occupent donc environ la moitié de la fenêtre, ce qui laisse moins de place pour le courriel à trier et pour la réponse. Enfin, testez au lieu de deviner. Gardez hors du prompt un petit ensemble de vrais courriels dont vous connaissez la réponse, faites-les passer dans chaque version, et ajoutez des exemples seulement là où le modèle continue de se tromper.

L’article montre aussi que les grands modèles tirent mieux parti des exemples que les petits. Si vous travaillez avec l’un des plus petits modèles GPT-3, attendez-vous à avoir besoin de plus d’exemples, ou d’exemples plus clairs, pour obtenir la même exactitude.

## Sources

- Language Models are Few-Shot Learners: https://arxiv.org/abs/2005.14165
- OpenAI API: https://openai.com/index/openai-api/
- Giving GPT-3 a Turing Test: https://lacker.io/ai/2020/07/06/giving-gpt-3-a-turing-test.html
