Le prompting zero-shot consiste à demander une tâche à un modèle à partir d'une simple consigne, sans lui montrer d'exemple de la réponse attendue. "Traduis ce paragraphe en espagnol" et "Résume cet e-mail en deux phrases" sont des prompts zero-shot. C'est la façon par défaut d'utiliser les modèles de chat, et pour les tâches courantes, c'est en général tout ce qu'il faut.
Ce que signifie zero-shot
En apprentissage automatique, un "shot" est un exemple résolu. Les termes sont plus anciens que les modèles de chat, mais leur sens en prompting a été popularisé par Brown et al. 2020, "Language Models are Few-Shot Learners", qui testait GPT-3 dans trois configurations : une description de la tâche avec zéro, une ou quelques démonstrations dans le prompt, sans réentraînement dans aucun cas. Pour ce modèle, quelques exemples faisaient en général mieux qu'aucun.
Depuis, les modèles de chat ont été massivement entraînés à suivre des consignes, et c'est pourquoi une simple demande marche si bien aujourd'hui. Un prompt zero-shot correspond exactement à la situation pour laquelle ils ont été entraînés : quelqu'un décrit un travail avec des mots et attend qu'il soit fait.
Zero-shot ne veut pas dire zéro contexte. Un bon prompt zero-shot précise quand même le public, colle l'entrée et décrit le format et les limites. La seule chose qu'il omet, c'est un exemple terminé de la sortie.
Un prompt zero-shot bien fait
Le prompt ci-dessous extrait les actions à mener de notes de réunion sans exemple de sortie, seulement avec une description précise de celle-ci. Désactivez des parties pour voir quelles lignes font le travail.
Point sprint, mardi
Priya corrigera le timeout de connexion avant vendredi.
Discussion sur le passage à un nouveau fournisseur de CI, pas de décision.
Tom rédige les notes de version de la 2.4.
Il faudrait que quelqu'un mette à jour la doc d'onboarding.
Lena : je relis les notes de Tom d'ici jeudi.Priya : Corriger le timeout de connexion (avant vendredi) Tom : Rédiger les notes de version de la 2.4 Non attribué : Mettre à jour la doc d'onboarding Lena : Relire les notes de version de Tom (d'ici jeudi)
La ligne de format fait le travail d'un exemple : elle décrit la forme exacte de chaque ligne, il n'y a donc rien à copier. Désactivez-la et la réponse choisit sa propre forme, souvent une liste à puces avec des noms en gras, qui se lit bien mais ne se colle plus proprement dans un outil de suivi. Désactivez les contraintes et la discussion sur la CI peut apparaître comme une tâche, car rien n'a dit au modèle que les sujets non tranchés ne comptent pas.
Quand le zero-shot suffit
Le zero-shot fonctionne quand le modèle peut tout déduire de vos mots :
- La tâche est courante. Résumer, traduire, expliquer, corriger la grammaire et écrire une fonction selon une spécification claire sont des tâches que le modèle a vues un nombre incalculable de fois pendant son entraînement.
- Vous pouvez décrire la sortie exactement. "Une ligne par élément, le responsable d'abord" est aussi clair qu'un exemple. Voir sortie structurée pour décrire des formats qu'un programme lira.
- Les catégories veulent dire ce qu'elles disent. Classer des avis en positifs et négatifs se passe en général d'exemples, car ces étiquettes ont le même sens pour presque tout le monde.
Quand ajouter plutôt des exemples
Certaines choses sont difficiles à mettre en mots, et c'est là que les prompts zero-shot commencent à rater :
- Vos propres frontières. Si votre équipe support classe "impossible de se connecter" dans les problèmes de compte plutôt que dans les bugs, le modèle ne peut pas le savoir. Il choisira l'interprétation de la plupart des gens.
- Une charte maison. Les messages de commit de votre équipe ou le ton de votre newsletter sont plus faciles à montrer qu'à décrire.
- Les ratés répétés de peu. Si vous avez reformulé la consigne deux fois et que la sortie est toujours légèrement à côté de la même façon, arrêtez de reformuler et montrez deux ou trois bonnes réponses.
C'est le prompting few-shot. Une bonne habitude consiste à commencer en zero-shot, à regarder ce qui revient, et à n'ajouter des exemples que pour ce que le modèle rate précisément.
Le zero-shot chain of thought
Kojima et al. 2022, "Large Language Models are Zero-Shot Reasoners", ont découvert qu'ajouter une seule phrase, "Let's think step by step" (réfléchissons étape par étape), rendait les grands modèles nettement meilleurs sur des problèmes d'arithmétique, de symboles et de logique, sans aucun exemple. La phrase pousse le modèle à écrire des étapes intermédiaires avant la réponse, et chaque étape écrite devient du contexte pour la suivante. Leur méthode utilisait deux appels : le premier produisait le raisonnement, le second demandait la réponse finale.
Dans le bloc ci-dessous, le premier onglet force une réponse immédiate et le second laisse au modèle de la place pour travailler.
12 h 40
La première réponse a oublié les 10 minutes rattrapées par le train : le genre d'erreur qui arrive quand un modèle doit s'engager sur la réponse dès ses premiers tokens. Un modèle actuel trouvera peut-être la bonne réponse dans les deux cas ; l'écart grandit avec le nombre d'étapes du problème. La seconde version a un autre avantage : chaque étape est visible, vous pouvez donc voir où une réponse a déraillé.
Les modèles qui raisonnent en interne avant de répondre font déjà ce travail sans qu'on le leur demande, donc "réfléchissons étape par étape" leur apporte peu, à part une réponse plus longue. Chain of thought traite la technique en profondeur, y compris sa version few-shot.
Zero-shot et few-shot en un coup d'œil
| Zero-shot | Few-shot | |
|---|---|---|
| Contenu du prompt | Consignes, contexte et entrée | La même chose, plus quelques paires entrée et réponse |
| Idéal pour | Les tâches courantes dont la sortie se décrit facilement | Les étiquettes personnalisées, les formats inhabituels, une charte maison |
| Coût | Prompt court | Prompt plus long, plus de tokens par appel |
| Échec typique | Choisit l'interprétation la plus courante, pas la vôtre | Reproduit des régularités accidentelles des exemples |
Questions fréquentes
Qu'est-ce que le prompting zero-shot ?
Le prompting zero-shot consiste à confier une tâche à un modèle de langage avec seulement des consignes, sans exemple de sortie déjà rédigé. "Résume cet e-mail en deux phrases" est un prompt zero-shot. Les modèles de chat actuels sont entraînés à suivre des consignes, donc les prompts zero-shot gèrent bien la plupart des tâches du quotidien.
Quelle est la différence entre zero-shot et few-shot ?
Un prompt zero-shot décrit la tâche avec des mots. Un prompt few-shot ajoute quelques exemples, chacun associant une entrée à la réponse voulue, pour que le modèle puisse reproduire le schéma. Commencez en zero-shot ; passez au few-shot quand la sortie rate sans cesse un format ou une distinction plus facile à montrer qu'à décrire.
Pourquoi dit-on zero-shot ?
En apprentissage automatique, un "shot" est un exemple résolu. L'article de Brown et al. sur GPT-3 en 2020, "Language Models are Few-Shot Learners", testait le modèle avec zéro, une ou quelques démonstrations de la tâche dans le prompt, et ces noms sont devenus la norme en prompting : zero-shot, one-shot et few-shot.
Quand le prompting zero-shot ne fonctionne-t-il pas ?
Il peine quand la tâche dépend de règles que vous seul connaissez, comme les catégories de votre équipe ou votre charte éditoriale, quand le format de sortie sort de l'ordinaire, et sur les raisonnements en plusieurs étapes où le modèle répond trop vite. Des exemples règlent les deux premiers cas ; demander au modèle de procéder étape par étape aide pour le troisième.
Qu'est-ce que le zero-shot chain of thought ?
C'est un prompt zero-shot qui demande au modèle de raisonner avant de répondre, le plus célèbre étant l'ajout de "Let's think step by step" (réfléchissons étape par étape). Kojima et al. ont montré en 2022 que cette seule phrase, sans aucun exemple, améliorait les résultats des grands modèles sur des problèmes d'arithmétique et de logique.