paint-brush
Effiziente geführte Generierung für große Sprachmodelle: Zusammenfassung und Einführungvon@textmodels

Effiziente geführte Generierung für große Sprachmodelle: Zusammenfassung und Einführung

Zu lang; Lesen

Forscher schlagen ein Finite-State-Machine-Framework zur Textgenerierung vor, das präzise Steuerung und verbesserte Leistung bietet.
featured image - Effiziente geführte Generierung für große Sprachmodelle: Zusammenfassung und Einführung
Writings, Papers and Blogs on Text Models HackerNoon profile picture
0-item

Autor:

(1) Brandon T. Willard, Normal Computing;

(2) R´emi Louf, Normal Computing.

Linktabelle

Abstrakt

In diesem Artikel zeigen wir, wie das Problem der neuronalen Textgenerierung konstruktiv in Form von Übergängen zwischen den Zuständen einer Finite-State-Maschine umformuliert werden kann. Dieses Framework führt zu einem effizienten Ansatz zur Steuerung der Textgenerierung mit regulären Ausdrücken und kontextfreien Grammatiken, indem es die Konstruktion eines Index über das Vokabular eines Sprachmodells ermöglicht. Der Ansatz ist modellagnostisch, ermöglicht die Durchsetzung domänenspezifischer Kenntnisse und Einschränkungen und ermöglicht die Konstruktion zuverlässiger Schnittstellen, indem er die Struktur des generierten Textes garantiert. Er fügt dem Prozess der Token-Sequenzgenerierung nur wenig Overhead hinzu und übertrifft bestehende Lösungen deutlich. Eine Implementierung wird in der Open-Source-Python-Bibliothek Outlines [Louf und Willard] bereitgestellt.

1. Einleitung

Wir beschäftigen uns mit dem Problem der Generierung von Token-Sequenzen aus einem großen Sprachmodell (LLM) [Vaswani et al., 2017, Radford et al., 2019], die regulären Ausdrücken oder kontextfreien Grammatiken (CFGs) entsprechen. Diese Art der geführten LLM-Generierung wird verwendet, um die Ausgabe des LLM-Modells unter starren Formatierungsanforderungen nutzbar zu machen, die allein durch Feinabstimmung entweder schwer oder kostspielig zu erfassen sind [Beurer-Kellner et al., 2023, Scholak et al., 2021, Poesia et al., 2022a, Rabinovich et al., 2017, Weng, 2021, Dong et al., 2023, Poesia et al., 2022b, Geng et al., 2023, Wang et al., 2023]. Solche Funktionen wurden kürzlich in Eingabeaufforderungsbibliotheken und -schnittstellen verallgemeinert [Microsoft, 2023, Beurer-Kellner et al., 2023, Rickard, 2023a,b], aber ihre Anwendbarkeit kann durch ihre Skalierungskosten begrenzt sein.


Die meisten Implementierungen der geführten Generierung verzerren die Score-Werte, die zur Bestimmung der Wahrscheinlichkeiten der Token im Vokabular eines LLM verwendet werden. Ein gängiger und ausreichender Ansatz umfasst wiederholte Auswertungen des gesamten Vokabulars, um zu bestimmen, welche Token gültig sind – entsprechend den Einschränkungen und zuvor abgetasteten Token – und die Wahrscheinlichkeiten ungültiger Token auf Null zu setzen. Dieser Ansatz bringt feste O(N)-Kosten für jedes generierte Token mit sich, wobei N die Größe des Vokabulars des LLM ist.


Wir schlagen einen Ansatz vor, der die Formulierung von regulären Ausdrücken als Finite-State-Machine (FSM) verwendet, um die geführte Generierung beliebig zu starten und zu stoppen und die Konstruktion eines Indexes zu ermöglichen, mit dem der Satz von Token mit einer Wahrscheinlichkeit ungleich Null in jedem Schritt effizient abgerufen werden kann. Das Ergebnis ist ein Algorithmus, der im Durchschnitt O(1) kostet.


Im Fall regulärer Ausdrücke hat unser Ansatz die größte Ähnlichkeit mit Kuchnik et al. [2023], der eine Transducer-Formulierung verwendet, um FSMs zu erhalten, die über das Vokabular eines Sprachmodells definiert sind. Diese FSMs enthalten viele der gleichen Informationen und Skalierungsvorteile wie die hier beschriebenen Indizes. Unser Ansatz erfordert keine vollständige Transducer-Abstraktion und kann verwendet werden, um vorhandene, effiziente Bibliotheken für reguläre Ausdrücke einfacher zu erweitern, ohne die zugrunde liegenden Automaten und ihre Implementierungen zu ändern.


Noch wichtiger ist, dass unser Indexierungsansatz auch auf CFGs und LALR(1)-Parser erweitert werden kann, um eine effiziente, geführte Generierung gemäß gängigen Datenformaten und Programmiersprachen (z. B. JSON, Python, SQL usw.) zu ermöglichen. Der Übergang zum Parsing erfolgt durch Erweiterungen traditioneller LALR(1)-Parserkomponenten und -operationen, wodurch dieser Ansatz wiederum zur Erweiterung bestehender Parserimplementierungen verwendet werden kann.