paint-brush
Auf See unterwegs: Entwicklung produktionsreifer RAG-Anwendungen mit Data Lakesvon@minio
5,672 Lesungen
5,672 Lesungen

Auf See unterwegs: Entwicklung produktionsreifer RAG-Anwendungen mit Data Lakes

von MinIO13m2024/06/14
Read on Terminal Reader
Read this story w/o Javascript

Zu lang; Lesen

Mitte 2024 kann es einfach sein, eine KI-Demo zu erstellen, die beeindruckt und begeistert. Sie können oft an einem Nachmittag einen maßgeschneiderten KI-Bot erstellen. Die Produktion zu erreichen, ist jedoch eine andere Sache. Sie benötigen ein zuverlässiges, beobachtbares, anpassbares und leistungsfähiges System.

People Mentioned

Mention Thumbnail
Mention Thumbnail

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Auf See unterwegs: Entwicklung produktionsreifer RAG-Anwendungen mit Data Lakes
MinIO HackerNoon profile picture


Mitte 2024 kann es einfach sein, eine KI-Demo zu erstellen, die beeindruckt und begeistert. Mit einem starken Entwickler, einigen cleveren Experimenten und einigen API-Aufrufen an ein leistungsstarkes Basismodell können Sie oft an einem Nachmittag einen maßgeschneiderten KI-Bot erstellen. Fügen Sie eine Bibliothek wie hinzu langchain oder Abonnieren Ihren LLM mithilfe von RAG um einige benutzerdefinierte Daten zu erweitern – und aus der Arbeit eines Nachmittags könnte ein Wochenendprojekt werden.


Die Produktion zu erreichen, ist allerdings eine andere Sache. Sie benötigen ein zuverlässiges, beobachtbares, anpassbares und leistungsfähiges System in großem Maßstab. Es ist wichtig, über konstruierte Demo-Szenarien hinauszugehen und die Reaktion Ihrer Anwendung auf ein breiteres Spektrum von Eingabeaufforderungen zu berücksichtigen, die das gesamte Spektrum des tatsächlichen Kundenverhaltens darstellen. Das LLM benötigt möglicherweise Zugriff auf einen umfangreichen Korpus domänenspezifischen Wissens, der in seinem vor dem Training erstellten Datensatz oft fehlt. Und schließlich müssen Halluzinationen erkannt, überwacht und gemildert werden, wenn Sie KI in einem Anwendungsfall anwenden, in dem es auf Genauigkeit ankommt.


Die Lösung all dieser Probleme mag zwar entmutigend erscheinen, wird aber leichter zu bewältigen, wenn Sie Ihre RAG-basierte Anwendung in ihre jeweiligen konzeptionellen Teile zerlegen und dann gezielt und iterativ vorgehen, um jeden Teil nach Bedarf zu verbessern. Dieser Beitrag wird Ihnen dabei helfen. Darin konzentrieren wir uns ausschließlich auf Techniken, die zum Erstellen einer RAG-Dokumentenverarbeitungspipeline verwendet werden, und nicht auf solche, die nachgelagert beim Abrufen auftreten. Auf diese Weise möchten wir Entwicklern generativer KI-Anwendungen helfen, sich besser auf den Weg vom Prototyp zur Produktion vorzubereiten.

Der moderne Datensee: Der Mittelpunkt der KI-Infrastruktur


Es wird oft gesagt, dass im Zeitalter der KI Daten Ihr Schutzgraben sind . Zu diesem Zweck erfordert die Erstellung einer produktionstauglichen RAG-Anwendung eine geeignete Dateninfrastruktur zum Speichern, Versionieren, Verarbeiten, Auswerten und Abfragen von Datenblöcken, aus denen Ihr proprietäres Korpus besteht. Da MinIO einen datenorientierten Ansatz für KI verfolgt, besteht unsere standardmäßige anfängliche Infrastrukturempfehlung für ein Projekt dieser Art darin, einen modernen Data Lake und eine Vektordatenbank einzurichten. Während im Laufe der Zeit möglicherweise andere Zusatztools eingebunden werden müssen, sind diese beiden Infrastruktureinheiten grundlegend. Sie dienen als Schwerpunkt für fast alle Aufgaben, die später bei der Einführung Ihrer RAG-Anwendung in die Produktion anfallen.


Eine moderne Data Lake Referenzarchitektur basierend auf MinIO finden Sie Hier . Ein Begleitpapier, das zeigt, wie diese Architektur alle KI/ML-Workloads unterstützt, ist Hier .


Eine RAG-Dokumentenverarbeitungspipeline, die Ihr benutzerdefiniertes Korpus schrittweise aktualisiert und es zum späteren Abruf in eine Vektordatenbank lädt (Abrufschritte nicht angezeigt).

RAG: Pipeline-Schritte dokumentieren

Auswertung

Ein wichtiger erster Schritt zum Erstellen einer produktionsreifen RAG-Anwendung ist die Einrichtung eines Evaluierungsrahmens – oft einfach als Evaluierungen bezeichnet. Ohne Evaluierungen können Sie nicht zuverlässig verstehen, wie gut Ihr System funktioniert, welche Komponenten optimiert werden müssen oder ob Sie echte Fortschritte machen. Darüber hinaus dienen Evaluierungen als zwingende Funktion zur Klärung des Problems, das Sie lösen möchten. Hier sind einige der gängigsten Evaluierungstechniken:


  • Heuristische codebasierte Auswertung – Programmgesteuertes Bewerten der Ausgabe mithilfe verschiedener Kennzahlen wie Anzahl der Ausgabetoken, Vorhandensein/Fehlen von Schlüsselwörtern, JSON-Gültigkeit usw. Diese können häufig mithilfe von regulären Ausdrücken und Assertion-Bibliotheken für herkömmliche Komponententests deterministisch ausgewertet werden.


  • Algorithmische codebasierte Auswertung – Bewertung der Ausgabe mithilfe einer Vielzahl bekannter Metriken der Datenwissenschaft. Wenn Sie beispielsweise die Eingabeaufforderung als Rankingproblem neu formulieren, können Sie beliebte Bewertungsfunktionen aus Empfehlungssystemen verwenden, wie z. B. den normalisierten diskontierten kumulativen Gewinn (NDCG) oder den mittleren reziproken Rang (MRR). Wenn eine Eingabeaufforderung hingegen als Klassifizierungsproblem formuliert werden kann, sind Präzision, Rückruf und F1-Score möglicherweise angemessen. Schließlich können Sie Kennzahlen wie BLEU, ROUGE und Semantic Answer Similarity (SAS) verwenden, um die semantische Ausgabe mit einer bekannten Grundwahrheit zu vergleichen.


  • Modellbasierte Bewertung - Verwenden Sie ein Modell, um die Ergebnisse eines anderen zu bewerten, wie im Beurteilung des LLM als Richter Papier. Diese Technik wird immer beliebter und ist viel kostengünstiger als menschliche Skalierung. In den Anfangsphasen der Entwicklung eines Projekts vom Prototyp zur Produktion kann es jedoch schwierig sein, sie zuverlässig umzusetzen, da der Evaluator in diesem Fall ein LLM ist, der oft ähnlichen Einschränkungen und Verzerrungen unterliegt wie das zugrunde liegende System selbst. Behalten Sie die Forschung, Werkzeuge und Best Practices in diesem Bereich im Auge, da sie sich schnell weiterentwickeln.


  • Menschliche Bewertung - Menschliche Fachexperten zu bitten, ihre beste Antwort zu geben, ist im Allgemeinen der Goldstandard. Obwohl diese Methode langsam und teuer ist, sollte sie nicht vernachlässigt werden, da sie von unschätzbarem Wert sein kann, um Erkenntnisse zu gewinnen und Ihren anfänglichen Bewertungsdatensatz aufzubauen. Wenn Sie aus der geleisteten Arbeit noch mehr Nutzen ziehen möchten, können Sie Techniken wie die in der AutoEval richtig gemacht Papier, um Ihre von menschlichen Experten erstellten Bewertungen durch synthetische Variationen zu ergänzen.


Bewertungspyramide mit der empfohlenen Verteilung verschiedener Bewertungstypen. Methoden weiter oben erfordern mehr Aufwand und Komplexität und sind daher eher aussagekräftig für die Übereinstimmung mit der Grundwahrheit. Methoden weiter unten können schneller und häufiger ausgeführt werden – sollten jedoch nur als Annäherung an die sachliche Genauigkeit interpretiert werden.


Neben Ihrer Entscheidung, welche Bewertungstechniken Sie verwenden möchten, sollten Sie auch einen benutzerdefinierten Benchmark-Bewertungsdatensatz erstellen - generische Datensätze, die normalerweise in Hugging Face-Bestenlisten verwendet werden, wie z. B. MMLU Ein Datensatz reicht nicht aus. Ihr benutzerdefinierter Evaluierungsdatensatz enthält eine Vielzahl von Eingabeaufforderungen und deren ideale Antworten, die domänenspezifisch und repräsentativ für die Eingabeaufforderungstypen sind, die Ihre tatsächlichen Kunden in Ihre Anwendung eingeben. Im Idealfall stehen Ihnen menschliche Experten zur Verfügung, die Sie bei der Erstellung des Evaluierungsdatensatzes unterstützen. Wenn nicht, können Sie dies auch selbst tun. Wenn Sie sich nicht sicher sind, welche Eingabeaufforderungen wahrscheinlich sind, stellen Sie einfach eine Arbeitshypothese auf und gehen Sie weiter, als ob sie validiert worden wäre. Sie können Ihre Hypothesen später kontinuierlich überarbeiten, wenn mehr Daten verfügbar werden.


Erwägen Sie, Einschränkungen auf die Eingabeaufforderung für jede Zeile in Ihrem Eval-Datensatz anzuwenden, damit das LLM mit einem konkreten Beurteilungstyp antwortet: binär, kategorisch, Rangfolge, numerisch oder Text. Eine Mischung aus Beurteilungstypen sorgt für eine angemessene Abwechslung Ihrer Evals und reduziert die Ausgabeverzerrung. Ceteris paribus sind mehr Evaluierungstestfälle besser; es wird jedoch empfohlen, sich in dieser Phase auf Qualität statt Quantität zu konzentrieren. Aktuelle Forschungen zur Feinabstimmung des LLM in den LIMA: Weniger ist mehr bei der Ausrichtung Das Papier legt nahe, dass selbst ein kleiner Eval-Datensatz mit 1000 Zeilen die Ausgabequalität erheblich verbessern kann, vorausgesetzt, es handelt sich um repräsentative Stichproben der tatsächlichen Gesamtbevölkerung. Bei RAG-Anwendungen haben wir anekdotisch Leistungsverbesserungen bei der Verwendung von Eval-Datensätzen mit Dutzenden bis Hunderten von Zeilen beobachtet.


Sie können Ihre Evaluierungen zwar manuell und ad hoc ausführen, aber warten Sie nicht zu lange mit der Implementierung einer CI/CD-Pipeline, um die Ausführung Ihres Evaluierungsprozesses zu automatisieren. Die tägliche Ausführung von Evaluierungen oder die Ausführung von Triggern, die mit Quellcode-Repositorys und Observability-Tools verbunden sind, gilt allgemein als bewährte Methode für ML-Ops. Erwägen Sie die Verwendung eines Open-Source-RAG-Evaluierungsframeworks wie Ragas oder DeepEval um Ihnen dabei zu helfen, schnell einsatzbereit zu sein. Verwenden Sie Ihren Data Lake als zuverlässige Informationsquelle für Tabellen, die sowohl die versionierten Evaluierungsdatensätze als auch die verschiedenen Ausgabemetriken enthalten, die bei jeder Ausführung einer Evaluierung generiert werden. Diese Daten liefern wertvolle Erkenntnisse, die Sie später im Projekt nutzen können, um strategische und gezielte Verbesserungen vorzunehmen.

Datenextraktoren

Das RAG-Korpus, mit dem Sie zunächst Prototypen erstellen, reicht selten aus, um die Produktion zu starten. Sie müssen Ihr Korpus wahrscheinlich laufend mit zusätzlichen Daten ergänzen, um dem LLM zu helfen, Trugschlüsse, Auslassungen und problematische Arten von Verzerrungen zu reduzieren. Dies geschieht normalerweise von Fall zu Fall, indem Extraktoren und Lader erstellt werden, die Upstream-Daten in ein Format konvertieren, das in einer Downstream-Dokumentenpipeline weiterverarbeitet werden kann.


Es besteht zwar ein geringes Risiko, dass Sie versuchen, das Meer zu übertreiben, indem Sie mehr Daten sammeln, als Sie benötigen, aber es ist wichtig, kreativ zu sein und über den Tellerrand hinauszublicken, was die Quellen für hochwertige Informationen angeht, auf die Ihr Unternehmen Zugriff hat. Zu den offensichtlichen Möglichkeiten kann das Extrahieren von Erkenntnissen aus strukturierten Daten gehören, die in Ihrem OLTP und Data Warehouse Ihres Unternehmens gespeichert sind. Quellen wie Blogbeiträge des Unternehmens, Whitepapers, veröffentlichte Forschungsergebnisse und Kundensupportanfragen sollten ebenfalls in Betracht gezogen werden, sofern sie angemessen anonymisiert und von vertraulichen Informationen bereinigt werden können. Die positiven Auswirkungen auf die Leistung, die sich ergeben, wenn Sie Ihrem Korpus auch nur kleine Mengen hochwertiger In-Domain-Daten hinzufügen, können kaum hoch genug eingeschätzt werden. Scheuen Sie sich also nicht, Zeit mit Erkunden, Experimentieren und Iterieren zu verbringen. Hier sind einige der Techniken, die häufig verwendet werden, um ein hochwertiges In-Domain-Korpus zu erstellen:


  • Dokumentenextraktion – Proprietäre PDFs, Office-Dokumente, Präsentationen und Markdown-Dateien können reichhaltige Informationsquellen sein. Es gibt ein weitläufiges Ökosystem aus Open-Source- und SaaS-Tools, um diese Daten zu extrahieren. Im Allgemeinen sind Datenextraktoren dateitypspezifisch (JSON, CSV, docx usw.), OCR-basiert oder werden von maschinellem Lernen und Computer-Vision-Algorithmen unterstützt. Beginnen Sie einfach und fügen Sie Komplexität nur bei Bedarf hinzu.


  • API-Extraktion – Öffentliche und private APIs können reichhaltige Quellen für fachspezifisches Wissen sein. Darüber hinaus verfügen gut konzipierte JSON- und XML-basierte Web-APIs bereits über eine integrierte Struktur, die die gezielte Extraktion relevanter Eigenschaften innerhalb der Nutzlast erleichtert und alles verwirft, was als irrelevant erachtet wird. Es gibt ein riesiges Ökosystem aus erschwinglichen Low-Code- und No-Code-API-Konnektoren, mit denen Sie das Schreiben von benutzerdefinierten ETLs für jede API, die Sie nutzen möchten, vermeiden können – ein Ansatz, der ohne ein engagiertes Team von Dateningenieuren schwierig zu pflegen und zu skalieren sein kann.


  • Web Scraper – Webseiten gelten als halbstrukturierte Daten mit einer baumartigen DOM-Struktur. Wenn Sie wissen, nach welchen Informationen Sie suchen, wo sie sich befinden und welches Seitenlayout sie aufweisen, können Sie schnell einen Scraper erstellen, um diese Daten zu nutzen, auch ohne eine gut dokumentierte API. Es gibt viele Skriptbibliotheken und Low-Code-Tools, die wertvolle Abstraktionen für Web Scraping bieten.


  • Webcrawler – Webcrawler können Webseiten durchsuchen und rekursive URL-Listen erstellen. Diese Methode kann mit Scraping kombiniert werden, um Informationen basierend auf Ihren Kriterien zu scannen, zusammenzufassen und zu filtern. In größerem Maßstab kann diese Technik verwendet werden, um Ihren eigenen Wissensgraphen zu erstellen.


Egal, welche Techniken Sie zur Datenerfassung verwenden, widerstehen Sie der Versuchung, zusammengehackte, einmalige Skripte zu erstellen. Wenden Sie stattdessen bewährte Methoden der Datentechnik an, um Extraktoren als wiederholbare und fehlertolerante ETL-Pipelines bereitzustellen, die die Daten in Tabellen in Ihrem Datensee landen. Stellen Sie sicher, dass bei jeder Ausführung dieser Pipelines wichtige Metadatenelemente wie die Quell-URLs und der Zeitpunkt der Extraktion erfasst und neben jedem Inhaltselement gekennzeichnet werden. Die Erfassung von Metadaten wird sich für die nachfolgende Datenbereinigung, Filterung, Deduplizierung, Fehlerbehebung und Zuordnung als von unschätzbarem Wert erweisen.

Chunking

Chunking reduziert große Textproben in kleinere, diskrete Teile, die in das Kontextfenster eines LLM passen. Während Kontextfenster immer größer werden – wodurch beim Inferenzieren mehr Inhaltsblöcke hineingepackt werden können – bleibt Chunking eine wichtige Strategie, um das richtige Gleichgewicht zwischen Genauigkeit, Wiedererkennungswert und Rechenleistung zu finden.


Für eine effektive Chunking-Methode ist die Auswahl einer geeigneten Chunk-Größe erforderlich. Größere Chunk-Größen bewahren den Kontext und die semantische Bedeutung eines Textstücks, ermöglichen jedoch weniger Chunks im Kontextfenster. Umgekehrt ermöglichen kleinere Chunk-Größen das Einfügen von mehr diskreten Inhaltsblöcken in das Kontextfenster des LLM. Ohne zusätzliche Schutzmaßnahmen besteht jedoch die Gefahr, dass jedes Inhaltsstück an Qualität verliert, wenn es aus seinem umgebenden Kontext entfernt wird.


Beispielabrufergebnisse für die Eingabeaufforderung „Erzählen Sie mir von Beyonces beruflichen Erfolgen“ mit unterschiedlichen Blockgrößenkonfigurationen.


Zusätzlich zur Blockgröße müssen Sie verschiedene Blockstrategien und -methoden bewerten. Hier sind einige Standard-Blockmethoden, die Sie in Betracht ziehen sollten:


  • Strategie mit fester Größe – Bei dieser Methode wählen wir einfach eine feste Anzahl von Token für unsere Inhaltsblöcke aus und zerlegen unseren Inhalt entsprechend in kleinere Blöcke. Im Allgemeinen wird bei dieser Strategie eine gewisse Überlappung zwischen benachbarten Blöcken empfohlen, um zu vermeiden, dass zu viel Kontext verloren geht. Dies ist die einfachste Strategie zum Zerlegen von Blöcken und im Allgemeinen ein guter Ausgangspunkt, bevor Sie sich an komplexere Strategien heranwagen.


  • Dynamische Größenstrategie – Diese Methode verwendet verschiedene Inhaltsmerkmale, um zu bestimmen, wo ein Block beginnen und enden soll. Ein einfaches Beispiel wäre ein Interpunktions-Chunker, der Sätze auf Grundlage des Vorhandenseins bestimmter Zeichen wie Punkte und Zeilenumbrüche aufteilt. Während ein Interpunktions-Chunker für unkomplizierte kurze Inhalte (z. B. Tweets, Produktbeschreibungen mit begrenzter Zeichenanzahl usw.) recht gut funktionieren kann, hat er bei längeren und komplexeren Inhalten offensichtliche Nachteile.


  • Inhaltsbewusste Strategie – Inhaltsbewusste Chunker sind auf die Art des Inhalts und der Metadaten abgestimmt, die extrahiert werden, und verwenden diese Eigenschaften, um zu bestimmen, wo jeder Chunk beginnt und endet. Ein Beispiel könnte ein Chunker für HTML-Blogs sein, der Header-Tags verwendet, um Chunk-Grenzen abzugrenzen. Ein anderes Beispiel könnte ein semantischer Chunker sein, der den paarweisen Kosinus-Ähnlichkeitswert jedes Satzes mit seinen vorhergehenden Nachbarn vergleicht, um zu bestimmen, wann sich der Kontext so stark geändert hat, dass die Abgrenzung eines neuen Chunks gerechtfertigt ist.


Die optimale Chunking-Strategie für Ihre RAG-Anwendung muss auf die Kontextfensterlänge des LLM, die zugrunde liegende Textstruktur, die Textlänge und die Komplexität des Inhalts in Ihrem Korpus abgestimmt werden. Experimentieren Sie ausgiebig mit verschiedenen Chunking-Strategien und führen Sie Ihre Auswertungen nach jeder Änderung durch, um die Anwendungsleistung für eine bestimmte Strategie besser zu verstehen. Versionieren Sie Ihren gechunkten Inhalt in Ihren Data Lake-Tabellen und stellen Sie sicher, dass jeder Chunk Herkunftsinformationen enthält, um ihn auf den Rohinhalt und seine jeweiligen Metadaten aus dem vorgelagerten Datenextraktionsschritt zurückzuführen.

Anreicherung

In vielen Fällen unterscheiden sich die während des RAG-Prozesses für den Abruf indizierten Inhaltsblöcke kontextuell von den tatsächlichen Eingabeaufforderungen, auf die Ihre Anwendung in der Produktion stößt. Wenn Sie beispielsweise einen KI-Fragen-Antwort-Bot erstellen, verfügen Sie möglicherweise über ein umfangreiches Korpus an geschützten Informationen, das zahlreiche richtige Antworten auf Kundenanfragen enthält. In seiner Rohform ist Ihr Korpus jedoch wahrscheinlich nicht im Format von Frage-Antwort-Paaren vororganisiert, was ideal für den Abruf auf Grundlage ähnlicher eingebetteter Daten ist. Wenn wir in diesem Beispiel zum Abrufzeitpunkt unser Korpus naiv nach Rohinhaltsblöcken durchsuchen würden, die semantisch einer eingehenden Kundenfrage ähneln, könnten wir auf eine suboptimale Relevanz des Abruf-Ergebnissatzes stoßen. Dies ist eine Folge der Tatsache, dass wir die Ähnlichkeit kontextuell unterschiedlicher Elemente vergleichen – nämlich Fragen und Antworten. Glücklicherweise ist die Lösung relativ einfach: Wir können die Leistungsfähigkeit von LLMs nutzen, um unsere möglichen Antworten – auch bekannt als Rohinhaltsblöcke – anzureichern, indem wir sie in hypothetische Fragen rekontextualisieren. Wir indexieren diese hypothetischen Fragen dann in unserer Vektordatenbank für den späteren Abruf. Diese Technik, genannt Hypothetische Dokumenteinbettungen (HyDE) , veranschaulicht die Leistungsfähigkeit der Verwendung von LLMs zur Anreicherung Ihrer Daten innerhalb der Dokumentverarbeitungspipeline. Hier ist ein Beispiel für die Verwendung dieser Technik bei einigen Inhalten aus dem bekannten squad_v2-Datensatz :


 System Prompt: Given the provided snippet of text, generate three hypothetical questions that could be asked about it. Each question must be able to be answered using the information within the referenced snippet of text and only that information. Be concise. User Prompt: “At the 52nd Annual Grammy Awards, Beyoncé received ten nominations, including Album of the Year for I Am... Sasha Fierce, Record of the Year for "Halo", and Song of the Year for "Single Ladies (Put a Ring on It)", among others. She tied with Lauryn Hill for most Grammy nominations in a single year by a female artist. In 2010, Beyoncé was featured on Lady Gaga's single "Telephone" and its music video. The song topped the US Pop Songs chart, becoming the sixth number-one for both Beyoncé and Gaga, tying them with Mariah Carey for most number-ones since the Nielsen Top 40 airplay chart launched in 1992. "Telephone" received a Grammy Award nomination for Best Pop Collaboration with Vocals.” Response: Here are some questions that could be asked based on the provided text: * How many nominations did Beyoncé receive at the 52nd Annual Grammy Awards? * For which album was Beyoncé nominated for Album of the Year at the 52nd Annual Grammy Awards? * Which song earned Beyoncé a nomination for Record of the Year at the 52nd Annual Grammy Awards?


Wenn Sie mit einem Korpus arbeiten, das aus langen und/oder thematisch komplexen Inhalten besteht, sollten Sie eine zusätzliche Vorverarbeitung in Betracht ziehen, um Inhaltsblöcke vorab zusammenzufassen und so ihre semantische Dimensionalität zu reduzieren. Beim Abrufen können Sie die Einbettungen der Blockzusammenfassungen abfragen und dann den nicht zusammengefassten Text durch die Kontextfenstereinfügung ersetzen. Diese Methode erhöht die Relevanz, wenn RAG über ein großes, komplexes und/oder sich häufig änderndes Korpus durchgeführt wird.

Tokenisierung

Große Sprachmodelle im Jahr 2024 sind im Allgemeinen transformatorbasierte neuronale Netzwerke, die das geschriebene Wort nicht von Haus aus verstehen. Eingehender Rohtext wird in Token umgewandelt, gefolgt von hochdimensionalen Einbettungsvektoren, die für Matrixmultiplikationsoperationen optimiert sind. Dieser eingehende Prozess wird im Allgemeinen als Kodierung bezeichnet. Der umgekehrte ausgehende Prozess wird als Dekodierung bezeichnet. Viele LLMs funktionieren für Inferenzen nur mit demselben Tokenisierungsschema, mit dem sie trainiert wurden. Daher ist es wichtig, die Grundlagen der gewählten Tokenisierungsstrategie zu verstehen, da sie viele subtile Auswirkungen auf die Leistung haben kann.


Obwohl es einfache Tokenisierungsschemata auf Zeichen- und Wortebene gibt, verwenden zum Zeitpunkt des Schreibens fast alle modernen LLMs Teilwort-Tokenisierer. Daher werden wir uns hier nur auf diese Kategorie von Tokenisierern konzentrieren.


Unterwort-Tokenisierer zerlegen Wörter rekursiv in kleinere Einheiten. Dadurch können sie Wörter außerhalb des Wortschatzes verstehen, ohne den Wortschatz zu sehr aufzublähen – ein wichtiger Aspekt für die Trainingsleistung und die Fähigkeit des LLM, auf unbekannte Texte zu verallgemeinern.


Eine heute weit verbreitete Methode zur Tokenisierung von Teilwörtern ist die Byte-Pair-Kodierung (BPE). Auf hoher Ebene funktioniert der BPE-Algorithmus folgendermaßen:


  • Teilen Sie Wörter in Token von Unterworteinheiten auf und fügen Sie diese dem Vokabular hinzu. Jeder Token stellt ein Unterwort dar, das durch die relative Häufigkeit gemeinsamer benachbarter Zeichenmuster innerhalb des Trainingskorpus bestimmt wird.


  • Ersetzen Sie gängige Token-Paare aus dem obigen Schritt durch ein einzelnes Token, das das Paar darstellt, und fügen Sie es dem Vokabular hinzu.


  • Wiederholen Sie die obigen Schritte rekursiv.


Die BPE-Tokenisierung ist im Allgemeinen ein ausgezeichneter Ausgangspunkt für Ihre RAG-Anwendung, da sie für viele Anwendungsfälle gut funktioniert. Angenommen, Sie verfügen jedoch über eine beträchtliche Menge hochspezialisierter Fachsprache, die im Vokabular des für Ihr ausgewähltes Modell verwendeten Vortrainingskorpus nicht gut vertreten ist. Erwägen Sie in diesem Fall die Erforschung alternativer Tokenisierungsmethoden – oder die Erforschung von Feinabstimmung und Low-Rank-Anpassung, die über den Rahmen dieses Artikels hinausgehen. Das oben erwähnte Problem des eingeschränkten Vokabulars kann sich in einer schlechten Leistung bei Anwendungen äußern, die für spezialisierte Bereiche wie Medizin, Recht oder obskure Programmiersprachen entwickelt wurden. Genauer gesagt wird es bei Eingabeaufforderungen vorherrschen, die hochspezialisierte Sprache/Jargon enthalten. Verwenden Sie den in Ihrem Datensee gespeicherten Eval-Datensatz, um bei Bedarf mit verschiedenen Tokenisierungsschemata und ihrer jeweiligen Leistung mit verschiedenen Modellen zu experimentieren. Bedenken Sie, dass Tokenisierer, Einbettungen und Sprachmodelle oft eng miteinander verbunden sind – daher kann die Änderung eines Modells eine Änderung der anderen erforderlich machen.

Abschluss

Ein moderner Data Lake, der auf einem MinIO-Objektspeicher basiert, bietet eine grundlegende Infrastruktur, um RAG-basierte Anwendungen sicher in die Produktion zu bringen. Damit können Sie Evaluierungen und einen domänenspezifischen Evaluierungsdatensatz erstellen, der in Ihren Data Lake-Tabellen gespeichert und versioniert werden kann. Mithilfe dieser Evaluierungen können Sie jede Komponente Ihrer RAG-Anwendungsdokumentpipeline – Extraktoren, Chunker, Anreicherung und Tokenisierer – wiederholt bewerten und schrittweise verbessern, und zwar so viel wie nötig, um eine produktionsreife Dokumentverarbeitungspipeline aufzubauen.


Wenn Sie Fragen haben, kontaktieren Sie uns bitte unter Locker !