Maison >Périphériques technologiques >IA >Compression rapide: un guide avec des exemples Python
Dans le paysage en évolution rapide de l'intelligence artificielle, l'optimisation des modèles de grands langues (LLM) ne consiste pas seulement à repousser les limites de ce qui est possible, mais aussi à assurer l'efficacité et la rentabilité.
La compression rapide est devenue une technique vitale pour améliorer les performances de ces modèles tout en minimisant les dépenses de calcul. Avec de nouvelles recherches émergeant presque chaque semaine, le maintien est difficile, mais comprendre les fondamentaux est essentiel.
Cet article couvre les bases de la compression rapide, discute lorsqu'elle doit être utilisée, son importance dans la réduction des coûts des pipelines de chiffon et fournit des exemples en utilisant le modèle GPT-3.5-Turbo-0125 via l'API d'Openai.
Si vous souhaitez en savoir plus, consultez ce cours sur l'ingénierie rapide.
La compression rapide est une technique utilisée dans le traitement du langage naturel (NLP) pour optimiser les entrées données aux LLM en réduisant leur longueur sans modifier de manière significative la qualité et la pertinence de la sortie. Cette optimisation est cruciale en raison de l'impact du nombre de jetons dans les requêtes sur les performances LLM.
Les jetonssont les unités de base de l'utilisation du texte LLMS, représentant des mots ou des sous-mots en fonction du tokenizer du modèle de langue. La réduction du nombre de jetons dans une invite est bénéfique et parfois nécessaire pour plusieurs raisons:
La compression rapide réduit le nombre de jetons en utilisant des stratégies telles que la suppression des informations redondantes, le résumé des points clés ou l'utilisation d'algorithmes spécialisés pour distiller l'essence d'une invite tout en minimisant son nombre de jetons.
Explorons les scénarios où nous pourrions utiliser une compression rapide.
comme la providence de la chaîne de pensées, bien que très efficaces, entraînent souvent de longues invites qui peuvent atteindre des milliers de jetons. Cela augmente les temps de traitement et les coûts et peut dépasser les limites de jeton de certains modèles.
La compression rapide atténue ces problèmes en réduisant le nombre de jetons tout en préservant l'efficacité de l'invite.
La compression rapide est essentielle dans de tels cas pour maintenir le contexte essentiel tout en minimisant les coûts.
Il est important de noter que la compression rapide n'est pas une solution universelle et doit être utilisée judicieusement. Par exemple, des modèles assistants comme ChatGpt, conçus pour des contextes conversationnels, peuvent ne pas bénéficier d'une compression rapide agressive.
Ces modèles ne facturent souvent pas par jeton et ont une résumé de chat et des fonctionnalités de mémoire intégrées pour gérer efficacement l'historique des conversations, ce qui rend la compression redondante.
Il est également important de noter que même lorsque vous travaillez avec des modèles qui facturent par jeton, une compression excessive pourrait entraîner une perte de nuances ou des détails importants. La suppression du bon équilibre entre la réduction de la taille et le maintien de l'intégrité de la signification de l'invite est la clé.
Les techniques de compression rapides peuvent être classées en trois méthodes principales: la distillation, le codage et le filtrage des connaissances. Chaque technique exploite différentes forces pour optimiser la longueur et l'efficacité des invites pour les LLM.
Bien que nous parlerons de chacune de ces techniques, vous pouvez trouver une approche plus complète dans cet article: des méthodes d'incitation efficaces pour les modèles de grands langues: une enquête. Tout au long de cet article, je ferai référence à ce document comme le «document d'enquête».
La distillation des connaissances est une technique dans le domaine de l'apprentissage automatique, introduit pour la première fois par Hinton et al. (2015), où un modèle plus petit et plus simple (l'élève) est formé pour reproduire le comportement d'un modèle plus grand et plus complexe (l'enseignant).
Cette technique a été initialement développée pour relever les défis de calcul de la formation d'un ensemble de modèles. Dans le contexte de l'ingénierie rapide, la distillation des connaissances peut être utilisée pour comprimer l'invite au lieu du modèle.
Ceci est réalisé en apprenant à comprimer les invites dures dans les LLM par un réglage invite doux. Pour des informations détaillées, reportez-vous aux articles 3.1 et à l'annexe A.1.1 du document d'enquête.
Les méthodes de codage transforment les textes d'entrée en vecteurs, réduisant la longueur de l'invite sans perdre des informations critiques. Ces vecteurs capturent la signification essentielle des invites, permettant aux LLMS de traiter efficacement les entrées plus courtes.
Fait intéressant, les LLM sont compétents dans d'autres langues comme Base64, qui peuvent être utilisées en codage pour réduire la taille de jeton de l'invite. Par exemple, l'invite «Traduire le texte suivant en français: Bonjour, comment vas-tu?» Encodé dans Base64 est «VHJHBNNSYXRLIHROZSBMB2XSB3DPBMCGDGV4DCB0BYBGCMVUY2G6ICDIZWXSBYWGAG93IGFYZSB5B3UNPW ==». Vous pouvez essayer d'inciter votre LLM préféré pour le tester!
Étonnamment, certaines techniques de codage sont également utilisées pour le jailbreaking modèle, ce qui implique de manipuler LLM pour contourner ses mécanismes de sécurité. Pour plus de détails sur les méthodes d'encodage, voir les sections 3.2 et l'annexe A.1.2 du document d'enquête.
Alors que les deux méthodes précédentes tentent de comprimer l'invite entière, les techniques de filtrage se concentrent sur l'élimination des pièces inutiles pour améliorer l'efficacité de LLMS.
Les techniques de filtrage évaluent le contenu des informations de différentes parties d'une invite et suppriment les informations redondantes, car toutes les informations dans l'invite ne sont pas bénéfiques pour les LLM. Cela peut être fait à différents niveaux, tels que des phrases, des phrases ou des jetons.
L'objectif est de conserver uniquement les parties les plus pertinentes de l'invite. Dans l'article, le contexte sélectif de Li et al. (2023), les chercheurs utilisent des mesures d'auto-information pour filtrer les informations redondantes. Dans l'article Llmlingua: comprimer les invites à l'inférence accélérée de modèles de gros langues, les chercheurs de Microsoft affinement des invites dans des composants clés et ajustent dynamiquement les rapports de compression pour chaque partie. Pour plus de lecture, reportez-vous aux sections 3.3 et à l'annexe A.1.3 du document d'enquête.
Dans cette section, je vais implémenter et tester l'algorithme de contexte sélectif qui est populaire et considéré comme à la pointe de la technologie. Si vous souhaitez seulement tester l'algorithme, vous n'avez pas besoin d'installer quoi que ce soit - il est déjà hébergé sur la plate-forme HuggingFace.
Il existe également d'autres techniques de compression grand public, comme Keep It Simple (KIS), SCLR et les algorithmes de la famille Llmlingua, mais nous ne pourrons pas les couvrir dans ce court article.
lien d'application
Dans l'application Web de contexte sélectif, vous pouvez choisir la langue de l'invite que vous souhaitez compresser (anglais ou chinois simplifié). Vous pouvez également définir le rapport de compression et sélectionner s'il faut filtrer les phrases, les jetons ou les phases.
Travaillons maintenant sur l'implémentation de Python. Nous testerons également quelques invites compressées avec le modèle GPT-3.5-Turbo-0125.
Tout d'abord, nous devons installer tous les modules requis. Nous devons installer une bibliothèque sélective-contexte à l'aide de PIP:
pip install selective-context
Nous devons également télécharger le modèle EN_CORE_WEB_SM depuis Spacy, cela peut être fait avec la commande suivante:
pip install selective-context
Maintenant, nous devons initialiser l'objet SelectIveConText. Nous pouvons choisir Curie ou GPT-2 pour le modèle et EN ou ZH pour la langue. J'utiliserai GPT-2 pour cet exemple.
python -m spacy download en_core_web_sm
Ensuite, nous pouvons appeler notre objet SelectIveContext sur la chaîne de texte que nous voulons compresser. Nous pouvons définir les paramètres de réduction_ratio et de réduction. Reduce_Level doit être l’une des éléments suivants: «envoyé», «phrase» ou «jeton». L'appel d'objet renvoie un tuple (contexte, réduit_content), où le contexte est l'invite compressée et réduit_content est une liste de phrases, de phrases ou de jetons supprimés.
sc = SelectiveContext(model_type = ‘gpt-2’, lang = ‘en’)
Faisons maintenant quelques exemples. Je vais demander au modèle GPT-3.5-Turbo-0125 de résumer la section «quand devrions-nous utiliser la compression rapide» de cet article. Ensuite, nous comprimerons la section avec un taux de compression de 0,5 en utilisant les trois niveaux de réduction: phrase, phrase et jeton. Nous demanderons au modèle de résumer à nouveau les versions compressées et de comparer le nombre de jetons de chaque invite et la sortie du modèle.
Ci-dessous, vous pouvez voir l'appel API que j'utiliserai - nous allons simplement modifier la variable de texte dans la chaîne de format. Tout d'abord, nous demandons au modèle de résumer le paragraphe original et non compressé:
context, reduced_content = sc(text, reduce_ratio = 0.5, reduce_level = ‘sent’)
En vérifiant l'achèvement. USAGE, nous pouvons voir que l'invite d'origine est de 304 jetons de longueur, et voici la sortie:
from openai import OpenAI client = OpenAI(api_key = key) completion = client.chat.completions.create( model = “gpt-3.5-turbo-0125”, messages = [ {“role”: “user”, “content”: f”Summarize the following paragraph:\n {text}”} ] )
Comme vous pouvez le voir, le modèle a assez bien résumé le paragraphe non compressé.
Essayons maintenant la version réduite à jeton. Le paragraphe comprimé ressemble à ceci:
[Prompt compression is useful in scenarios such as advanced prompt engineering techniques and retrieval-augmented generation pipelines to reduce token counts and costs while preserving effectiveness and context. However, it is not a universal solution and should be used judiciously, as excessive compression can lead to a loss of important details. It is important to strike a balance between reducing size and maintaining the prompt's meaning.]
L'invite est de 162 jetons de long, et voici le résumé du modèle:
[When Should Prompt CompProm compression particularly following Advanced prompt engineering Techniques like chainofthought prompting while highly lengthy prompts reach thousands tokensThis increases processing costs and may exceed token limits of certain modelsProm compression mit these token count while prompt effectivenessRetri-au generationRAG pipelines R combine information retrieval text specialized chat contextual understandingThese pipelines frequently involve providing extensive conversation histories retrieved as prompts leading high token counts increased expensesProm compression essential such essential context while costsApplic prompt compression It prompt universal judFor instance assistant models like ChatGPT designed convers contexts benefit aggressive prompt compressionThese models often do charge per token integrated chat summar memory features conversation history effectively compression redundantIt even working models charge per token excessive compression could nuance importantSt reducing size maintaining prompt’s meaning is]
Le paragraphe n'est pas résumé correctement. La nuance à propos de Chatgpt ne bénéficiant pas d'une compression agressive a été perdue.
Ensuite, essayons la réduction au niveau de la phrase. L'invite réduite est de 129 jetons de long:
[Prompt compression is recommended following advanced prompt engineering techniques like chain of thought prompting, especially when dealing with lengthy prompts that reach thousands of tokens. This helps reduce processing costs and ensure that the prompt remains effective for models like RAG pipelines, which involve extensive conversation histories. Prompt compression is essential for maintaining context while keeping costs low, particularly for models like ChatGPT that charge per token and benefit from aggressive compression. However, excessive compression could lead to loss of important nuances, so it is important to strike a balance between reducing size and maintaining the prompt's meaning.]
Voici le résumé du modèle:
[When Should We Use Prompt Compression? This increases processing times and costs and may exceed token limits of certain models. These pipelines frequently involve providing extensive conversation histories or retrieved documents as prompts, leading to high token counts and increased expenses. Prompt compression is essential in such cases to maintain essential context while minimizing costs. For instance, assistant models like ChatGPT, designed for conversational contexts, may not benefit from aggressive prompt compression. These models often do not charge per token and have integrated chat summarization and memory features to manage conversation history effectively, making compression redundant. ]
Ce résumé ne contient aucune erreur mais il manque la discussion de chiffon.
Enfin, testons la réduction au niveau de la phrase. L'invite est de 183 jetons de long:
[Prompt compression is necessary when processing times, costs, and token limits may be exceeded in pipelines involving extensive conversation histories or retrieved documents as prompts. However, for certain models like ChatGPT, designed for conversational contexts, aggressive prompt compression may not be beneficial as they already have features to manage conversation history effectively without the need for compression.]
Voici le résumé du modèle:
[When Should Prompt Compression Prompt compression particularly beneficial Advanced prompt engineering techniques Techniques like chainofthought prompting while highly lengthy prompts reach thousands tokens This increases processing costs and may exceed token limits of certain models Prompt compression these issues token count while the prompt's effectiveness Retrieval-augmented generation (RAG) pipelines RAG pipelines combine information retrieval text generation specialized chatbots contextual understanding These pipelines frequently involve providing extensive conversation histories or retrieved as prompts leading high token counts increased expenses Prompt compression essential such cases to maintain essential context while costs Applicability prompt compression It's For instance assistant models like ChatGPT designed conversational contexts may benefit aggressive prompt compression These models often do charge per token have integrated chat summarization memory features manage conversation history effectively making compression redundant It even working models charge per token excessive compression could nuance important details reducing size maintaining the prompt’s meaning is ]
Le résumé est principalement correct et cohérent. Cependant, il comprend à tort que la partie de Chatgpt bénéficiant d'une compression rapide agressive.
En comparant le nombre de jetons et le contenu des résumés du modèle à différents niveaux de compression, nous pouvons voir l'impact de la compression rapide sur la sortie du modèle:
Niveau de compression |
Compte de jetons (original est de 304 longs) |
Précision |
Token-Level |
162 |
perdu des nuances importantes à propos de chatgpt ne bénéficiant pas d'une compression agressive et a fait des erreurs. |
au niveau de la phrase |
129 |
n'a fait aucune erreur, mais a raté un contexte sur les pipelines de chiffon. |
au niveau de la phrase |
183 |
similaire au niveau des jetons, a indiqué à tort que Chatgpt bénéficie d'une compression agressive. |
Dans l'ensemble, la compression rapide peut réduire considérablement le nombre de jetons tout en préservant les idées principales. Cependant, il est essentiel de trouver un équilibre pour éviter de perdre des nuances et un contexte importants.
Cet exercice met en évidence la nécessité de choisir soigneusement le niveau de compression en fonction de l'application spécifique et de la criticité du maintien de certains détails dans l'invite.
Il convient de noter que nous avons effectué toutes les expériences avec un taux de compression de 0,5, ce qui est relativement élevé. Vous voudrez peut-être expérimenter divers taux de compression pour différents cas d'utilisation afin de trouver l'équilibre optimal entre la réduction de la taille de l'invite et le maintien de son intégrité.
La compression rapide est une technique puissante pour optimiser l'efficacité et la rentabilité des LLM. Nous avons exploré ses principes fondamentaux, discutant de son importance, de diverses techniques et des détails de mise en œuvre.
Alors que le domaine de l'IA génératif continue d'évoluer, se tenir au courant des derniers développements est crucial. Pour améliorer davantage vos compétences et votre compréhension de la compression rapide et des techniques connexes, je vous encourage à explorer les articles référencés dans cet article, ainsi que les articles de blog complets suivants et les cours de Datacamp:
La compression rapide est une technique utilisée pour optimiser les entrées données aux grands modèles de langage (LLMS) en réduisant leur longueur tout en conservant la qualité et la pertinence de la sortie. Il est important car il aide à rester dans les limites des jetons, réduit le temps et les coûts de traitement.
Les défis communs incluent le maintien de l'équilibre entre la compression et la préservation des informations essentielles, la gestion des types de données d'entrée et la garantie de la compression de l'invite compressée. De plus, la mise en œuvre d'approches basées sur l'apprentissage en machine et hybrides peut être à forte intensité de ressources et complexe.
Pour les conversations multi-tours, la compression rapide doit s'assurer que le contexte des interactions précédentes est conservé. Des techniques telles que le filtrage de contexte sélectif peuvent aider à conserver des parties critiques de la conversation tout en compressant des informations moins importantes. Cette approche aide à maintenir la continuité et la pertinence dans les réponses du chatbot.
pour améliorer davantage vos compétences, explorer les documents de recherche référencés, les articles de blog et les cours de Datacamp mentionnés dans l'article. Les sujets incluent la compréhension de l'ingénierie rapide, le réglage rapide et la génération (RAG) (RAG) (RAG), qui sont tous cruciaux pour maîtriser la compression rapide. Assurez-vous également de pratiquer les techniques que vous avez apprises.
Oui, les considérations éthiques incluent la compression ou la compression n'introduisant pas les biais ou omet des informations critiques qui peuvent entraîner des tristes ou des résultats préjudiciables. De plus, des techniques de compression rapides pourraient également jailbreaker par inadvertance le modèle, ce qui le fait se comporter de manière imprévisible ou générer un contenu inapproprié. Il est important de surveiller les effets de la compression rapide sur les performances et les sorties du modèle, en particulier dans les applications sensibles telles que les soins de santé, les finances ou les conseils juridiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!