Nachdem ich rohe LLM -Workflows für strukturierte Extraktionsaufgaben entwickelt habe, habe ich im Laufe der Zeit mehrere Fallstricke beobachtet. In einem meiner Projekte entwickelte ich zwei unabhängige Workflows mit Grok und Openai, um zu sehen, welche für die strukturierte Extraktion besser abschnitten. Dies battle, als ich bemerkte, dass beide Fakten an zufälligen Stellen wegließen. Darüber hinaus stimmten die extrahierten Felder nicht mit dem Schema überein.

Um diesen Problemen entgegenzuwirken, habe ich spezielle Bearbeitungs- und Validierungsprüfungen eingerichtet, mit denen das LLM das Dokument erneut besuchen kann (z. Mehrere Validierungsläufe veranlassten mich jedoch, meine API -Grenzen zu übertreffen. Darüber hinaus battle eine schnelle Feinabstimmung ein echter Engpass. Jedes Mal, wenn ich die Aufforderung modifizierte, um sicherzustellen, dass die LLM keine Tatsache verpasst hat, würde ein neues Downside eingeführt. Eine wichtige Einschränkung, die mir auffiel, battle, dass eine LLM zwar intestine für eine Reihe von Eingabeaufforderungen funktioniert hat, der andere jedoch nicht so intestine mit den gleichen Anweisungen abschneiden würde. Diese Probleme veranlassten mich, nach einer Orchestrierungs-Engine zu suchen, die meine Eingabeaufforderungen automatisch fein abteilen könnte, um den Aufforderungstil des LLM zu entsprechen, Faktenauslassungen zu verarbeiten und sicherzustellen, dass meine Ausgabe mit meinem Schema übereinstimmt.

Ich bin kürzlich auf Langextractrad gestoßen und ausprobiert. Die Bibliothek befasste sich mit mehreren Problemen, mit denen ich konfrontiert battle, insbesondere in Bezug auf die Schemaausrichtung und die Vollständigkeit der Tatsache. In diesem Artikel erkläre ich die Grundlagen von Langextract und wie es die rohen LLM -Workflows für strukturierte Extraktionsprobleme erweitern kann. Ich möchte auch meine Erfahrungen mit Langextract mit einem Beispiel teilen.

Warum Langextract?

Es ist eine bekannte Tatsache, dass Sie beim Einrichten eines rohen LLM -Workflows (beispielsweise mit OpenAI, um strukturierte Attribute von Ihrem Korpus zu sammeln), eine Chunking -Strategie festlegen, um die Nutzung der Token zu optimieren. Sie müssten auch eine spezielle Handhabung für fehlende Werte und Formatierungen hinzufügen. Wenn es um eine schnelle Technik geht, müssten Sie mit jeder Iteration Anweisungen zu Ihrer Eingabeaufforderung hinzufügen oder entfernen. In einem Versuch, die Ergebnisse zu optimieren und mit Diskrepanzen umzugehen.

Langextractrad hilft bei der effektiven Orchestrierung von Eingabeaufforderungen und Ausgängen zwischen dem Benutzer und dem LLM. Es hat die Eingabeaufforderung, bevor es an die LLM weitergeleitet wird. In Fällen, in denen der Eingangstext oder die Dokumente groß sind, stößt er die Daten ab und füttert sie dem LLM, wodurch sichergestellt wird, dass wir innerhalb der von jedem Modell vorgeschriebenen Token-Grenzen bleiben (z. B. ~ 8000 Token für GPT-4 gegenüber ~ 10000 Token in Claude). In Fällen, in denen die Geschwindigkeit von entscheidender Bedeutung ist, kann eine Parallelisierung eingerichtet werden. Wo Token -Grenzen eine Einschränkung sind, kann eine sequentielle Ausführung eingerichtet werden. Ich werde versuchen, die Arbeit von Langextract zusammen mit seinen Datenstrukturen im nächsten Abschnitt zu brechen.

Datenstrukturen und Workflow in Langextract

Im Folgenden finden Sie ein Diagramm, das die Datenstrukturen in Langextrakt und den Datenfluss aus dem Eingangsstrom zum Ausgangsstrom zeigt.

Eine Darstellung der von Langextract verwendeten Datenstrukturen
(Bild des Autors)

Langextract speichert Beispiele als Liste benutzerdefinierter Klassenobjekte. Jedes Beispielobjekt hat eine Eigenschaft namens „Textual content“, nämlich der Beispieltext aus einem Nachrichtenartikel. Eine andere Eigenschaft ist die ‚extraction_class‘, die Kategorie ist, die dem Information -Artikel der LLM während der Ausführung zugewiesen wird. Beispielsweise würde ein Nachrichtenartikel, der über einen Cloud -Anbieter spricht, unter „Cloud -Infrastruktur“ markiert. Die Eigenschaft ‚extraction_text‘ ist die Referenzausgabe, die Sie dem LLM bereitstellen. Diese Referenzausgabe leitet das LLM bei der Abschließung der nächsten Ausgabe, die Sie für einen ähnlichen Nachrichtenausschnitt erwarten würden. Die Eigenschaft ‚text_or_documents‘ speichert den tatsächlichen Datensatz, für den strukturierte Extraktion erforderlich ist (in meinem Beispiel sind die Eingabedokumente Nachrichtenartikel).

Es werden nur wenige Anweisungen zur Aufforderung an das LLM der Wahl (model_id) über Langextract gesendet. Die Funktion von Langextract ‚Core‘ Extract () “ setzt die Eingabeaufforderungen an und übergibt sie an die LLM, nachdem sie die Eingabeaufforderung in intern zu dem schnellen Stil des ausgewählten LLM entspricht und um Modelldiskrepanzen zu verhindern. Das LLM gibt dann das Ergebnis nacheinander (dh ein Dokument gleichzeitig) an langextract zurück, was wiederum das Ergebnis in einem Generatorobjekt ergibt. Das Generatorobjekt ähnelt einem transienten Strom, der den von der LLM extrahierten Wert ergibt. Eine Analogie für einen Generator, der ein vorübergehender Strom ist, wäre ein digitales Thermometer, das Ihnen die aktuelle Lesung bietet, aber keine Lesungen als zukünftige Referenz speichert. Wenn der Wert im Generatorobjekt nicht sofort erfasst wird, geht er verloren.

Beachten Sie, dass die Eigenschaften von ‚max_workers‘ und ‚extraction_pass‘ im Abschnitt „Greatest Practices bei der Verwendung von Langextract“ ausführlich erörtert wurden.

Nachdem wir festgestellt haben, wie Langextract funktioniert und die von ihm verwendeten Datenstrukturen, gehen wir mit dem Anwenden von Langextract in einem realen Szenario fort.

Eine praktische Implementierung von Langextract

Der Anwendungsfall umfasst Nachrichtenartikel aus der „techxplore.com RSS -Feeds“, die sich auf die Technologie -Geschäftsdomäne (https://techxplore.com/feeds/) bezieht. Wir verwenden FeedParser und Trifaltura zur URL -Parsen und Extraktion des Artikeltextes. Eingabeaufforderungen und Beispiele werden vom Benutzer erstellt und an langextract gespeist, wodurch die Orchestrierung durchgeführt wird, um sicherzustellen, dass die Eingabeaufforderung für das verwendete LLM abgestimmt ist. Das LLM verarbeitet die Daten basierend auf den Eingabeaufforderung an Anweisungen zusammen mit den angegebenen Beispielen und gibt die Daten an Langextractrad zurück. Langextract führt erneut die Nachbearbeitung durch, bevor die Ergebnisse dem Endbenutzer angezeigt werden. Im Folgenden finden Sie ein Diagramm, das zeigt, wie Daten aus der Eingangsquelle (RSS -Feeds) in Langextrakt und schließlich über die LLM strukturierte Extraktionen ergeben.

Im Folgenden finden Sie die Bibliotheken, die für diese Demonstration verwendet wurden.

Wir beginnen mit der Zuweisung der Tech Xplore RSS -Feed -URL einer Variablen ‚feed_url‘. Anschließend definieren wir eine „Schlüsselwörter“ -Liste, die Key phrases enthält, die sich auf Technologiegeschäft beziehen. Wir definieren drei Funktionen, um Nachrichtenartikel aus dem Newsfeed zu analysieren und zu kratzen. Die Funktion ‚get_article_urls ()‘ analysiert den RSS -Feed und ruft den Artikel -Titel und die einzelnen Artikel -URL (Hyperlink) ab. FeedParser wird verwendet, um dies zu erreichen. Die Funktion ‚extract_text ()‘ ‚verwendet Trifaltura, um den Artikeltext aus der einzelnen Artikel zu extrahieren, die von FeedParser zurückgegeben wird. Die Funktion ‚filter_articles_by_keywords‘ filtert die abgerufenen Artikel basierend auf der von uns definierten Schlüsselwörterliste.

Nach dem Ausführen des oben genannten erhalten wir die Ausgabe.
„Fanden 30 Artikel im RSS -Feed
Gefilterte Artikel: 15 „

Nachdem die Liste der „filtered_articles“ verfügbar ist, richten wir die Eingabeaufforderung ein. Hier geben wir Anweisungen, damit die LLM die Artwork von Nachrichtenersichten verstehen lässt, an denen wir interessiert sind. Wie im Abschnitt „Datenstrukturen und Workflow in Langextract“ erläutert, richten wir eine Liste benutzerdefinierter Klassen mit ‚Information. Extremptedata ()‘ ein, eine eingebaute Datenstruktur in Langextract. In diesem Fall verwenden wir nur wenige Schüsse, die aus mehreren Beispielen bestehen.

Wir initialisieren eine Liste namens „Ergebnisse“ und schalten dann den Korpus „filtered_articles“ durch und führen den Extraktionsartikel jeweils aus. Die LLM -Ausgabe ist in einem Generatorobjekt erhältlich. Wie bereits erwähnt, wird der Ausgangswert im ‚result_generator‘ als vorübergehender Stream sofort an die Liste der Ergebnisse angehängt. Die ‚Ergebnisse‘ Variable ist eine Liste mit kommentierten Dokumenten.

Wir iterieren die Ergebnisse in einem ‚for Loop‘, um jedes kommentierte Dokument in eine JSONL -Datei zu schreiben. Dies ist zwar ein optionaler Schritt, kann bei Bedarf für die Prüfung einzelner Dokumente verwendet werden. Erwähnenswert ist, dass die offizielle Dokumentation von Langextract ein Dienstprogramm zur Visualisierung dieser Dokumente bietet.

Wir durchlaufen die Liste der „Ergebnisse“, um jede Extraktion von einem kommentierten Dokument einzeln zu sammeln. Eine Extraktion ist nichts anderes als eine oder mehrere Attribute, die uns im Schema angefordert haben. Alle diese Extraktionen werden in der Liste „All_extractions“ gespeichert. Diese Liste ist eine abgeflachte Liste aller Extraktionen des Formulars (Extraktion_1, Extraktion_2, Extraktion_N).

Wir erhalten 55 Extraktionen aus den 15 Artikeln, die zuvor gesammelt wurden.

Der letzte Schritt beinhaltet die Iterierung der Liste „All_extractions“, um jede Extraktion zu sammeln. Das Extraktionsobjekt ist eine benutzerdefinierte Datenstruktur innerhalb von Langextract. Die Attribute stammen aus jedem Extraktionsobjekt. In diesem Fall sind Attribute Wörterbuchobjekte, die den metrischen Namen und den Wert haben. Die Attribute/Metriknamen stimmen mit dem von uns ursprünglich als Teil der Eingabeaufforderung angeforderten Schema überein (siehe die Liste „Attribute“ -Dictionary -Beispiele im Objekt „Information.extraction“). Die endgültigen Ergebnisse werden in einem Datenrahmen verfügbar gemacht, der zur weiteren Analyse verwendet werden kann.

Nachfolgend finden Sie die Ausgabe, die die ersten fünf Zeilen des DataFrame angezeigt –

Greatest Practices für die effektive Verwendung von Langextracting

Wenige Schüsse Aufforderung

Langextract ist so konzipiert, dass er mit einem One-Shot- oder wenigen Schuss-Aufforderungsstruktur funktioniert. Bei wenigen Aufformen müssen Sie eine Eingabeaufforderung und einige Beispiele geben, die die Ausgabe erklären, die Sie erwarten, dass der LLM nachgibt. Dieser Aufforderungstil ist besonders nützlich in komplexen, multidisziplinären Bereichen wie Handel und Export, in denen Daten und Terminologie in einem Sektor stark von denen des anderen unterscheiden können. Hier ist ein Beispiel – ein Nachrichtenausschnitt lautet: „Der Wert von Gold wurde mit X“ und ein weiterer Snippet lautet: „Der Wert einer bestimmten Artwork von Halbleiter ging von Y. Obwohl beide Ausschnitte „Wert“ sagen, bedeuten sie sehr unterschiedliche Dinge. Wenn es um Edelmetalle wie Gold geht, basiert der Wert auf dem Marktpreis professional Einheit, während dies bei Halbleitern die Marktgröße oder den strategischen Wert bedeuten kann. Durch die Bereitstellung domänenspezifischer Beispiele können die LLM dazu beitragen, die Metriken mit der Nuance zu holen, die der Area verlangt. Je mehr die Beispiele desto besser. Ein breites Beispiel -Set kann sowohl das LLM -Modell als auch Langextract dabei helfen, sich an verschiedene Schreibstile (in Artikeln) anzupassen und Missen in der Extraktion zu vermeiden.

Multi-Extraktionspass

Ein Multi-Extraktionspass ist der Akt, dass der LLM den Eingabedatensatz mehr als einmal überprüft hat, um die in Ihrer Ausgabe am Ende des ersten Go fehlenden Particulars auszufüllen. Langextract führt das LLM, um den Datensatz (Eingabe) mehrmals zu überdenken, indem die Eingabeaufforderung während jedes Laufs fein abfasst. Es verwaltet die Ausgabe auch effektiv, indem es die Zwischenausgaben aus den ersten und nachfolgenden Läufen verschmelzen. Die Anzahl der Durchgänge, die hinzugefügt werden müssen, wird unter Verwendung des Parameters ‚extraction_passes‘ im Extract () -Modul bereitgestellt. Obwohl ein Extraktionspass von ‚1‘ hier funktionieren würde, hilft alles, was über ‚2‘ hinausging, eine Ausgabe, die fein abgestimmt und mit der Eingabeaufforderung und dem bereitgestellten Schema ausgerichtet ist. Darüber hinaus stellt ein Multi-Extraktionspass von 2 oder mehr sicher, dass das Ausgabebericht mit dem Schema und den Attributen, die Sie in Ihrer schnellen Beschreibung angegeben haben, entspricht.

Parallelisierung

Wenn Sie große Dokumente haben, die möglicherweise die zulässige Anzahl von Token professional Anfrage konsumieren können, ist es excellent, einen sequentiellen Extraktionsprozess zu erhalten. Ein sequentieller Extraktionsprozess kann aktiviert werden, indem MAX_WORKERS = 1 festgelegt wird. Dies führt dazu, dass Langextract die LLM dazu zwingt, die Eingabeaufforderung auf sequentielle Weise zu verarbeiten, ein Dokument jeweils. Wenn die Geschwindigkeit der Schlüssel ist, kann eine Parallelisierung aktiviert werden, indem max_worker = 2 oder mehr festgelegt wird. Dies stellt sicher, dass für den Extraktionsprozess mehrere Themen verfügbar werden. Darüber hinaus kann das modul für time.sleep () verwendet werden, wenn eine sequentielle Ausführung durchgeführt wird, um sicherzustellen, dass die Anforderungsquoten von LLMs nicht überschritten werden.

Sowohl die Parallelisierung als auch der Multi-Extraktionspass können wie unten festgelegt werden-

Schließende Bemerkungen

In diesem Artikel haben wir gelernt, wie man Langextract für strukturierte Extraktionswendungsfälle verwendet. Inzwischen sollte klar sein, dass ein Orchestrator wie Langextract für Ihr LLM bei der schnellen Feinabstimmung, des Datenbörsens, der Ausrichtung der Ausgabe und der Ausrichtung von Schema helfen kann. Wir haben auch gesehen, wie Langextract intern funktioniert, indem wir nur wenige Schussanforderungen für die ausgewählte LLM verarbeiten und die Rohausgabe vom LLM zu einer schema-ausgerichteten Struktur analysieren.

Von admin

Schreibe einen Kommentar

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