In der sich schnell entwickelnden Landschaft der künstlichen Intelligenz geht es nicht nur darum, die Grenzen dessen zu überschreiten, sondern auch darum, Effizienz und Kosteneffizienz zu gewährleisten.
Eingehend -Komprimierung hat sich als wichtige Technik zur Verbesserung der Leistung dieser Modelle entwickelt und gleichzeitig die Rechenaufwendungen minimiert. Da neue Forschungen fast wöchentlich auftreten, ist das Aufstehen schwierig, aber die Grundlagen zu verstehen ist unerlässlich.
Dieser Artikel deckt die Grundlagen der sofortigen Komprimierung ab, erläutert, wann er verwendet werden soll, seine Bedeutung für die Reduzierung der Kosten in RAG-Pipelines und stellt Beispiele mit dem GPT-3,5-Turbo-0125-Modell über OpenAIs API an..
Wenn Sie mehr erfahren möchten, sehen Sie sich diesen Kurs unter promptem Engineering an.
Eingehendkomprimierung ist eine Technik, die in der natürlichen Sprachverarbeitung (NLP) verwendet wird, um die für LLMs angegebenen Eingaben zu optimieren, indem die Länge reduziert wird, ohne die Qualität und Relevanz des Ausgangs erheblich zu verändern. Diese Optimierung ist aufgrund der Auswirkungen der Anzahl der Token in Abfragen von entscheidender Bedeutung.
Token sind die grundlegenden Einheiten von Text LLMs, die je nach Tokenizer des Sprachmodells Wörter oder Unterwörter darstellen. Die Verringerung der Anzahl der Token in einer Eingabeaufforderung ist vorteilhaft und manchmal aus mehreren Gründen notwendig:
Wann sollten wir die Eingabeaufforderungkomprimierung verwenden?
Fortgeschrittene Eingabeaufforderungs -Engineering -Techniken
Eingabeaufforderung Die Komprimierung mindert diese Probleme, indem es die Token -Anzahl reduziert und gleichzeitig die Effektivität der Eingabeaufforderung beibehält.
Einheitliche Komprimierung ist in solchen Fällen von wesentlicher Bedeutung, um den wesentlichen Kontext aufrechtzuerhalten und die Kosten zu minimieren.
Es ist wichtig zu beachten, dass die sofortige Komprimierung keine universelle Lösung ist und mit Bedacht verwendet werden sollte. Beispielsweise profitieren Assistentenmodelle wie ChatGPT, die für Konversationskontexte entwickelt wurden, möglicherweise nicht von einer aggressiven schnellen Komprimierung.
Diese Modelle berechnen häufig nicht pro Token und haben die Chat -Zusammenfassung und Speicherfunktionen integriert, um den Gesprächsverlauf effektiv zu verwalten, wodurch die Komprimierung redundant wird.
Es ist auch wichtig zu beachten, dass selbst bei der Arbeit mit Modellen, die pro Token aufgeladen werden, eine übermäßige Komprimierung zu einem Nuance -Verlust oder wichtigen Details führen kann. Das richtige Gleichgewicht zwischen der Verringerung der Größe und der Aufrechterhaltung der Integrität der Bedeutung der Eingabeaufforderung ist der Schlüssel.
Eingehend -Komprimierungstechniken können in drei Hauptmethoden eingeteilt werden: Wissensdestillation, Codierung und Filterung. Jede Technik nutzt unterschiedliche Stärken, um die Länge und Effizienz von Eingabeaufforderungen für LLMs zu optimieren.
Während wir über jede dieser Techniken sprechen, finden Sie in diesem Artikel einen umfassenderen Ansatz: Effiziente Eingabemethoden für große Sprachmodelle: eine Umfrage. In diesem Artikel werde ich dieses Papier als "Vermessungspapier" bezeichnen.
Wissensdestillation ist eine Technik im Bereich des maschinellen Lernens, das zuerst von Hinton et al. (2015), wobei ein kleineres, einfacheres Modell (der Schüler) geschult wird, um das Verhalten eines größeren, komplexeren Modells (des Lehrers) zu replizieren.
Diese Technik wurde ursprünglich entwickelt, um die rechnerischen Herausforderungen der Schulung eines Ensemble von Modellen zu bewältigen. Im Kontext der schnellen Engineering kann die Wissensdestillation verwendet werden, um die Eingabeaufforderung anstelle des Modells zu komprimieren.
Dies wird erreicht, indem er lernt, wie man die harten Eingabeaufforderungen innerhalb von LLMs durch sanftes Einort -Tuning komprimiert. Ausführliche Erkenntnisse finden Sie in den Abschnitten 3.1 und Anhang A.1.1 des Vermessungspapiers.
Codierungsmethoden verwandeln Eingabetexte in Vektoren und reduzieren die Eingabeaufforderunglänge, ohne kritische Informationen zu verlieren. Diese Vektoren erfassen die wesentliche Bedeutung der Eingabeaufforderungen und ermöglichen es LLMs, kürzere Eingänge effizient zu verarbeiten. Interessanterweise sind LLMs in anderen Sprachen wie Base64 kompetent, die bei der Codierung verwendet werden können, um die Tokengröße der Eingabeaufforderung zu verringern. Zum Beispiel die Eingabeaufforderung "Übersetzen Sie den folgenden Text in Französisch: Hallo, wie geht es Ihnen?" In Base64 codiert ist „vhjhbnnyxrlihrozsbmb2xsb3dpbmcgdgv4dcb0Bgcmvuy2g6icdizwxsbyWgag93igfyzsb5b3unpw ==“. Sie können versuchen, Ihren Lieblings -LLM zu fordern, um es zu testen!
Überraschenderweise werden auch einige Codierungstechniken für den Modell Jailbreak verwendet, bei dem LLM manipuliert wird, um seine Sicherheitsmechanismen zu umgehen. Weitere Informationen zu Codierungsmethoden finden Sie in den Abschnitten 3.2 und Anhang A.1.2 des Vermessungspapiers.
Filterung
Filtertechniken bewerten den Informationsgehalt verschiedener Teile einer Eingabeaufforderung und entfernen redundanten Informationen, da nicht alle Informationen in der Eingabeaufforderung für LLMs von Vorteil sind. Dies kann auf verschiedenen Ebenen wie Sätzen, Phrasen oder Token erfolgen.
Ziel ist es, nur die relevantesten Teile der Eingabeaufforderung zu behalten. Im Papier selektiven Kontext von Li et al. (2023) verwenden Forscher Selbstinformationsmetriken, um redundante Informationen zu filtern. In dem Papier llmlingua: Komprimierungsanforderungen für beschleunigte Inferenz von Großsprachmodellen, rahmen Forscher von Microsoft die Eingabeaufforderungen in Schlüsselkomponenten ein und passen die Komprimierungsverhältnisse für jeden Teil dynamisch an. Weitere Informationen finden Sie unter den Abschnitten 3.3 und Anhang A.1.3 des Umfragepapiers.
So implementieren Sie die schnelle Komprimierung in Python
Es gibt auch andere Mainstream -Komprimierungstechniken wie Keep It Simple (KIS), SCLR und die Algorithmen der Familie Llmlingua, aber wir werden sie in diesem kurzen Artikel nicht abdecken.
App Link
In der Web -App für selektive Kontext können Sie die Sprache der Aufforderung auswählen, die Sie komprimieren möchten (Englisch oder vereinfachtes Chinesisch). Sie können das Komprimierungsverhältnis auch festlegen und auswählen, ob Sätze, Token oder Phasen herausfiltern.
Implementieren und Testen des selektiven Kontextes mit OpenAI API
Zunächst müssen wir alle erforderlichen Module installieren. Wir müssen die selektive Kontextbibliothek mit PIP installieren:
Wir müssen auch das Modell eN_core_web_sm aus Spacy herunterladen. Dies kann mit dem folgenden Befehl erfolgen:
pip install selective-context
pip install selective-context
Jetzt müssen wir das SelectiveContext -Objekt initialisieren. Wir können entweder Curie oder GPT-2 für das Modell und EN oder ZH für die Sprache auswählen. Ich werde GPT-2 für dieses Beispiel verwenden.
python -m spacy download en_core_web_sm
Als nächstes können wir unser selectiveContext -Objekt in der Textzeichenfolge aufrufen, die wir komprimieren möchten. Wir können die Parameter record_ratio und record_level festlegen. record_level muss einer der folgenden sein: "gesandt", "phrase" oder "token". Der Objektaufruf gibt ein (Kontext, reduziertes_Content) -Tupel zurück, wobei der Kontext die komprimierte Eingabeaufforderung und reduziertes Abbau ist, eine Liste entfernter Phrasen, Sätze oder Token.
sc = SelectiveContext(model_type = ‘gpt-2’, lang = ‘en’)
Lassen Sie uns jetzt einige Beispiele machen. Ich werde das GPT-3.5-Turbo-0125-Modell fragen, um den Abschnitt "Wann sollten wir die Eingabeaufforderungkomprimierung verwenden" aus diesem Artikel zusammenzufassen. Anschließend werden wir den Abschnitt mit einer Komprimierungsrate von 0,5 unter Verwendung aller drei Reduktionsniveaus komprimieren: Satz, Phrase und Token. Wir werden das Modell bitten, die komprimierten Versionen erneut zusammenzufassen und die Token -Anzahl jeder Eingabeaufforderung und die Ausgabe des Modells zu vergleichen.
unten sehen Sie den API -Aufruf, den ich verwenden werde - wir ändern einfach die Textvariable in der Formatzeichenfolge. Zunächst bitten wir das Modell, den ursprünglichen, unkomprimierten Absatz zusammenzufassen:
context, reduced_content = sc(text, reduce_ratio = 0.5, reduce_level = ‘sent’)
durch Überprüfung der Fertigstellung. Ausschnitt können wir sehen, dass die ursprüngliche Eingabeaufforderung 304 Token lang ist, und hier ist die Ausgabe:
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}”} ] )
Wie Sie sehen, hat das Modell den unkomprimierten Absatz recht gut zusammengefasst.
Versuchen wir nun die mit Token reduzierte Version. Der komprimierte Absatz sieht so aus:
[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.]
Die Eingabeaufforderung ist 162 Token lang, und hier ist die Modellzusammenfassung:
[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]
Der Absatz ist nicht korrekt zusammengefasst. Die Nuance über Chatgpt, die nicht von einer aggressiven Komprimierung profitiert, ging verloren.
Versuchen wir als nächstes die Reduzierung auf Satzebene. Die reduzierte Eingabeaufforderung ist 129 Token lang:
[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.]
Hier ist die Modellübersicht:
[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. ]
Diese Zusammenfassung enthält keine Fehler, sondern fehlt die Lag -Diskussion.
Testen wir schließlich die Reduktion auf Phrase-Ebene. Die Eingabeaufforderung ist 183 Token lang:
[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.]
Hier ist die Zusammenfassung des Modells:
[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 ]
Die Zusammenfassung ist meist korrekt und kohärent. Es versteht jedoch fälschlicherweise den Teil über Chatgpt, der von einer aggressiven schnellen Komprimierung profitiert.
Durch Vergleich der Token -Zahlen und des Inhalts der Zusammenfassungen des Modells in verschiedenen Komprimierungsstufen können wir die Auswirkungen der Eingabeaufforderung auf die Ausgabe des Modells sehen:
Komprimierungsebene |
Token Count (Original ist 304 lang) |
Genauigkeit |
Token-Level |
162 |
verloren wichtige Nuancen über Chatgpt, die nicht von aggressiver Komprimierung profitieren, und Fehler gemacht. |
Satzebene |
129 |
hat keine Fehler gemacht, sondern einen Kontext über Lag -Pipelines verpasst. |
Phrase-Level |
183 |
Ähnlich wie mit Token-Ebene erklärte fälschlicherweise, dass ChatGPT von einer aggressiven Komprimierung profitiert. |
Diese Übung zeigt die Notwendigkeit, die Komprimierungsstufe basierend auf der spezifischen Anwendung und der Kritikalität der Aufrechterhaltung bestimmter Details in der Eingabeaufforderung sorgfältig auszuwählen.
Es ist erwähnenswert, dass wir alle Experimente mit einer Komprimierungsrate von 0,5 durchgeführt haben, was relativ hoch ist. Möglicherweise möchten Sie mit verschiedenen Komprimierungsraten für verschiedene Anwendungsfälle experimentieren, um das optimale Gleichgewicht zwischen der Reduzierung der sofortigen Größe und der Aufrechterhaltung der Integrität zu finden.
Schlussfolgerung
Wenn sich das Feld der generativen KI weiterentwickelt, ist es entscheidend, sich über die neuesten Entwicklungen auf dem Laufenden zu halten. Um Ihre Fähigkeiten und Ihr Verständnis der sofortigen Komprimierung und verwandten Techniken weiter zu verbessern, ermutige ich Sie, die in diesem Artikel verwiesenen Artikel sowie die folgenden umfassenden Blog -Beiträge und -kurse aus DataCamp zu untersuchen:
Das obige ist der detaillierte Inhalt vonSchnellkomprimierung: Eine Anleitung mit Python -Beispielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!