Le prompting few-shot consiste à montrer au modèle quelques exemples résolus d'une tâche, chacun associant une entrée à la réponse voulue, avant de lui donner la vraie entrée. Le modèle lit le schéma et le poursuit. Les exemples sont le moyen le plus rapide de fixer ce qui se dit mal avec des mots : la frontière entre deux catégories, la forme exacte de la sortie, ou le ton dans lequel écrit votre équipe.
Comment fonctionne le prompting few-shot
Brown et al. 2020, "Language Models are Few-Shot Learners", ont montré que GPT-3 pouvait saisir une nouvelle tâche à partir d'une poignée de démonstrations placées dans le prompt, sans réentraînement. On parle d'apprentissage en contexte (in-context learning) : rien ne change dans le modèle, et les exemples n'influencent que la réponse à ce prompt-là. La fois suivante, les exemples doivent y figurer à nouveau.
Les noms suivent le nombre d'exemples. Un prompt zero-shot n'en a aucun, un prompt one-shot en a un, et un prompt few-shot en a plusieurs, en général entre deux et une poignée.
Zero-shot et few-shot côte à côte
Les deux onglets ci-dessous demandent la même chose avec la même consigne. La seule différence : le second ajoute quatre exemples étiquetés avant le vrai ticket.
Catégorie : bug
L'utilisateur a réinitialisé son mot de passe, mais le nouveau est refusé à la connexion. Cela indique un problème dans le processus de réinitialisation, il s'agit donc très probablement d'un bug du système d'authentification.
Les exemples ont changé deux choses. D'abord le format : la réponse zero-shot a ajouté un titre en gras et une explication, alors que la réponse few-shot s'est calquée sur les exemples et a donné un seul mot, qu'un script peut lire directement. Ensuite la décision. "Bug" est une lecture raisonnable du ticket, et la plupart des gens la choisiraient. Mais cette équipe classe les problèmes de connexion dans account, et le troisième exemple le dit sans un mot d'explication. Aucune consigne ne mentionnait cette règle ; ce sont les exemples qui l'ont portée.
Combien d'exemples utiliser
Commencez avec deux à cinq. C'est suffisant pour la plupart des tâches de mise en forme et de classification, et le prompt reste court.
- Un seul exemple montre un format, mais le modèle a tendance à le copier de trop près. Si l'unique exemple est un résumé de 30 mots sur un changement de prix, le résumé suivant risque de faire 30 mots et de parler bizarrement d'argent.
- Deux ou trois exemples différents permettent au modèle de voir ce qu'ils partagent (le schéma) et ce qui varie (les détails).
- Pour une classification, incluez au moins un exemple par étiquette, puis ajoutez les cas limites qui ratent sans exemples.
- Au-delà de quelques exemples, les gains diminuent en général alors que chaque requête s'allonge, ce qui coûte des tokens et du temps. S'il vous faut des dizaines d'exemples pour y arriver, la tâche a peut-être besoin d'une consigne plus claire ou d'une tout autre approche.
Bien choisir ses exemples
Le modèle apprend de tout ce que vos exemples ont en commun, pas seulement de ce que vous vouliez enseigner.
- Couvrez les cas difficiles. Les exemples faciles apprennent peu. Les plus utiles se situent à la frontière, comme le ticket de connexion ci-dessus.
- Variez la surface. Mélangez entrées courtes et longues, sujets et formulations différents. Si tous les avis positifs de vos exemples sont courts, le modèle risque de prendre la longueur pour le signal.
- Équilibrez les étiquettes et mélangez l'ordre. Les modèles ont tendance à pencher vers l'étiquette la plus fréquente dans les exemples et vers celle qui apparaît en dernier.
- Vérifiez chaque exemple. Une erreur dans un exemple est une consigne de faire cette erreur.
- Utilisez de vraies entrées. Des exemples tirés de vos données réelles correspondent bien mieux à ce que verra le modèle que des exemples inventés.
Gardez un format identique
Chaque exemple doit utiliser les mêmes libellés, séparateurs et majuscules, et la vraie entrée doit ressembler exactement aux entrées des exemples. Dans le prompt des tickets, chaque exemple est "Ticket :" puis "Étiquette :", et le prompt se termine par une ligne "Étiquette :" ouverte, qui ne laisse qu'une seule chose naturelle à écrire ensuite.
Pour des exemples plus longs, entourez chacun de repères clairs comme des balises <example> pour que le modèle sache où l'un finit et où le suivant commence ; voir délimiteurs et balises XML. Dans l'API, vous pouvez aussi fournir les exemples sous forme de tours précédents de la conversation : un message utilisateur contenant l'entrée d'exemple, puis un message assistant contenant la réponse, répété pour chaque exemple.
Les prompts few-shot font de bons modèles de prompts réutilisables : la consigne et les exemples restent fixes, seule l'entrée change. Le bloc ci-dessous réécrit un message de commit dans le style d'une équipe. Tapez votre propre message dans le champ et désactivez la partie exemples pour voir quelle part du style ils portent.
feat(search): rend la barre de recherche insensible à la casse
Aucune règle n'est écrite : un type en minuscules, une portée entre parenthèses, un verbe à l'impératif, pas de point final. Les exemples montrent les quatre, et la réponse les respecte. Sans les exemples, le modèle améliore quand même le message, mais il doit deviner un style, et rien ne garantit que sa supposition corresponde au vôtre.
Les exemples few-shot peuvent aussi montrer un raisonnement, pas seulement des réponses. C'est avec des exemples résolus détaillant leurs étapes que le chain of thought a été présenté pour la première fois. Avec les modèles qui raisonnent en interne avant de répondre, limitez les exemples aux entrées, aux réponses et au format : des étapes de raisonnement scénarisées peuvent les détourner d'un meilleur chemin, et certains fournisseurs conseillent d'essayer d'abord le zero-shot avec ces modèles.
Questions fréquentes
Qu'est-ce que le prompting few-shot ?
Le prompting few-shot consiste à inclure dans le prompt quelques exemples d'une tâche, chacun associant une entrée à la bonne sortie, avant la vraie entrée. Le modèle poursuit le schéma fixé par les exemples. C'est surtout utile pour des catégories personnalisées, des formats inhabituels et des styles maison plus faciles à montrer qu'à décrire.
Combien d'exemples mettre dans un prompt few-shot ?
Deux à cinq est un bon point de départ pour la plupart des tâches. Pour une classification, incluez au moins un exemple par étiquette, plus les cas limites que le modèle ratait sans exemples. Au-delà de quelques-uns, chaque exemple supplémentaire aide en général moins tout en allongeant chaque requête.
Qu'est-ce que le prompting one-shot ?
Le prompting one-shot donne au modèle un seul exemple. Cela suffit pour montrer un format, mais le modèle a tendance à copier cet exemple unique de trop près, y compris sa longueur, sa formulation et même son sujet. Un second exemple, différent, indique au modèle quels traits forment le schéma et lesquels sont des accidents.
Le modèle apprend-il de mes exemples ?
Seulement pour la requête en cours. Les exemples façonnent la réponse parce qu'ils sont dans le contexte ; les poids du modèle ne changent pas et rien n'est retenu dans la conversation suivante. On parle d'apprentissage en contexte (in-context learning), et c'est pourquoi un prompt few-shot doit contenir ses exemples à chaque utilisation.
De mauvais exemples peuvent-ils dégrader la sortie ?
Oui. Le modèle copie tout ce que les exemples ont en commun, y compris les erreurs, la longueur et le ton que vous n'aviez pas prévus. Si la plupart des exemples partagent une même étiquette, le modèle a aussi tendance à pencher vers elle. Vérifiez que vos exemples sont justes, variés et équilibrés.