par Iulian Serban
Nous avons montré comment les LLM ont donné naissance à un nouveau paradigme informatique. Ce nouveau paradigme informatique s'accompagne également de nouvelles approches, de nouveaux cadres et de nouveaux modèles de conception pour la construction de logiciels. Dans ce billet de blog, nous présenterons un ensemble de modèles de conception destinés aux LLM pour construire des unités de calcul et des systèmes résolvant des problèmes très complexes.
La plupart de ces modèles de conception sont spécifiques aux LLM, mais ne s'appliquent pas aux systèmes logiciels classiques.
L'apprentissage à quelques coups est un modèle de conception simple, mais très puissant pour les LLM qui peut améliorer considérablement leurs performances. Les LLM sont formés pour compléter des mots et des phrases dans des documents (c'est-à-dire pour prédire un ou plusieurs mots manquants/masqués dans une phrase). Et ils sont excellents dans ce domaine !
L'idée de l'apprentissage en quelques étapes est de donner au LLM n exemples de paires entrée-sortie dans l'invite, puis de lui demander de combler ce qui manque pour le n+1èmeexemple.
Examinons l'exemple de la classification des courriels comme importants ou non importants. Rappelons que dans le dernier billet de blog, nous avons discuté de la conception d'un système logiciel (un assistant personnel) utilisant les LLM pour détecter les courriels importants et notifier l'utilisateur sur Slack afin qu'il y réponde de manière urgente.
Voici un exemple d'invite à GPT-4, où je lui demande de classer un courriel de marketing :
J'ai reçu l'e-mail suivant. Veuillez me dire s'il est important ou non. S'il s'agit d'un email important, indiquez 1, sinon indiquez 0.
Email :
Question rapide
Hey Iulian, je suis tombé sur ce que tu fais chez Korbit et j'aimerais te montrer comment nous pouvons t'aider ! Nous venons juste d'aider une entreprise comme la tienne à passer à plus de 100k$/mois en utilisant les annonces Linkedin.
Nous offrons une réduction de 50% sur notre service ce mois-ci, mais tu dois agir vite.
Discutons cet après-midi ?
Cheers,
John Blarr
Il s'agit d'un courriel de marketing que j'ai reçu, mais GPT-4 a renvoyé "1" en m'indiquant qu'il s'agissait d'un courriel important. GPT-4 n'a pas pu résoudre cette tâche avec une invite standard.
Essayons-le avec l'apprentissage à quelques coups. Nous allons donner au LLM n=2 exemples et lui demander de classer le troisième exemple. Voyons s'il peut classer correctement l'e-mail précédent :
Votre tâche consiste à classer les e-mails comme importants ou non.
Email :
Facture impayée
Votre facture doit être réglée aujourd'hui à 17 heures.
Si la facture n'est pas réglée à temps, des frais de 100 $ vous seront facturés.
Cordialement,
Annie Burton
Important : 1
Email :
Présentation d'Anderson
Je travaille pour Anderson. Nous sommes un cabinet de conseil international spécialisé dans l'obtention de crédits d'impôt pour des entreprises telles que la vôtre.
Serait-il possible de passer un appel rapide ?
Cordialement,
Alex Grayfield
Important : 0
Email :
Question rapide
Hey Iulian, j'ai découvert ce que vous faites chez Korbit et j'aimerais vous montrer comment nous pouvons vous aider !
Nous venons juste d'aider une entreprise comme la tienne à atteindre plus de 100 000 $/mois grâce aux annonces Linkedin.
Nous offrons une réduction de 50 % sur notre service ce mois-ci, mais tu dois agir vite.
Discutons cet après-midi ?
Cheers,
John Blarr
Important :
Lors de l'exécution de cette requête, GPT-4 a renvoyé "0", ce qui indique que le dernier courriel (le courriel de marketing) n'est pas important. En d'autres termes, en utilisant l'apprentissage à quelques coups, GPT-4 a été en mesure de résoudre cette tâche !
Si vous consultez l'article de blog précédent, vous verrez comment nous avons ajouté l'apprentissage à court terme dans le système de classification des courriels comme étant importants ou non importants. Nous avons vu ici comment l'apprentissage à court terme pouvait être intégré au système en ajoutant deux unités de calcul supplémentaires : une unité de calcul pour l'annotation des exemples par un réviseur humain, et une unité de calcul pour lire/écrire dans une base de données vectorielle. Il s'agit d'une façon très générale de combiner ce modèle de conception avec un humain dans la boucle.
Lorsque nous demandons aux LLM de résoudre un problème plus complexe, il est souvent utile de le diviser en deux problèmes plus petits. L'idée derrière le CoT Prompting est de permettre des capacités de raisonnement complexes par le biais d'étapes de raisonnement intermédiaires. Le schéma habituel consiste à rechercher un résultat intermédiaire nécessaire pour trouver (ou en corrélation avec) le résultat attendu.
Revenons à l'exemple de la classification des courriels comme étant importants ou non. Par exemple, nous pourrions dire qu'un courriel n'est important que si j'ai besoin d'y répondre de toute urgence.
Nous pouvons l'utiliser pour diviser la tâche en deux sous-tâches. Tout d'abord, nous interrogerons GPT-4 pour savoir si le courriel est urgent. Ensuite, nous prendrons ce résultat et interrogerons à nouveau GPT-4 pour voir s'il s'agit d'un courriel important. Voici ce que je demande à GPT-4 dans un premier temps :
Vous avez reçu l'e-mail suivant. Veuillez m'indiquer si cet e-mail nécessite une réponse urgente. Veuillez expliquer votre raisonnement étape par étape.
Email :
Question rapide
Hey Iulian, j'ai découvert ce que vous faites chez Korbit et j'aimerais vous montrer comment nous pouvons vous aider !
Nous venons juste d'aider une entreprise comme la vôtre à passer à plus de 100k$/mois en utilisant les publicités Linkedin.
Nous offrons une réduction de 50% sur notre service ce mois-ci, mais vous devez agir vite.
Discutons cet après-midi ?
Cheers,
John Blarr
Voici la réponse que GPT-4 m'a donnée :
Ce courriel n'appelle pas de réponse urgente. Voici le raisonnement :
1. L'expéditeur, John Blarr, offre un service, ce qui signifie qu'il sollicite des affaires. Il ne s'agit pas d'une urgence ou d'une situation nécessitant une attention immédiate.
2. L'e-mail mentionne une réduction disponible ce mois-ci, mais il ne précise pas de date limite ou d'expiration pour l'offre. Il ne crée donc pas de sentiment d'urgence.
3. L'expéditeur propose de discuter dans l'après-midi, mais ne précise ni l'heure ni la date. Cela suggère que la conversation pourrait éventuellement être programmée à une date ultérieure.
4. Le courriel ne contient aucune information susceptible d'avoir un impact direct sur les activités ou les finances de votre entreprise dans un avenir immédiat.
5. Le courriel ne mentionne aucune conséquence négative si vous ne répondez pas immédiatement.
Par conséquent, même si le courriel présente un intérêt et peut potentiellement profiter à votre entreprise, il n'exige pas une réponse urgente.
J'ajoute ensuite cette explication (sous forme de texte libre) à une nouvelle invite et je lui demande de classer l'e-mail comme important ou non important. Voici la requête pour le GPT-4 :
J'ai reçu l'e-mail suivant. Le courriel n'est important que s'il est urgent.
Ce courriel n'appelle pas de réponse urgente. Voici le raisonnement :
1. l'expéditeur, John Blarr, offre un service, ce qui signifie qu'il sollicite des affaires. Il ne s'agit pas d'une urgence ou d'une situation qui requiert une attention immédiate.
2. Le courriel mentionne une réduction disponible ce mois-ci, mais il ne précise pas de date limite ou d'expiration pour l'offre. Il ne crée donc pas de sentiment d'urgence.
3. L'expéditeur propose de discuter dans l'après-midi, mais ne précise ni l'heure ni la date. Cela suggère que la conversation pourrait éventuellement être programmée à une date ultérieure.
4. Le courriel ne contient aucune information susceptible d'avoir un impact direct sur les activités ou les finances de votre entreprise dans un avenir immédiat.
5. Le courriel ne mentionne aucune conséquence négative qui se produirait si vous ne répondiez pas immédiatement.
Par conséquent, bien que le courriel soit intéressant et puisse potentiellement profiter à votre entreprise, il n'exige pas une réponse urgente.
Veuillez me dire si c'est important ou non. S'il s'agit d'un courriel important, inscrivez 1, sinon inscrivez 0.
Courriel :
Question rapide
Hé Iulian, j'ai découvert ce que vous faites chez Korbit et j'aimerais vous montrer comment nous pouvons vous aider !
Nous venons juste d'aider une entreprise comme la vôtre à passer à plus de 100 000 $/mois grâce aux annonces Linkedin.
Nous offrons une réduction de 50 % sur notre service ce mois-ci, mais vous devez agir vite.
Discutons ensemble cet après-midi ?
À bientôt,
John Blarr
GPT-4 a renvoyé "0", ce qui signifie qu'il ne s'agit pas d'un courriel important. Cette fois, nous avons pu résoudre la tâche en utilisant le CoT Prompting, ce qui a nécessité une approche différente par rapport à l'apprentissage en quelques coups.
C'est très bien, mais comment savoir si cela fonctionnera bien avec d'autres courriels ? Comment valider son exactitude sur un ensemble d'e-mails statistiquement représentatif ? Examinons les tests de fonction statistique.
Lorsque nous pensons à la validation d'un logiciel, nous pensons souvent aux scénarios de test. Étant donné une fonction déterministe (pas trop complexe), nous pouvons écrire des scénarios de test pour valider son comportement. Nous cherchons souvent à valider son comportement sur la base de sa logique interne. Par exemple, s'il y a une clause if, nous pourrions vouloir nous assurer que nos scénarios de test couvrent à la fois les cas où la condition if s'applique et ceux où elle ne s'applique pas.
Nous ne pouvons généralement pas le faire avec des LLM (ou des API "boîte noire", ou des humains, ou de nombreux autres types d'unités de calcul). Nous devons donc penser comme un ingénieur ML et utiliser des tests statistiques.
L'objectif des tests statistiques est de fournir une garantie statistique que, dans certaines conditions, le système atteint un certain niveau de performance. Par exemple, la garantie statistique pourrait être du type : avec un niveau de confiance de 95 %, le système sera en moyenne capable de classer correctement 90 % des exemples d'entrée.
Dans de nombreux cas, nous pouvons simuler notre système pour générer notre ensemble de données de paires d'entrées-sorties attendues pour une unité de calcul donnée. Nous pouvons formuler des hypothèses raisonnables sur la distribution statistique et appliquer des tests statistiques pour vérifier si le système atteint les performances requises. S'il ne passe pas le test statistique, nous savons qu'il doit être amélioré.
Considérons à nouveau le LLM ci-dessus classant les courriels comme importants ou non importants. Disons que le maximum que nous puissions tolérer est que 1/10 courriels ne soient pas classés correctement. Cela signifie que nous devons garantir un niveau de précision d'au moins 90 %.
Je choisis arbitrairement le chiffre de 90 %, mais en général, cela dépendra beaucoup du système et de l'utilisateur final. En particulier, si des erreurs dans cette unité de calcul se répercutent en aval sur d'autres unités de calcul, nous pourrions vouloir fixer des exigences de performance encore plus élevées.
Pour élaborer un test statistique, nous pouvons construire un ensemble de données de n=50 exemples de paires entrée-sortie. Nous pouvons faire passer ces exemples par l'unité de calcul pour obtenir les étiquettes prédites, calculer sa précision, puis effectuer un test binomial pour voir s'il atteint une précision de 90 % ou plus à un niveau de confiance de 95 %. Si ce test échoue, notre test statistique échoue également.
Étant donné qu'il s'agit d'un test binomial, nous devons utiliser l'intervalle de confiance de la proportion binomiale (voir ici). Une bonne approximation consiste à vérifier que l'affirmation suivante est valable :
Ici p̂ est le pourcentage d'e-mails correctement classés dans l'ensemble de données, n est le nombre d'exemples dans l'ensemble de données (n=50 dans cet exemple) et z est le quantile d'une distribution normale standard (qui devrait être de 1,96 étant donné que nous voulons un niveau de confiance de 95 %).
Si ce test (ou cette affirmation) réussit, nous pouvons garantir qu'avec un niveau de confiance de 95 %, la précision de l'unité de calcul LLM sera d'au moins 90 % en moyenne.
Nous pouvons utiliser l'idée des tests statistiques pour améliorer le modèle lui-même.
Il est bien connu que même pour la même tâche avec le même LLM, des messages-guides différents peuvent conduire à des résultats très différents. Même un petit changement dans le modèle d'invite, tel que le changement d'un seul mot, peut avoir un impact significatif sur la capacité du LLM à effectuer la tâche qui lui a été confiée.
Étant donné un ensemble de données de n exemples de paires entrée-sortie pour une tâche donnée et k modèles d'invite, nous pouvons utiliser des tests statistiques pour trouver le modèle d'invite qui donne le meilleur résultat pour la tâche.
L'approche la plus simple consiste à utiliser la force brute. Dans ce cas, pour chaque modèle d'invite, nous évaluons les performances de ce modèle d'invite par rapport à l'ensemble des n exemples de paires entrée-sortie. Pour l'exemple ci-dessus, qui consiste à déterminer si un courriel est important ou non, nous calculons simplement la précision de chaque modèle d'invite par rapport à l'ensemble des n=50 exemples. Nous choisissons ensuite le modèle d'invite ayant la plus grande précision et l'utilisons dans le système.
Cette approche est facile à suivre si le résultat est une variable binaire (par exemple, email "important" ou "pas important"), car nous pouvons faire une comparaison directe entre la sortie des LLM et la sortie attendue.
Cependant, si le résultat attendu est un objet plus complexe, tel qu'une image ou un paragraphe de texte (par exemple, un e-mail, un résumé ou une traduction), nous ne pouvons pas effectuer une comparaison directe entre le résultat des LLM et le résultat attendu. Nous aurons besoin d'une autre méthode pour les comparer.
Si nous avons affaire à des textes relativement courts (par exemple, 5-10 lignes), une façon de résoudre ce problème est de demander à un deuxième LLM de comparer les deux textes (le résultat du premier LLM et le résultat attendu) et d'évaluer leur similarité sur une échelle de 1 à 5. Nous recueillons alors un ensemble de scores de similarité et pouvons utiliser la moyenne de ces scores comme métrique.
Dans ce cas, la précision de cette métrique dépend maintenant de la précision du second LLM. Nous pouvons également modéliser cela statistiquement. Maintenant, la sortie du premier LLM et la mesure (score de similarité) sont des variables aléatoires qui suivent chacune leur propre distribution statistique. Si nous faisons des hypothèses appropriées sur ces deux variables, nous pouvons construire un nouveau test statistique et l'appliquer pour valider la performance du système.
Nous avons discuté de 4 modèles de conception applicables aux LLM. Ces modèles de conception changent la façon dont nous construisons des logiciels avec des LLM et peuvent avoir un impact énorme sur la maintenabilité, la performance, la vitesse et la capacité de mise à l'échelle d'un système.
Je vous encourage à poursuivre votre apprentissage des modèles de conception et à partager vos connaissances avec les autres.
----------