„Mit diesem Leitfaden zur praktischen Einschränkung bei der Textgenerierung müssen Sie Ihr Modell nicht mehr darum bitten, ‚gültiges JSON ohne Markdown auszugeben‘.“
Praktische Einschränkung bei der Textgenerierung, auch bekannt als strukturierte Generierung oder geführte Dekodierung, umfasst technische Strategien, um ein großes Sprachmodell (LLM) dazu zu bringen, Texte zu erzeugen, die strikt einem festgelegten Datenschema, einer Grammatik oder einem regulären Ausdruck (Regex) entsprechen. Diese Methoden gewährleisten, dass das LLM mathematisch nicht in der Lage ist, Ausgaben außerhalb der definierten Einschränkungen zu liefern.
Funktionsweise der praktischen Einschränkung
Im Gegensatz zum typischen Generierungsprozess eines LLM, der oft als „Akt des Glaubens“ betrachtet wird, bei dem ein Prompt an das Modell übergeben wird und es möglicherweise genau das ausgibt, was gewünscht ist (oder auch nicht), verfolgt die praktische Einschränkung einen subtil anderen Ansatz. Sie betrachtet den Prompt und die Texterzeugung als ein einzigartiges, ineinandergreifendes Programm. Dies ermöglicht es, bestimmte Zeichen, die für die Aufrechterhaltung einer erforderlichen Syntax entscheidend sind, festzulegen, sodass das Modell die „Lücken“ dazwischen ausfüllen kann.
Wie funktioniert das genau? Wenn ein LLM das nächste Token seiner Antwort ausgibt, erzeugt es zunächst einen Vektor von Rohwerten oder Logits – einen für jedes mögliche Token im verfügbaren Vokabular. Dies umfasst typischerweise Tausende von Optionen.
Bei der praktischen Einschränkung geschieht jedoch etwas früher, bevor der Inferenzprozess beginnt: Eine endliche Zustandsmaschine wird erstellt, wobei eine Zielbeschränkung kompiliert wird – beispielsweise durch ein Pydantic-Modell in Python. In einem bestimmten Inferenzschritt bewertet die endliche Zustandsmaschine den aktuellen Zustand und liefert eine Liste der erlaubten nächsten Tokens. Diese „Whitelist“ wird als Maske auf den Rohlogits-Vektor des LLM angewendet, sodass für jedes Token außerhalb dieser Liste dessen Logit auf negative Unendlichkeit gesetzt wird, also -inf in Python.
Nach dem Maskierungsprozess führt das Modell seine Softmax-Normalisierung und den Sampling-Prozess wie gewohnt durch (basierend auf Parametern wie Temperatur, Top-p oder Top-k) auf den „überlebenden Tokens“, um schließlich das wahrscheinlichste auszuwählen und zu generieren.
Implementierung der praktischen Einschränkung
Was ist der aktuelle Goldstandard für die Implementierung der praktischen Einschränkung? Die outlines-Bibliothek hat sich diesen Ruf erworben. Sie ermöglicht es, Pydantic-Modelle, JSON-Schemas oder Regex direkt an eine umhüllte Version eines vortrainierten Modells zu übergeben, wodurch die Freiheit des Modells bei der Generierung von Ausgaben eingeschränkt wird. Um mehr über die Grundlagen dieser Technologien zu erfahren, können Sie die wesentlichen Konzepte für die Entwicklung von LLM-Systemen verstehen.
Beispiel
Ein Beispiel zur Veranschaulichung: Zuerst installieren Sie outlines:
pip install outlines[transformers]
Nun zum Code:
from pydantic import BaseModel
import outlines
from transformers import AutoTokenizer, AutoModelForCausalLM
class UserProfile(BaseModel):
name: str
age: int
is_active: bool
model_name = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
llm = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = outlines.from_transformers(llm, tokenizer)
result = model("Extract the user: John is a 34 year old pilot.", UserProfile)
print(result)
Die Ausgabe lautet:
{"name": "John", "age": 34, "is_active": true}
Dieses Beispiel zeigt, wie die outlines-Bibliothek verwendet wird, um ein vortrainiertes Modell zusammen mit seinem Tokenizer zu umhüllen und es dazu zu bringen, JSON-Objekte auszugeben, die durch die benutzerdefinierte Klasse definiert sind – in diesem Fall UserProfile, die von Pydantics BaseModel erbt. Für eine tiefere Einsicht in die Entwicklung von Konzepten können Sie auch die Evolution von Prompt Engineering zu Concept Engineering erkunden.
Fazit
Die praktische Einschränkung bei der Textgenerierung bringt eine Reihe von Vor- und Nachteilen mit sich. Zu den Stärken gehören:
- Bei korrekter Anwendung bietet sie eine 100%ige Garantie für die korrekte Syntax, wodurch die Notwendigkeit entfällt, Codeblöcke zu parsen.
- Sie spart erheblich Tokens in Ihren Prompts, da keine tokenintensiven Few-Shot-Beispiele mehr erforderlich sind, um dem Modell zu zeigen, wie ein korrektes JSON-Objekt aussehen sollte.
- Sie trägt zur Demokratisierung kleiner Modelle bei, indem sie ein „kleines“ Modell mit 1 Milliarde Parametern, das andernfalls die Nutzung von JSON-Generierungsanwendungen gefährden würde, in einen unfehlbaren Datenkonstruktor verwandelt.
Zu den Einschränkungen zählen:
- Wenn das LLM angeben müsste, dass es auf etwas nicht antworten kann, das Schema es jedoch zwingt, eine Ganzzahl auszugeben, wird es dies tun, was in Grenzfällen nicht mehr ehrlich ist.
- Bei der ersten Ausführung eines Pydantic-Schemas gegen ein LLM kann es zu einer Verzögerung von einigen Sekunden kommen, um die endliche Zustandsmaschine zu erstellen, was die erste Ausführung erheblich verlangsamt – obwohl nachfolgende Ausführungen reibungsloser verlaufen.
Dieser Artikel führt in die praktische Einschränkung bei der Textgenerierung ein und erläutert, warum sie in bestimmten LLM-gesteuerten Situationen notwendig ist, wie sie funktioniert und welche Lösung derzeit am weitesten verbreitet ist: die outlines-Bibliothek. Ein Beispiel für ihre Anwendung wurde ebenfalls bereitgestellt.
Iván Palomares Carrascosa ist ein führender Experte, Autor, Redner und Berater in den Bereichen KI, maschinelles Lernen, Deep Learning und LLMs. Er schult und berät andere darin, KI in der realen Welt zu nutzen.
„`
Quellen: kdnuggets
Bildquelle: KI generiert
🚀