📈Datensatz-Leitfaden

Lerne, wie du einen Datensatz für das Fine-Tuning erstellst und vorbereitest.

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 auch, wie man Datensätze innerhalb von Unsloth verwendet.

Einer der wichtigsten Teile bei der Erstellung eines Datensatzes ist Ihr Chat-Vorlage und wie Sie ihn gestalten möchten. Tokenisierung ist ebenfalls wichtig, da sie Text in Tokens aufteilt, die Wörter, Teilwö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 Tokenisierungsprozess 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 Pretraining (CPT)

Instruct

Anweisungen für das Modell, denen es folgen soll, und ein Beispiel für das gewünschte Ausgabeergebnis.

Überwachtes Feinabstimmen (SFT)

Konversation

Mehrfacher Gesprächsaustausch zwischen einem Nutzer und einem KI-Assistenten.

Überwachtes Feinabstimmen (SFT)

RLHF

Gespräch zwischen einem Nutzer und einem KI-Assistenten, bei dem die Antworten des Assistenten von einem Skript, einem anderen Modell oder einem menschlichen Bewerter bewertet werden.

Reinforcement Learning (RL)

circle-info

Es ist erwähnenswert, dass für jeden dieser Typen unterschiedliche Formatstile existieren.

Erste Schritte

Bevor wir unsere Daten formatieren, möchten 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 Rolle 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 verrät uns, welche Datenquellen wir verwenden werden, um das gewünschte Ergebnis zu erreichen.

Beispielsweise könnte die gewünschte 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 trainieren möchten, um eine Sprache zu lernen.

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

circle-check

🦥 Unsloth Datenrezepte

Unsloth Datenrezepte ermöglichen Ihnen das Hochladen von Dokumenten wie PDFs oder CSVs und wandeln diese in nutzbare Datensätze um. Erstellen und bearbeiten Sie Datensätze visuell über einen Graph-Knoten-Workflow.

Die Rezepte-Seite ist der Haupteinstiegspunkt. Rezepte werden lokal im Browser gespeichert, sodass Sie später zu gespeicherter Arbeit zurückkehren können. Von hier aus können Sie ein leeres Rezept erstellen oder ein Lern-Rezept öffnen.

Data Recipes folgt dem gleichen grundlegenden Pfad. Sie öffnen die Rezepte-Seite, erstellen oder wählen ein Rezept, bauen den Workflow im Editor, validieren ihn, führen eine Vorschau aus und starten dann den vollständigen Datensatzlauf, sobald die Ausgabe richtig aussieht. Fügen Sie Seed-Daten und Generierungsblöcke hinzu, validieren Sie den Workflow, sehen Sie sich eine Beispielvorschau an und führen Sie dann einen vollständigen Datensatzaufbau aus.

Auf einen Blick sollte ein üblicher Workflow so aussehen:

  1. Öffnen Sie die Rezepte-Seite.

  2. Erstellen Sie ein neues Rezept oder öffnen Sie ein bestehendes.

  3. Fügen Sie Blöcke hinzu, um Ihren Datensatz-Workflow zu definieren.

  4. Klicken Sie Validieren um Konfigurationsprobleme frühzeitig zu erkennen.

  5. Führen Sie eine Vorschau aus, um Beispielzeilen schnell zu überprüfen.

  6. Führen Sie einen vollständigen Datensatzaufbau durch, wenn das Rezept fertig ist.

  7. Überprüfen Sie Fortschritt und Ausgabe live im Graph oder in Ausführungen Ansicht für weitere Details.

  8. Wählen Sie den resultierenden Datensatz in Studio und feinabstimmen eines Modells. Lesen Sie mehr:

hat-chefData Recipeschevron-right

Formatierung der Daten

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

Gängige Datenformate für LLM-Training

Für (GRPO, DPO),, verwenden wir Rohtextformat ohne spezifische Struktur:

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

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

Wenn wir mehrere Gesprächsrunden möchten, können wir das ShareGPT-Format verwenden:

Das Vorlagenformat verwendet die Attributschlüssel "from"/"value" und die Nachrichten wechseln zwischen Menschund gpt, was einen natürlichen Dialogfluss ermöglicht.

Das andere gebräuchliche Format ist OpenAIs ChatML-Format und ist das Standardformat bei Hugging Face. Dies ist wahrscheinlich das am häufigsten verwendete Format und wechselt zwischen Benutzer und Assistent

Anwendung von Chat-Vorlagen mit Unsloth

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

  • Prüfen Sie die Chat-Vorlagen, die Unsloth derzeit unterstützt:\

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

    \

  • Verwenden get_chat_template um die richtige Chat-Vorlage auf Ihren Tokenizer anzuwenden:\

    \

  • Definieren Sie Ihre Formatierungsfunktion. Hier ein Beispiel:\

    Diese Funktion durchläuft Ihren Datensatz und wendet die von Ihnen definierte Chat-Vorlage 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-Formats "role"/"content" verwendet, können Sie die standardize_sharegpt Funktion verwenden, um ihn zuerst zu konvertieren. Der überarbeitete Code sieht dann wie folgt aus: \

Formatierung Daten 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 gezeigt Notebook arrow-up-right. Wenn Sie Ihre Daten in das Alpaca-Format konvertieren müssen, besteht ein Ansatz darin, ein Python-Skript zu erstellen, um Ihre Rohdaten zu verarbeiten. Wenn Sie an einer Zusammenfassungsaufgabe arbeiten, können Sie ein lokales LLM verwenden, um Anweisungen und Ausgaben für jedes Beispiel zu generieren.

F: Sollte ich immer die standardize_sharegpt-Methode verwenden?

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

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

A: Die chat_template Das Attribut, wenn ein Modell ursprünglich von den ursprünglichen Modelbesitzern hochgeladen wird, enthält manchmal Fehler und kann Zeit brauchen, um aktualisiert zu werden. Im Gegensatz dazu überprüfen und beheben wir bei Unsloth gründlich alle Fehler in der chat_template für jedes Modell, wenn wir die quantisierten Versionen in unsere Repositories hochladen. Zusätzlich bieten unsere get_chat_template und apply_chat_template Methoden erweiterte Datenmanipulationsfunktionen, die vollständig in unserer Chat-Vorlagen-Dokumentation dokumentiert sind Seitearrow-up-right.

F: Was ist, wenn meine Vorlage derzeit nicht von Unsloth 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. Generell ist es besser, ein größeres Modell wie Llama 3.3 (70B) zu verwenden, um die qualitativ hochwertigsten Ausgaben sicherzustellen. Sie können direkt Inferenz-Engines wie vLLM, Ollama oder llama.cpp verwenden, um synthetische Daten zu erzeugen, aber es erfordert einige manuelle Arbeit, um diese zu sammeln und weitere Daten anzufordern. 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 augmentieren, z. B. automatisch Ihren Datensatz in das korrekt gewählte Format strukturieren

Verwendung von Unsloth für synthetische Daten

Sie können ganz einfach beliebige unstrukturierte oder strukturierte Daten in Unsloth Studio hochladen's Datenrezepte und es wird diese automatisch in einen nutzbaren / synthetischen Datensatz umwandeln. Mehr Details in unserer Anleitung.

Verwendung eines lokalen LLM oder ChatGPT für synthetische Daten

Ihr Ziel ist es, das Modell dazu zu bringen, QA-Daten zu generieren und zu verarbeiten, die in Ihrem angegebenen Format vorliegen. Das Modell muss die von Ihnen bereitgestellte Struktur und auch den Kontext lernen, also stellen Sie sicher, dass Sie mindestens 10 Beispiele an Daten bereits haben. Beispiel-Prompts:

  • Prompt zur Generierung weiterer Dialoge zu einem bestehenden Datensatz:

  • Prompt, falls Sie noch 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 generierten Daten zu prüfen, um irrelevante oder minderwertige Antworten zu entfernen oder zu verbessern. Je nach Ihrem Datensatz muss dieser möglicherweise 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 generieren, jetzt mit noch mehr Anleitung.

Datensatz FAQ + Tipps

Wie groß sollte mein Datensatz sein?

Wir empfehlen generell als absolutes Minimum mindestens 100 Datenzeilen für Feinabstimmung, 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 ergänzen, um ihn zu diversifizieren. Die Wirksamkeit Ihres feinabgestimmten Modells hängt jedoch stark von der Qualität des Datensatzes ab, also reinigen und bereiten Sie Ihre Daten sorgfältig vor.

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

Wenn Sie ein Modell feinabstimmen möchten, das bereits Reasoning-Fähigkeiten besitzt, wie die distillierten Versionen von DeepSeek-R1 (z. B. DeepSeek-R1-Distill-Llama-8B), müssen Sie weiterhin Frage/Aufgaben- und Antwortpaare verwenden. Für Ihre Antwort müssen Sie jedoch die Antwort so ändern, dass sie den Reasoning-/Chain-of-Thought-Prozess und die Schritte enthält, die zur Ableitung der Antwort geführt haben. Für ein Modell, das kein Reasoning hat und das Sie trainieren möchten, damit es später Reasoning-Fähigkeiten umfasst, müssen Sie ein Standarddatensatz verwenden, dieses Mal jedoch ohne Reasoning in den Antworten. Dieser Trainingsprozess ist bekannt als Reinforcement Learning und GRPO.

Mehrere Datensätze

Wenn Sie mehrere Datensätze zur Feinabstimmung 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 an mehreren Datensätzen feinabzustimmen.

Kann ich dasselbe Modell mehrfach feinabstimmen?

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

Verwendung von Datensätzen in Unsloth

Alpaca-Datensatz

Sehen Sie ein Beispiel für die Verwendung des Alpaca-Datensatzes innerhalb von 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 Feinabstimmen eines Basis-LLM wettbewerbsfähig mit ChatGPT machte.

Sie können auf die GPT4-Version des Alpaca-Datensatzes zugreifen hierarrow-up-right. Unten werden einige Beispiele des Datensatzes gezeigt:

Sie können 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 feinabstimmen, und das machte es dem ChatGPT sehr ähnlich. Wir nennen diesen Prozess überwachtes Instruktions-Finetuning.

Mehrere Spalten für Feinabstimmung

Ein großes Problem bei ChatGPT-ähnlichen Assistenten ist, dass wir nur 1 Anweisung / 1 Prompt zulassen und nicht mehrere Spalten / Eingaben. Zum Beispiel muss man bei ChatGPT genau einen Prompt übermitteln, nicht mehrere.

Das bedeutet im Wesentlichen, dass wir mehrere Spalten zu einem großen Prompt "zusammenführen" müssen, damit Feinabstimmung 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 in einen großen Prompt "verschmelzen".

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

Andere Feinabstimmungsbibliotheken verlangen, dass Sie Ihren Datensatz manuell für die Feinabstimmung 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 jetzt etwas komplizierter, da wir viel Anpassung 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 beispielsweise die Spalte "input" leer ist, zeigt die Zusammenführungsfunktion den Text nicht an und überspringt ihn. Dies ist nützlich für Datensätze mit fehlenden Werten.

  • Wählen Sie die Ausgabespalte oder Ziel-/Vorhersagespalte in output_column_nameaus. Für den Alpaca-Datensatz wäre dies output.

Zum Beispiel können wir im Titanic-Datensatz ein großes zusammengeführtes Prompt-Format wie unten erstellen, wobei jede Spalte / Textstück optional wird.

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

Eingeschifft
Alter
Fahrpreis

S

23

18

7.25

Dann möchten wir nicht, dass das Ergebnis lautet:

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

  2. Der Passagier legte in LEERan. 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 legte in S an.]] [[Sein Alter ist 23.]] [[Sein Fahrpreis ist LEER.]]

  2. [[Der Passagier legte in LEERan.]] [[Sein Alter ist 18.]] [[Sein Fahrpreis ist $7.25.]]

wird zu:

  1. Der Passagier legte in S an. Sein Alter ist 23.

  2. Sein Alter ist 18. Sein Fahrpreis ist $7.25.

Mehrfachrunde Gespräche

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

Also 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 z. B. auf 3 setzen, wählen wir zufällig 3 Zeilen aus und verschmelzen sie zu einer! Zu lange Einstellungen können das Training verlangsamen, könnten aber Ihren Chatbot und die endgültige Feinabstimmung deutlich verbessern!

Setzen Sie dann output_column_name auf die Vorhersage- / Ausgabespalte. Für den Alpaca-Datensatz wäre dies die Ausgabespalte.

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

Vision-Feinabstimmung

Der Datensatz zum Feinabstimmen 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 Ultraschalluntersuchungen 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 geschriebene Beschriftung, die es beschreibt. Das Ziel ist es, ein VLM zu feinabstimmen, um es zu einem nützlichen Analysetool für medizinische Fachkräfte zu machen.

Werfen wir einen Blick auf den Datensatz und prüfen, was das erste Beispiel zeigt:

Bild
Beschriftung

Panoramische Radiographie 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-Feinabstimmungsaufgaben wie folgt formatiert werden:

Wir erstellen eine benutzerdefinierte Anweisung, die das VLM auffordert, ein erfahrener Radiograph 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 die Feinabstimmung:

Das erste Beispiel ist jetzt wie unten strukturiert:

Bevor wir mit der Feinabstimmung beginnen: Weiß das Vision-Modell vielleicht bereits, wie man die Bilder analysiert? Prüfen wir das!

Und das Ergebnis:

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

Zuletzt aktualisiert

War das hilfreich?