Maîtriser ChatGPT : résumé efficace avec les LLM

Maîtriser ChatGPT : résumé efficace avec les LLM

Nœud source: 2763303

Récapitulatif de texte ChatGPT

Agents de synthèse imaginés par l'outil de génération d'images IA Dall-E.

Faites-vous partie de la population qui laisse des avis sur Google maps à chaque fois que vous visitez un nouveau restaurant ?

Ou peut-être êtes-vous du genre à partager votre avis sur les achats Amazon, surtout lorsque vous êtes déclenché par un produit de mauvaise qualité ?

Ne vous inquiétez pas, je ne vous blâmerai pas - nous avons tous nos moments !

Dans le monde des données d'aujourd'hui, nous contribuons tous au déluge de données de multiples façons. Un type de données que je trouve particulièrement intéressant en raison de sa diversité et de sa difficulté d'interprétation, ce sont les données textuelles, comme les innombrables avis publiés quotidiennement sur Internet. Avez-vous déjà réfléchi à l'importance de normaliser et de condenser les données textuelles ?
Bienvenue dans le monde des agents de synthèse !

Les agents de synthèse se sont intégrés de manière transparente dans notre vie quotidienne en condensant les informations et en fournissant un accès rapide au contenu pertinent sur une multitude d'applications et de plateformes.

Dans cet article, nous explorerons l'utilisation de ChatGPT en tant qu'agent de synthèse puissant pour nos applications personnalisées. Grâce à la capacité des Large Language Models (LLM) à traiter et comprendre des textes, ils peuvent aider à lire des textes et à générer des résumés précis ou à normaliser des informations. Cependant, il est important de savoir comment extraire leur potentiel en accomplissant une telle tâche, ainsi que de reconnaître leurs limites.

La plus grande limitation pour le résumé ?
Les LLM échouent souvent lorsqu'il s'agit de respecter des limitations spécifiques de caractères ou de mots dans leurs résumés.

Explorons les meilleures pratiques pour générer des résumés avec ChatGPT pour notre application personnalisée, ainsi que les raisons de ses limites et comment les surmonter !

Si ce contenu éducatif approfondi vous est utile, vous pouvez abonnez-vous à notre liste de diffusion de recherche sur l'IA d'être alerté lorsque nous publierons du nouveau matériel. 

Résumé efficace avec ChatGPT

Les agents de synthèse sont utilisés partout sur Internet. Par exemple, les sites Web utilisent des agents de synthèse pour proposer des résumés concis d'articles, permettant aux utilisateurs d'avoir un aperçu rapide de l'actualité sans plonger dans l'intégralité du contenu. Les plateformes de médias sociaux et les moteurs de recherche le font aussi.

Des agrégateurs de nouvelles et des plateformes de médias sociaux aux sites Web de commerce électronique, les agents de synthèse font désormais partie intégrante de notre paysage numérique. Et avec l'augmentation des LLM, certains de ces agents utilisent désormais l'IA pour des résultats de synthèse plus efficaces.

ChatGPT peut être un bon allié lors de la construction d'une application utilisant des agents de synthèse pour accélérer les tâches de lecture et classer les textes. Par exemple, imaginons que nous ayons une entreprise de commerce électronique et que nous souhaitions traiter tous nos avis clients. ChatGPT pourrait nous aider à résumer un avis donné en quelques phrases, à le normaliser dans un format générique, à déterminer le sentiment de l'examen, et classant en conséquence.

S'il est vrai que nous pourrions simplement transmettre l'avis à ChatGPT, il existe une liste des meilleures pratiques — et les choses à éviter — pour tirer parti de la puissance de ChatGPT dans cette tâche concrète.

Explorons les options en donnant vie à cet exemple !

Exemple : Avis sur le commerce électronique

Gif fait maison.

Prenons l'exemple ci-dessus dans lequel nous souhaitons traiter tous les avis pour un produit donné sur notre site e-commerce. Nous serions intéressés par le traitement d'avis tels que celui-ci concernant notre produit vedette : le premier ordinateur pour enfants !

prod_review = """
I purchased this children's computer for my son, and he absolutely adores it. He spends hours exploring its various features and engaging with the educational games. The colorful design and intuitive interface make it easy for him to navigate. The computer is durable and built to withstand rough handling, which is perfect for active kids. My only minor gripe is that the volume could be a bit louder. Overall, it's an excellent educational toy that provides hours of fun and learning for my son. It arrived a day earlier
than expected, so I got to play with it myself before I gave it to him. """

Dans ce cas, nous aimerions que ChatGPT :

  • Classer l'avis en positif ou négatif.
  • Fournir un résumé de l'examen de 20 mots.
  • Sortez la réponse avec une structure concrète pour standardiser tous les avis dans un format unique.

Notes de mise en œuvre

Voici la structure de code de base que nous pourrions utiliser pour inviter ChatGPT à partir de notre application personnalisée. Je fournis également un lien vers un Jupyter Notebook avec tous les exemples utilisés dans cet article.

import openai
import os openai.api_key_path = "/path/to/key" def get_completion(prompt, model="gpt-3.5-turbo"): """
This function calls ChatGPT API with a given prompt
and returns the response back. """ messages = [{"role": "user", "content": prompt}] response = openai.ChatCompletion.create( model=model, messages=messages, temperature=0 ) return response.choices[0].message["content"] user_text = f"""
<Any given text> """ prompt = f"""
<Any prompt with additional text> """{user_text}""" """ # A simple call to ChatGPT
response = get_completion(prompt)

La fonction get_completion() appelle l'API ChatGPT avec une donnée rapide. Si l'invite contient des informations supplémentaires texte utilisateur, comme la revue elle-même dans notre cas, elle est séparée du reste du code par des triples guillemets.

Utilisons le get_completion() fonction pour demander ChatGPT !

Voici une invite remplissant les conditions décrites ci-dessus :

prompt = f"""
Your task is to generate a short summary of a product review from an e-commerce site. Summarize the review below, delimited by triple backticks, in exactly 20 words. Output a json with the sentiment of the review, the summary and original review as keys. Review: ```{prod_review}``` """
response = get_completion(prompt)
print(response)

⚠️ Les directives d'invite utilisées dans cet exemple, telles que l'utilisation de délimiteurs pour séparer le texte d'entrée du reste de l'invite et la demande d'une sortie structurée, sont expliquées en détail sur Ce que j'ai appris du cours d'OpenAI sur l'ingénierie rapide - Directives d'invite.

Voici la réponse de ChatGPT :

{ "sentiment": "positive", "summary": "Durable and engaging children's computer with intuitive interface and educational games. Volume could be louder.", "review": "I purchased this children's computer for my son, and he absolutely adores it. He spends hours exploring its various features and engaging with the educational games. The colorful design and intuitive interface make it easy for him to navigate. The computer is durable and built to withstand rough handling, which is perfect for active kids. My only minor gripe is that the volume could be a bit louder. Overall, it's an excellent educational toy that provides hours of fun and learning for my son. It arrived a day earlierthan expected, so I got to play with it myself before I gave it to him."
}

Comme nous pouvons le constater à partir des résultats, l'examen est précis et bien structuré, même si il manque certaines informations qui pourraient nous intéresser en tant que propriétaires du commerce électronique, telles que des informations sur la livraison du produit.

Résumer en mettant l'accent sur

Nous pouvons améliorer de manière itérative notre invite en demandant à ChatGPT de se concentrer sur certaines choses dans le résumé. Dans ce cas, nous sommes intéressés par tous les détails donnés sur l'expédition et la livraison :

prompt = f"""
Your task is to generate a short summary of a product review from an ecommerce site. Summarize the review below, delimited by triple backticks, in exactly 20 words and focusing on any aspects that mention shipping and delivery of the product. Output a json with the sentiment of the review, the summary and original review as keys. Review: ```{prod_review}``` """ response = get_completion(prompt)
print(response)

Cette fois, la réponse de ChatGPT est la suivante :

{ "sentiment": "positive", "summary": "Durable and engaging children's computer with intuitive interface. Arrived a day earlier than expected.", "review": "I purchased this children's computer for my son, and he absolutely adores it. He spends hours exploring its various features and engaging with the educational games. The colorful design and intuitive interface make it easy for him to navigate. The computer is durable and built to withstand rough handling, which is perfect for active kids. My only minor gripe is that the volume could be a bit louder. Overall, it's an excellent educational toy that provides hours of fun and learning for my son. It arrived a day earlierthan expected, so I got to play with it myself before I gave it to him."
}

Maintenant, l'examen est beaucoup plus complet. Donner des détails sur l'objectif important de l'examen initial est crucial pour éviter que ChatGPT ignore certaines informations qui pourraient être utiles pour notre cas d'utilisation..

Avez-vous remarqué que bien que ce deuxième essai inclue des informations sur la livraison, il a ignoré le seul aspect négatif de l'avis initial ?

Corrigeons ça!

"Extraire" au lieu de "Résumer"

En enquêtant sur les tâches de synthèse, j'ai découvert que la synthèse peut être une tâche délicate pour les LLM si l'invite de l'utilisateur n'est pas assez précise.

Lorsque vous demandez à ChatGPT de fournir un résumé d'un texte donné, il peut ignorer des informations qui pourraient être pertinentes pour nous - comme nous l'avons récemment vécu - ou il accordera la même importance à tous les sujets du texte, ne donnant qu'un aperçu des points principaux.

Les experts en LLM utilisent le terme extrait et des informations supplémentaires sur leurs objectifs au lieu de résumé lors de l'exécution de telles tâches assistées par ces types de modèles.

Alors que le résumé vise à fournir un aperçu concis des principaux points du texte, y compris des sujets non liés au sujet de discussion, l'extraction d'informations se concentre sur la récupération de détails spécifiques et peut nous donner ce que nous recherchons exactement. Essayons alors avec l'extraction !

prompt = f"""
Your task is to extract relevant information from a product review from an ecommerce site to give feedback to the Shipping department. From the review below, delimited by triple quotes extract the information relevant to shipping and delivery. Use 100 characters. Review: ```{prod_review}``` """ response = get_completion(prompt)
print(response)

Dans ce cas, en utilisant l'extraction, nous obtenons uniquement des informations sur notre sujet de discussion : Shipping: Arrived a day earlier than expected.

Automatisation

Ce système fonctionne pour un seul examen. Néanmoins, lors de la conception d'une invite pour une application concrète, il est important de le tester dans un lot d'exemples afin que nous puissions détecter toute valeur aberrante ou mauvaise conduite dans le modèle.

En cas de traitement de plusieurs avis, voici un exemple de structure de code Python qui peut vous aider.

reviews = [ "The children's computer I bought for my daughter is absolutely fantastic! She loves it and can't get enough of the educational games. The delivery was fast and arrived right on time. Highly recommend!", "I was really disappointed with the children's computer I received. It didn't live up to my expectations, and the educational games were not engaging at all. The delivery was delayed, which added to my frustration.", "The children's computer is a great educational toy. My son enjoys playing with it and learning new things. However, the delivery took longer than expected, which was a bit disappointing.", "I am extremely happy with the children's computer I purchased. It's highly interactive and keeps my kids entertained for hours. The delivery was swift and hassle-free.", "The children's computer I ordered arrived damaged, and some of the features didn't work properly. It was a huge letdown, and the delivery was also delayed. Not a good experience overall."
] prompt = f""" Your task is to generate a short summary of each product review from an e-commerce site. Extract positive and negative information from each of the given reviews below, delimited by triple backticks in at most 20 words each. Extract information about the delivery, if included. Review: ```{reviews}``` """

Voici les résumés de notre lot de critiques:

1. Positive: Fantastic children's computer, fast delivery. Highly recommend.
2. Negative: Disappointing children's computer, unengaging games, delayed delivery.
3. Positive: Great educational toy, son enjoys it. Delivery took longer than expected.
4. Positive: Highly interactive children's computer, swift and hassle-free delivery.
5. Negative: Damaged children's computer, some features didn't work, delayed delivery.

⚠️ Notez que même si la restriction de mots de nos résumés était suffisamment claire dans nos invites, nous pouvons facilement voir que cette limitation de mots n'est accomplie dans aucune des itérations.

Cette inadéquation dans le comptage des mots se produit parce que les LLM n'ont pas une compréhension précise du nombre de mots ou de caractères. La raison derrière cela repose sur l'un des principaux composants importants de leur architecture : le tokenizer.

Générateur de jetons

Les LLM comme ChatGPT sont conçus pour générer du texte basé sur des modèles statistiques tirés de grandes quantités de données linguistiques. Bien qu'ils soient très efficaces pour générer un texte fluide et cohérent, ils manquent de contrôle précis sur le nombre de mots.

Dans les exemples ci-dessus, lorsque nous avons donné des instructions sur un nombre de mots très précis, ChatGPT avait du mal à répondre à ces exigences. Au lieu de cela, il a généré un texte qui est en fait plus court que le nombre de mots spécifié.

Dans d'autres cas, il peut générer des textes plus longs ou simplement un texte trop verbeux ou manquant de détails. En outre, ChatGPT peut donner la priorité à d'autres facteurs tels que la cohérence et la pertinence, plutôt qu'au strict respect du nombre de mots. Cela peut se traduire par un texte de haute qualité en termes de contenu et de cohérence, mais qui ne correspond pas exactement à l'exigence de nombre de mots.

Le tokenizer est l'élément clé de l'architecture de ChatGPT qui influence clairement le nombre de mots dans la sortie générée.

Gif fait maison.

Architecture de tokenisation

Le tokenizer est la première étape du processus de génération de texte. Il est chargé de décomposer le morceau de texte que nous entrons dans ChatGPT en éléments individuels — jetons — , qui sont ensuite traités par le modèle de langage pour générer un nouveau texte.

Lorsque le tokenizer décompose un morceau de texte en jetons, il le fait sur la base d'un ensemble de règles conçues pour identifier les unités significatives de la langue cible. Cependant, ces règles ne sont pas toujours parfaites et il peut y avoir des cas où le tokenizer divise ou fusionne des jetons d'une manière qui affecte le nombre total de mots du texte.

Par exemple, considérons la phrase suivante : "Je veux manger un sandwich au beurre de cacahuète". Si le tokenizer est configuré pour diviser les jetons en fonction des espaces et de la ponctuation, il peut décomposer cette phrase en les jetons suivants avec un nombre total de mots de 8, égal au nombre de jetons.

Image réalisée par soi-même.

Cependant, si le tokenizer est configuré pour traiter "beurre d'arachide" en tant que mot composé, il peut décomposer la phrase en les jetons suivants, avec un nombre total de mots de 8, mais un nombre de jetons de 7.

Ainsi, la façon dont le tokenizer est configuré peut affecter le nombre total de mots du texte, et cela peut avoir un impact sur la capacité du LLM à suivre les instructions concernant le nombre précis de mots. Alors que certains tokenizers offrent des options pour personnaliser la manière dont le texte est tokenisé, cela n'est pas toujours suffisant pour garantir un respect précis des exigences en matière de nombre de mots. Pour ChatGPT dans ce cas, nous ne pouvons pas contrôler cette partie de son architecture.

Cela rend ChatGPT pas si bon pour accomplir les limitations de caractères ou de mots, mais on peut essayer avec des phrases à la place puisque le tokenizer n'affecte pas le nombre de phrases, mais leur longueur.

Être conscient de cette restriction peut vous aider à créer l'invite la mieux adaptée à votre application. Ayant ces connaissances sur le fonctionnement du comptage de mots sur ChatGPT, faisons une dernière itération avec notre invite pour l'application de commerce électronique !

Conclusion : avis sur le commerce électronique

Combinons nos apprentissages de cet article dans une invite finale ! Dans ce cas, nous demanderons les résultats dans HTML format pour une sortie plus agréable :

from IPython.display import display, HTML prompt = f"""
Your task is to extract relevant information from a product review from an ecommerce site to give feedback to the Shipping department and generic feedback from the product. From the review below, delimited by triple quotes construct an HTML table with the sentiment of the review, general feedback from
the product in two sentences and information relevant to shipping and delivery. Review: ```{prod_review}``` """ response = get_completion(prompt)
display(HTML(response))

Et voici la sortie finale de ChatGPT :

Capture d'écran faite par vous-même à partir du Jupyter Notebook avec les exemples utilisés dans cet article.

Résumé

Dans cet article,  nous avons discuté des meilleures pratiques pour utiliser ChatGPT comme agent de synthèse pour notre application personnalisée.

Nous avons vu que lors de la création d'une application, il est extrêmement difficile de trouver l'invite parfaite qui correspond aux exigences de votre application lors du premier essai. Je pense qu'un bon message à retenir est de considérer l'incitation comme un processus itératif où vous affinez et modélisez votre invite jusqu'à ce que vous obteniez exactement la sortie souhaitée.

En affinant de manière itérative votre invite et en l'appliquant à un lot d'exemples avant de la déployer en production, vous pouvez vous assurer la sortie est cohérente dans plusieurs exemples et couvre les réponses aberrantes. Dans notre exemple, il peut arriver que quelqu'un fournisse un texte au hasard au lieu d'un avis. Nous pouvons demander à ChatGPT d'avoir également une sortie standardisée pour exclure ces réponses aberrantes.

De plus, lorsque vous utilisez ChatGPT pour une tâche spécifique, il est également recommandé de connaître les avantages et les inconvénients de l'utilisation des LLM pour notre tâche cible. C'est ainsi que nous avons découvert le fait que les tâches d'extraction sont plus efficaces que le résumé lorsque nous voulons un résumé humain commun d'un texte d'entrée. Nous avons également appris que fournir l'orientation du résumé peut être un changeur de jeu concernant le contenu généré.

Enfin, alors que les LLM peuvent être très efficaces pour générer du texte, ils ne sont pas idéaux pour suivre des instructions précises sur le nombre de mots ou d'autres exigences de formatage spécifiques. Pour atteindre ces objectifs, il peut être nécessaire de s'en tenir au comptage des phrases ou d'utiliser d'autres outils ou méthodes, comme l'édition manuelle ou des logiciels plus spécialisés.

Cet article a été publié initialement le Vers la science des données et republié sur TOPBOTS avec la permission de l'auteur.

Vous aimez cet article? Inscrivez-vous pour plus de mises à jour de recherche sur l'IA.

Nous vous informerons lorsque nous publierons d'autres articles résumés comme celui-ci.

Horodatage:

Plus de TOPBOTS