Eine Einführung in die praktische Constraint-Dekodierung


Eine Einführung in die praktische Constraint-Dekodierung

# Einführung

Praktische Einschränkungsdekodierungauch bekannt als strukturierte Generierung oder geführte Dekodierung, umfasst die technischen Strategien, um ein großes Sprachmodell (LLM) zu zwingen, Textausgaben zu generieren, die sich strikt an ein bestimmtes Datenschema, eine bestimmte Grammatik oder einen regulären Ausdruck (Regex) halten Token-Auswahl Bühne.

Mit der Einführung in die praktische Dekodierung von Einschränkungen in diesem Artikel müssen Sie Ihr Modell nicht mehr anflehen, „gültiges JSON ohne Einbeziehung von Markdown auszugeben“, um nur ein Beispiel zu nennen. Durch die Einschränkungsdekodierung ist es dem LLM mathematisch unmöglich, etwas außerhalb der definierten Einschränkungen zu liefern.

# Wie funktioniert die praktische Constraint-Dekodierung?

Während der typische LLM-Generierungsprozess als „Akt des Vertrauens“ funktioniert, bei dem Sie eine Eingabeaufforderung an das Modell übergeben und es möglicherweise genau das ausgibt, was Sie suchen (oder auch nicht), verfolgt die praktische Dekodierung von Einschränkungen einen subtil unterschiedlichen Ansatz. Es betrachtet die Eingabeaufforderung und die Textgenerierung als ein einzigartiges, verschachteltes Programm. Dadurch ist es möglich, bestimmte Zeichen zu sperren, die für die Aufrechterhaltung einer bestimmten erforderlichen Syntax wichtig sind, sodass das Modell die Lücken dazwischen „ausfüllen“ kann.

Sollen wir etwas detaillierter darauf eingehen? Wenn ein LLM das nächste Token seiner Antwort ausgibt, erzeugt es zunächst einen Vektor mit Rohwerten oder Protokolle – eines für jedes mögliche Token im vorliegenden Vokabular. Dabei stehen in der Regel Tausende möglicher Optionen zur Auswahl.

Bei der praktischen Dekodierung von Einschränkungen geschieht jedoch etwas früher, bevor der Inferenzprozess beginnt: Es entsteht eine endliche Zustandsmaschinewobei eine Zielbeschränkung kompiliert wird – zum Beispiel durch ein Pydantic-Modell in Python. Bei einem bestimmten Inferenzschritt wertet der Finite-State-Automat den aktuellen Zustand aus und stellt einen bereit Liste der zulässigen nächsten Token. Diese „weiße Liste“ ist Wird als Maske für den Roh-Logits-Vektor des LLM verwendetso dass für jedes Token außerhalb dieser Liste sein Logit auf destructive Unendlichkeit gesetzt wird, d. h -inf in Python.

Nach dem Maskierungsprozess führt das Modell seinen Softmax-Normalisierungs- und Sampling-Prozess wie gewohnt (basierend auf Parametern wie Temperatur, High-P oder High-Okay) für die „überlebenden Token“ aus, um schließlich den wahrscheinlichsten auszuwählen und zu generieren.

Es magazine so klingen, als würde die Anwendung dieses Prozesses auf ein gesamtes Vokabular, das viele tausend Wörter umfasst, die Modellinferenz erheblich verlangsamen. Die gute Nachricht: Das ist nicht der Fall. Moderne Python-Bibliotheken machen sich den statischen Wortschatz des LLM zunutze und kompilieren ihn vor, bevor der Benutzer mit der Eingabe seiner Eingabeaufforderung beginnt. Die Zustandsmaschine muss nicht das gesamte Vokabular nachschlagen, und der Latenzaufwand wird drastisch reduziert.

Was ist additionally der aktuelle Goldstandard für die praktische Umsetzung der Constraint-Dekodierung? Wohl das Umrisse Die Bibliothek hat sich diese Auszeichnung verdient. Es ermöglicht uns, Pydantic-Modelle, JSON-Schemas oder Regex direkt zu definieren und an eine verpackte Model eines vorab trainierten Modells zu übergeben, wodurch dessen Freiheit bei der Generierung von Ausgaben eingeschränkt wird.

# Beispiel

Lassen Sie uns ein Beispiel durchgehen. Installieren Sie zunächst die Umrisse:

pip set up outlines(transformers)

Nun zum Code:



from pydantic import BaseModel
import outlines
from transformers import AutoTokenizer, AutoModelForCausalLM

class UserProfile(BaseModel):
    title: 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)

mannequin = outlines.from_transformers(llm, tokenizer)
outcome = mannequin("Extract the consumer: John is a 34 yr outdated pilot.", UserProfile)

print(outcome)

Ausgabe:

{"title": "John", "age": 34, "is_active": true}

In diesem Beispiel wurde gezeigt, wie Sie mithilfe der Outlines-Bibliothek ein vorab trainiertes Modell zusammen mit seinem Tokenizer umschließen und es auf die Ausgabe von JSON-Objekten beschränken, die durch die von uns definierte benutzerdefinierte Klasse namens „named“ definiert sind UserProfile und Pydantics erben BaseModel.

# Zusammenfassung

Die praktische Decodierung von Einschränkungen bringt eine Reihe von Kompromissen mit sich. Schauen wir uns einige davon an.

Stärken:

  • Bei korrekter Verwendung bietet es eine 100-prozentige Garantie für die korrekte Syntax und macht das Parsen von Blöcken in Ihrem Code überflüssig.
  • Es trägt dazu bei, Tokens in Ihren Eingabeaufforderungen drastisch einzusparen, sodass keine Token-verbrauchenden Fence-Shot-Beispiele mehr erforderlich sind, um dem Modell beispielsweise zu zeigen, wie ein korrektes JSON-Objekt aussehen sollte.
  • Es trägt zur Demokratisierung kleiner Modelle bei und verwandelt ein „winziges“ 1B-Parameter-Modell, das sonst Anwendungsfälle der JSON-Generierung gefährden würde, in einen unfehlbaren Datenkonstruktor.

Einschränkungen:

  • Wenn der LLM mitteilen muss, dass er etwas nicht beantworten kann, das Schema ihn jedoch beispielsweise dazu zwingt, eine Ganzzahl auszugeben, wird er dies tun, sodass er in Grenzfällen nicht mehr ehrlich ist.
  • Beim ersten Durchlauf eines Pydantic-Schemas gegen ein LLM kann es zu einer Verzögerung von einigen Sekunden kommen, um die Finite-State-Maschine aufzubauen, wodurch der erste Durchlauf erheblich langsamer wird – nachfolgende Durchläufe werden jedoch reibungsloser ablaufen.

Dieser Artikel stellt die praktische Dekodierung von Einschränkungen vor und enthüllt, warum sie in bestimmten LLM-gesteuerten Situationen notwendig ist, wie sie funktioniert und welche Lösung in der aktuellen Landschaft am weitesten verbreitet ist: die Define-Bibliothek. Ein Anwendungsbeispiel wird ebenfalls bereitgestellt.

Iván Palomares Carrascosa ist ein führender Autor, Redner und Berater in den Bereichen KI, maschinelles Lernen, Deep Studying und LLMs. Er schult und leitet andere darin, KI in der realen Welt zu nutzen.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert