📈Datensatz-Anleitung

Lerne, wie man einen Datensatz für die Feinabstimmung erstellt und vorbereitet.

Was ist ein Datensatz?

Für LLMs sind Datensätze Sammlungen von Daten, die zum Trainieren unserer Modelle verwendet werden können. Damit sie für das Training nützlich sind, müssen Textdaten in einem Format vorliegen, das tokenisiert werden kann. Sie erfahren außerdem, wie man Datensätze in Unsloth verwendet.

Ein zentraler Bestandteil bei der Erstellung eines Datensatzes ist Ihre Chat-Vorlage und wie Sie diese gestalten wollen. Tokenisierung ist ebenfalls wichtig, da sie Text in Tokens aufteilt, die Wörter, Subwörter oder Zeichen sein können, damit LLMs ihn effektiv verarbeiten können. Diese Tokens werden dann in Embeddings umgewandelt und angepasst, um dem Modell zu helfen, Bedeutung und Kontext zu verstehen.

Datenformat

Um den Prozess der Tokenisierung zu ermöglichen, müssen Datensätze in einem Format vorliegen, das von einem Tokenizer gelesen werden kann.

Format
Beschreibung
Trainingstyp

Rohkorpus

Rohtext aus einer Quelle wie einer Website, einem Buch oder einem Artikel.

Fortgesetztes Vortraining (CPT)

Instruktion

Anweisungen, denen das Modell folgen soll, und ein Beispiel für das angestrebte Ausgabeformat.

Überwachtes Feintuning (SFT)

Konversation

Mehrfach geführte Unterhaltung zwischen einem Nutzer und einem KI-Assistenten.

Überwachtes Feintuning (SFT)

RLHF

Konversation zwischen einem Nutzer und einem KI-Assistenten, wobei die Antworten des Assistenten von einem Skript, einem anderen Modell oder einem menschlichen Bewerter bewertet werden.

Verstärkendes Lernen (RL)

circle-info

Es ist zu beachten, dass für jede dieser Typen unterschiedliche Formatstile existieren.

Erste Schritte

Bevor wir unsere Daten formatieren, wollen wir Folgendes identifizieren:

1

Zweck des Datensatzes

Die Kenntnis des Zwecks des Datensatzes hilft uns zu bestimmen, welche Daten wir benötigen und welches Format wir verwenden sollten.

Der Zweck könnte darin bestehen, ein Modell an eine neue Aufgabe wie Zusammenfassung anzupassen oder die Fähigkeit eines Modells zu verbessern, eine bestimmte Figur zu spielen. Zum Beispiel:

  • Chatbasierte Dialoge (Fragen & Antworten, eine neue Sprache lernen, Kundensupport, Gespräche).

  • Strukturierte Aufgaben (Klassifikationarrow-up-right, Zusammenfassung, Generierungsaufgaben).

  • Domänenspezifische Daten (medizinisch, Finanzen, technisch).

2

Ausgabestil

Der Ausgabestil sagt uns, welche Datenquellen wir verwenden werden, um das gewünschte Ergebnis zu erzielen.

Beispielsweise könnte die Art der gewünschten Ausgabe JSON, HTML, Text oder Code sein. Oder vielleicht soll sie Spanisch, Englisch oder Deutsch usw. sein.

3

Datenquelle

Wenn wir Zweck und Stil der benötigten Daten kennen, müssen wir die Qualität und Menge der Daten analysieren. Hugging Face und Wikipedia sind großartige Quellen für Datensätze, und Wikipedia ist besonders nützlich, wenn Sie ein Modell zum Sprachenlernen trainieren möchten.

Die Datenquelle kann eine CSV-Datei, ein PDF oder sogar eine Website sein. Sie können auch synthetisch erzeugen Daten verwenden, aber es ist besondere Sorgfalt erforderlich, um sicherzustellen, dass jedes Beispiel von hoher Qualität und relevant ist.

circle-check

Die Daten formatieren

Wenn wir die relevanten Kriterien identifiziert und die notwendigen Daten gesammelt haben, können wir unsere Daten in ein maschinenlesbares Format bringen, das für das Training bereit ist.

Gängige Datenformate für LLM-Training

Für fortgesetztes Vortrainingverwenden wir Rohtextformat ohne spezielle Struktur:

Dieses Format bewahrt den natürlichen Sprachfluss und ermöglicht dem Modell, aus fortlaufendem Text zu lernen.

Wenn wir ein Modell an eine neue Aufgabe anpassen und beabsichtigen, dass das Modell in einem einzigen Durchgang Text auf Basis einer bestimmten Anweisung ausgibt, können wir das Instruktions- Format im Alpaca-Stilarrow-up-right

Wenn wir mehrere Gesprächsrunden wünschen, können wir das ShareGPT-Format verwenden:

Das Vorlagenformat verwendet die Attributschlüssel "from"/"value" und die Nachrichten wechseln zwischen Menschund gpt, wodurch ein natürlicher Dialogfluss ermöglicht wird.

Das andere gängige Format ist OpenAIs ChatML-Format, das auch Hugging Face standardmäßig verwendet. Dies ist wahrscheinlich das am häufigsten verwendete Format und wechselt zwischen user und assistant

Anwenden von Chat-Vorlagen mit Unsloth

Für Datensätze, die üblicherweise dem gängigen ChatML-Format folgen, besteht der Prozess zur Vorbereitung des Datensatzes für Training oder Finetuning aus vier einfachen Schritten:

  • Überprüfen Sie die Chatvorlagen, die Unsloth derzeit unterstützt:\

    Dies gibt die Liste der derzeit von Unsloth unterstützten Vorlagen aus. Hier ein Beispielausgabe:\

    \

  • Verwenden Sie get_chat_template um die richtige Chatvorlage auf Ihren Tokenizer anzuwenden:\

    \

  • Definieren Sie Ihre Formatierungsfunktion. Hier ein Beispiel:\

    Diese Funktion durchläuft Ihren Datensatz und wendet die von Ihnen definierte Chatvorlage auf jede Probe an.\

  • Laden wir schließlich den Datensatz und wenden die erforderlichen Änderungen auf unseren Datensatz an: \

    Wenn Ihr Datensatz das ShareGPT-Format mit "from"/"value" Schlüsseln anstelle des ChatML "role"/"content" Formats verwendet, können Sie zuerst die standardize_sharegpt Funktion verwenden, um ihn zu konvertieren. Der überarbeitete Code sieht dann wie folgt aus: \

Daten formatieren Q&A

F: Wie kann ich das Alpaca-Instruct-Format verwenden?

A: Wenn Ihr Datensatz bereits im Alpaca-Format formatiert ist, folgen Sie den Formatierungsschritten wie im Llama3.1 Notebook arrow-up-right. Wenn Sie Ihre Daten in das Alpaca-Format konvertieren müssen, besteht ein Ansatz darin, ein Python-Skript zu erstellen, das Ihre Rohdaten verarbeitet. Wenn Sie an einer Zusammenfassungsaufgabe arbeiten, können Sie ein lokales LLM verwenden, um Anweisungen und Ausgaben für jedes Beispiel zu erzeugen.

F: Sollte ich immer die standardize_sharegpt-Methode verwenden?

A: Verwenden Sie die standardize_sharegpt-Methode nur, wenn Ihr Ziel-Datensatz im sharegpt-Format vorliegt, Ihr Modell jedoch stattdessen ein ChatML-Format erwartet.

F: Warum nicht die apply_chat_template-Funktion verwenden, die mit dem Tokenizer geliefert wird.

A: Das chat_template Attribut, wenn ein Modell erstmals von den ursprünglichen Modellinhabern hochgeladen wird, enthält manchmal Fehler und kann Zeit benötigen, bis es aktualisiert wird. Im Gegensatz dazu prüfen und korrigieren wir bei Unsloth gründlich alle Fehler in der chat_template für jedes Modell, wenn wir die quantisierten Versionen in unsere Repositories hochladen. Darüber hinaus bieten unsere get_chat_template und apply_chat_template Methoden erweiterte Datenmanipulationsfunktionen, die vollständig in unserer Dokumentation zu Chat-Vorlagen beschrieben sind Seitearrow-up-right.

F: Was, wenn meine Vorlage derzeit von Unsloth nicht unterstützt wird?

A: Reichen Sie eine Funktionsanfrage auf den Unsloth-GitHub-Issues ein Forumarrow-up-right. Als vorübergehende Lösung könnten Sie auch die eigene apply_chat_template-Funktion des Tokenizers verwenden, bis Ihre Funktionsanfrage genehmigt und zusammengeführt wurde.

Synthetische Datengenerierung

Sie können auch jedes lokale LLM wie Llama 3.3 (70B) oder OpenAIs GPT 4.5 verwenden, um synthetische Daten zu erzeugen. Im Allgemeinen ist es besser, ein größeres Modell wie Llama 3.3 (70B) zu verwenden, um die bestmöglichen Ausgaben zu gewährleisten. Sie können Inferenz-Engines wie vLLM, Ollama oder llama.cpp direkt verwenden, um synthetische Daten zu erzeugen, aber es erfordert etwas manuelle Arbeit, um diese zu sammeln und nach mehr Daten zu fragen. Es gibt drei Ziele für synthetische Daten:

  • Vollständig neue Daten erzeugen – entweder von Grund auf oder aus Ihrem bestehenden Datensatz

  • Ihren Datensatz diversifizieren, damit Ihr Modell nicht überanpasst und zu spezifisch wird

  • Bestehende Daten ergänzen, z. B. Ihren Datensatz automatisch in das gewählte korrekte Format strukturieren

Notebook für synthetische Datensätze

Wir haben mit Meta zusammengearbeitet, um ein kostenloses Notebook zum automatischen Erstellen synthetischer Datensätze mit lokalen Modellen wie Llama 3.2 bereitzustellen. Greifen Sie hier auf das Notebook zu.arrow-up-right

Was das Notebook macht:

  • Parst automatisch PDFs, Websites, YouTube-Videos und mehr

  • Verwendet Metas Synthetic Data Kit + Llama 3.2 (3B), um QA-Paare zu erzeugen

  • Bereinigt und filtert die Daten automatisch

  • Feinabstimmung des Datensatzes mit Unsloth + Llama

  • Das Notebook läuft vollständig lokal, ohne dass API-Aufrufe erforderlich sind

Verwendung eines lokalen LLM oder ChatGPT für synthetische Daten

Ihr Ziel ist es, das Modell dazu zu bringen, QA-Daten zu erzeugen und zu verarbeiten, die in Ihrem angegebenen Format vorliegen. Das Modell muss die Struktur, die Sie vorgegeben haben, sowie den Kontext lernen, weshalb Sie sicherstellen sollten, dass Sie mindestens 10 Beispiele an Daten bereits haben. Beispielprompts:

  • Prompt zur Erzeugung weiterer Dialoge in einem bestehenden Datensatz:

  • Prompt, wenn Sie keinen Datensatz haben:

    {% code overflow="wrap" %}

    {% endcode %}

  • Prompt für einen Datensatz ohne Formatierung:

    {% code overflow="wrap" %}

    {% endcode %}

Es wird empfohlen, die Qualität der erzeugten Daten zu prüfen, um irrelevante oder minderwertige Antworten zu entfernen oder zu verbessern. Je nach Datensatz muss er möglicherweise auch in vielen Bereichen ausgeglichen werden, damit Ihr Modell nicht überanpasst. Sie können diesen bereinigten Datensatz dann wieder in Ihr LLM einspeisen, um Daten erneut zu erzeugen, nun mit noch mehr Anleitung.

Datensatz-FAQ + Tipps

Wie groß sollte mein Datensatz sein?

Wir empfehlen im Allgemeinen mindestens 100 Datenzeilen als absolutes Minimum für Feintuning, um vernünftige Ergebnisse zu erzielen. Für optimale Leistung ist ein Datensatz mit über 1.000 Zeilen vorzuziehen, und in diesem Fall führt mehr Daten in der Regel zu besseren Ergebnissen. Wenn Ihr Datensatz zu klein ist, können Sie auch synthetische Daten hinzufügen oder einen Datensatz von Hugging Face einfügen, um ihn zu diversifizieren. Die Wirksamkeit Ihres feinabgestimmten Modells hängt jedoch stark von der Qualität des Datensatzes ab, daher sollten Sie Ihre Daten gründlich bereinigen und vorbereiten.

Wie sollte ich meinen Datensatz strukturieren, wenn ich ein Reasoning-Modell feinabstimmen möchte?

Wenn Sie ein Modell feinabstimmen möchten, das bereits Reasoning-Fähigkeiten besitzt, wie die destillierten Versionen von DeepSeek-R1 (z. B. DeepSeek-R1-Distill-Llama-8B), müssen Sie weiterhin Frage-/Aufgabe- und Antwortpaare verwenden; für Ihre Antwort müssen Sie jedoch die Antwort so verändern, dass sie den Reasoning-/Chain-of-Thought-Prozess und die Schritte enthält, die zur Ableitung der Antwort unternommen wurden. Für ein Modell, das kein Reasoning besitzt und das Sie so trainieren möchten, dass es später Reasoning-Fähigkeiten umfasst, müssen Sie ein Standard-Dataset verwenden, diesmal jedoch ohne Reasoning in den Antworten. Dieser Trainingsprozess ist bekannt als Verstärkendes Lernen und GRPO.

Mehrere Datensätze

Wenn Sie mehrere Datensätze für das Feintuning haben, können Sie entweder:

  • Das Format aller Datensätze standardisieren, sie zu einem einzigen Datensatz zusammenführen und auf diesem vereinheitlichten Datensatz feinabstimmen.

  • Verwenden Sie das Mehrere Datensätzearrow-up-right Notebook, um direkt auf mehreren Datensätzen zu feinabstimmen.

Kann ich dasselbe Modell mehrmals feinabstimmen?

Sie können ein bereits feinabgestimmtes Modell mehrmals feinabstimmen, aber es ist besser, alle Datensätze zu kombinieren und das Feintuning in einem einzigen Prozess durchzuführen. Das Training eines bereits feinabgestimmten Modells kann die Qualität und das während des vorherigen Feintunings erworbene Wissen potenziell verändern.

Verwendung von Datensätzen in Unsloth

Alpaca-Datensatz

Sehen Sie ein Beispiel für die Verwendung des Alpaca-Datensatzes in Unsloth auf Google Colab:

Wir werden nun den Alpaca-Datensatz verwenden, der durch Aufruf von GPT-4 selbst erstellt wurde. Es ist eine Liste von 52.000 Anweisungen und Ausgaben, die sehr populär war, als Llama-1 veröffentlicht wurde, da sie das Feintuning eines Basis-LLM wettbewerbsfähig mit ChatGPT machte.

Sie können auf die GPT-4-Version des Alpaca-Datensatzes zugreifen hierarrow-up-right. Unten sind einige Beispiele des Datensatzes dargestellt:

Sie sehen, dass es in jeder Zeile 3 Spalten gibt – eine Anweisung, eine Eingabe und eine Ausgabe. Wir kombinieren im Wesentlichen jede Zeile zu einem großen Prompt wie unten. Dies verwenden wir dann, um das Sprachmodell zu feintunen, und das machte es dem ChatGPT sehr ähnlich. Wir nennen diesen Prozess überwachtes Instruktions-Feintuning.

Mehrere Spalten für Feintuning

Ein großes Problem für ChatGPT-ähnliche Assistenten ist, dass wir nur 1 Anweisung / 1 Prompt zulassen und nicht mehrere Spalten / Eingaben. Zum Beispiel muss man bei ChatGPT einen einzigen Prompt einreichen und nicht mehrere Prompts.

Das bedeutet im Wesentlichen, dass wir mehrere Spalten zu einem großen Prompt "zusammenführen" müssen, damit das Feintuning tatsächlich funktioniert!

Zum Beispiel hat der sehr berühmte Titanic-Datensatz viele, viele Spalten. Ihre Aufgabe war es vorherzusagen, ob ein Passagier überlebt hat oder gestorben ist, basierend auf Alter, Passagierklasse, Fahrpreis usw. Wir können dies nicht einfach an ChatGPT übergeben, sondern müssen diese Informationen zu einem großen Prompt "zusammenführen".

Wenn wir ChatGPT mit unserem "zusammengeführten" einzelnen Prompt, der alle Informationen für diesen Passagier enthält, fragen, können wir es bitten zu raten oder vorherzusagen, ob der Passagier gestorben oder überlebt hat.

Andere Feintuning-Bibliotheken verlangen, dass Sie Ihren Datensatz manuell für das Feintuning vorbereiten, indem Sie alle Spalten zu einem Prompt zusammenführen. In Unsloth stellen wir einfach die Funktion to_sharegpt zur Verfügung, die dies auf einmal erledigt!

Das ist nun etwas komplexer, da wir viele Anpassungsmöglichkeiten erlauben, aber es gibt ein paar Punkte:

  • Sie müssen alle Spalten in geschweifte Klammern einschließen {}. Dies sind die Spaltennamen in der tatsächlichen CSV-/Excel-Datei.

  • Optionale Textkomponenten müssen in [[]]eingeschlossen werden. Wenn zum Beispiel die Spalte "input" leer ist, wird die Zusammenführungsfunktion den Text nicht anzeigen und diesen überspringen. Das ist nützlich für Datensätze mit fehlenden Werten.

  • Wählen Sie die Ausgabe- oder Ziel-/Vorhersagespalte in output_column_name. Für den Alpaca-Datensatz ist dies output.

Zum Beispiel können wir im Titanic-Datensatz ein großes zusammengeführtes Prompt-Format wie unten erstellen, bei dem jede Spalte bzw. Textteil optional wird.

Angenommen, der Datensatz sieht so aus mit vielen fehlenden Daten:

Eingestiegen
Alter
Fahrpreis

S

23

18

7.25

Dann wollen wir nicht das Ergebnis sein:

  1. Der Passagier ist in S eingestiegen. Sein Alter ist 23. Sein Fahrpreis ist LEER.

  2. Der Passagier ist in LEEReingestiegen. Sein Alter ist 18. Sein Fahrpreis beträgt $7,25.

Stattdessen können wir durch optionales Einschließen von Spalten mit [[]]diese Informationen vollständig ausschließen.

  1. [[Der Passagier ist in S eingestiegen.]] [[Sein Alter ist 23.]] [[Sein Fahrpreis ist LEER.]]

  2. [[Der Passagier ist in LEEReingestiegen.]] [[Sein Alter ist 18.]] [[Sein Fahrpreis beträgt $7,25.]]

wird zu:

  1. Der Passagier ist in S eingestiegen. Sein Alter ist 23.

  2. Sein Alter ist 18. Sein Fahrpreis beträgt $7,25.

Mehrwertige Gespräche

Ein Problem, falls Sie es nicht bemerkt haben: Der Alpaca-Datensatz ist einstufig, während die Nutzung von ChatGPT interaktiv war und Sie mehrmals mit ihm sprechen können. Zum Beispiel ist links das, was wir wollen, aber rechts liefert der Alpaca-Datensatz nur einzelne Gespräche. Wir möchten, dass das feinabgestimmte Sprachmodell irgendwie lernt, mehrstufige Konversationen genau wie ChatGPT zu führen.

Deshalb haben wir den conversation_extension Parameter eingeführt, der im Wesentlichen einige zufällige Zeilen in Ihrem einstufigen Datensatz auswählt und sie zu einer Konversation zusammenführt! Wenn Sie ihn zum Beispiel auf 3 setzen, wählen wir zufällig 3 Zeilen aus und fügen sie zu einer zusammen! Zu lange Einstellungen können das Training verlangsamen, aber Ihren Chatbot und das endgültige Finetuning erheblich verbessern!

Dann setzen Sie output_column_name auf die Vorhersage- / Ausgabespalte. Für den Alpaca-Datensatz wäre es die Ausgabespalte.

Wir verwenden dann die standardize_sharegpt Funktion, um den Datensatz einfach in ein korrektes Format für das Finetuning zu bringen! Rufen Sie diese Funktion immer auf!

Vision-Feintuning

Der Datensatz zum Feintuning eines Vision- oder multimodalen Modells enthält auch Bild-Eingaben. Zum Beispiel verwendet das Llama 3.2 Vision Notebookarrow-up-right einen Radiographie-Fall, um zu zeigen, wie KI medizinischen Fachkräften helfen kann, Röntgenaufnahmen, CT-Scans und Ultraschall effizienter zu analysieren.

Wir verwenden eine stichprobenartige Version des ROCO-Radiographie-Datensatzes. Sie können auf den Datensatz zugreifen hierarrow-up-right. Der Datensatz enthält Röntgenaufnahmen, CT-Scans und Ultraschallbilder, die medizinische Zustände und Krankheiten zeigen. Jedes Bild hat eine von Experten verfasste Bildunterschrift. Ziel ist es, ein VLM so zu feintunen, dass es ein nützliches Analysetool für medizinische Fachkräfte wird.

Schauen wir uns den Datensatz an und prüfen, was das 1. Beispiel zeigt:

Bild
Beschriftung

Panoramische Röntgenaufnahme zeigt eine osteolytische Läsion im rechten posterioren Oberkiefer mit Resorption des Bodens der Kieferhöhle (Pfeile).

Um den Datensatz zu formatieren, sollten alle Vision-Feintuning-Aufgaben wie folgt formatiert werden:

Wir werden eine benutzerdefinierte Anweisung erstellen, die das VLM auffordert, ein erfahrener Radiologe zu sein. Beachten Sie auch, dass Sie anstelle nur einer Anweisung mehrere Runden hinzufügen können, um ein dynamisches Gespräch zu erzeugen.

Konvertieren wir den Datensatz in das "korrekte" Format für das Feintuning:

Das erste Beispiel ist jetzt wie unten strukturiert:

Bevor wir ein Feintuning durchführen, weiß das Vision-Modell vielleicht bereits, wie man die Bilder analysiert? Lassen Sie uns prüfen, ob dies der Fall ist!

Und das Ergebnis:

Für weitere Details sehen Sie sich unseren Datensatzabschnitt im Notebook hierarrow-up-right.

Zuletzt aktualisiert

War das hilfreich?