📈Datensatz-Anleitung

Lerne, wie man einen Datensatz für Finetuning 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 auch, wie man Datensätze innerhalb von Unsloth verwendet.

Ein zentraler Teil bei der Erstellung eines Datensatzes ist Ihr Chat-Template und wie Sie es entwerfen 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, damit das Modell Bedeutung und Kontext besser versteht.

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

Roher Text aus einer Quelle wie einer Website, einem Buch oder einem Artikel.

Fortgesetztes Pretraining (CPT)

Instruktion

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

Überwachtes Fine-Tuning (SFT)

Konversation

Mehrstufige Konversation zwischen einem Benutzer und einem KI-Assistenten.

Überwachtes Fine-Tuning (SFT)

RLHF

Konversation zwischen einem Benutzer 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 erwähnenswert, dass für jede dieser Typen verschiedene Stilformen des Formats 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 zu verwenden ist.

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 gibt uns Aufschluss darüber, welche Datenquellen wir verwenden werden, um das gewünschte Ergebnis zu erreichen.

Zum Beispiel könnte die gewünschte Ausgabetype 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 Erlernen einer Sprache trainieren möchten.

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

circle-check

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 Pretraining, verwenden wir das 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 möchten, dass das Modell in einem einzelnen Schritt Text basierend auf einer spezifischen Anweisung ausgibt, können wir Instruktions- Format im Alpaca-Stilarrow-up-right

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

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

Das andere gängige Format ist OpenAIs ChatML-Format, das Hugging Face standardmäßig verwendet. Dies ist wahrscheinlich das am weitesten verbreitete Format und wechselt zwischen Benutzer und Assistent

Anwenden von Chat-Vorlagen mit Unsloth

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

  • Überprü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 Sie 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 an unserem Datensatz an: \

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

Daten formatieren Q&A

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

A: Wenn Ihr Datensatz bereits im Alpaca-Format vorliegt, befolgen Sie die Formatierungsschritte wie im Llama3.1 gezeigt notebook arrow-up-right. Wenn Sie Ihre Daten in das Alpaca-Format konvertieren müssen, ist ein Ansatz, 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: Der chat_template Das Attribut, wenn ein Modell erstmals von den ursprünglichen Modellbesitzern hochgeladen wird, enthält manchmal Fehler und kann einige Zeit benötigen, um aktualisiert zu werden. Im Gegensatz dazu prüfen wir bei Unsloth gründlich und beheben 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 Dokumentation zu Chat-Templates seitearrow-up-right.

F: Was ist, wenn mein Template derzeit nicht von Unsloth unterstützt wird?

A: Reichen Sie eine Funktionsanforderung 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 Funktionsanforderung genehmigt und zusammengeführt wurde.

Synthetische Datengenerierung

Sie können auch ein lokales LLM wie Llama 3.3 (70B) oder OpenAIs GPT 4.5 verwenden, um synthetische Daten zu generieren. Im Allgemeinen ist es besser, ein größeres Modell wie Llama 3.3 (70B) zu verwenden, um die bestmögliche Ausgabequalität zu gewährleisten. Sie können direkt Inferenz-Engines wie vLLM, Ollama oder llama.cpp verwenden, um synthetische Daten zu erzeugen, aber es erfordert einige manuelle Arbeit, sie zu sammeln und weitere Daten anzufordern. Es gibt 3 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 mithilfe lokaler Modelle wie Llama 3.2 bereitzustellen. Greife 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 generieren

  • Bereinigt und filtert die Daten automatisch

  • Feinjustiert den Datensatz mit Unsloth + Llama

  • Das Notebook läuft vollständig lokal ohne Notwendigkeit von API-Aufrufen

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 vorgegebene Struktur und auch den Kontext lernen, daher sollten Sie mindestens 10 Beispiel-Datensätze vorhanden haben. Beispiel-Prompts:

  • Prompt zur Generierung 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 generierten Daten zu überprüfen, um irrelevante oder minderwertige Antworten zu entfernen oder zu verbessern. Je nach 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 neu zu generieren, nun mit noch mehr Anleitung.

Datensatz-FAQ + Tipps

Wie groß sollte mein Datensatz sein?

Wir empfehlen im Allgemeinen, mindestens 100 Datenzeilen für das Fine-Tuning als bare Mindestmenge zu verwenden, um vernünftige Ergebnisse zu erzielen. Für optimale Leistung ist ein Datensatz mit über 1.000 Zeilen vorzuziehen; 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 fein abgestimmten 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 Modell für reasoning (Schlussfolgerung) 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/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, mit denen die Antwort abgeleitet wurde. 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 einen Standarddatensatz verwenden, diesmal jedoch ohne Reasoning in den Antworten. Dieser Trainingsprozess ist bekannt als Verstärkungslernen und GRPO.

Mehrere Datensätze

Wenn Sie mehrere Datensätze für das Fine-Tuning 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 feinzujustieren.

Kann ich dasselbe Modell mehrfach feinabstimmen?

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

Verwendung von Datensätzen in Unsloth

Alpaca-Datensatz

Siehe 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 Finetuning eines Basismodells wettbewerbsfähig mit ChatGPT machte.

Sie können auf die GPT4-Version des Alpaca-Datensatzes zugreifen hierarrow-up-right. Unten sind einige Beispiele aus dem Datensatz 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. Wir verwenden dies dann, um das Sprachmodell zu finetunen, und das machte es dem ChatGPT sehr ähnlich. Wir nennen diesen Prozess überwachtes Instruction-Finetuning.

Mehrere Spalten für Fine-Tuning

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

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

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

Wenn wir ChatGPT mit unserem "zusammengeführten" Einzelprompt 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 Finetuning-Bibliotheken verlangen, dass Sie Ihren Datensatz manuell für das Finetuning vorbereiten, indem Sie alle Spalten in einen Prompt zusammenführen. In Unsloth stellen wir einfach die Funktion to_sharegpt bereit,

https://colab.research.google.com/drive/1VYkncZMfGFkeCEgN2IzbZIKEDkyQuJAS?usp=sharing

  • Das ist jetzt etwas komplizierter, da wir viele Anpassungen erlauben, aber es gibt einige 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. Zum Beispiel, wenn die Spalte "input" leer ist, zeigt die Zusammenführungsfunktion den Text nicht an und überspringt ihn. Das ist nützlich für Datensätze mit fehlenden Werten. Wählen Sie die Ausgabe- oder Ziel-/Vorhersagespalte inoutput_column_name . 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.

Zum Beispiel, nehmen wir an, der Datensatz sieht so aus mit vielen fehlenden Daten:
Embarked
Age

Fare

23

18

7.25

S

  1. Dann wollen wir nicht, dass das Ergebnis lautet: Der Passagier ist in S eingeschifft worden. Sein Alter ist 23. Sein Fahrpreis ist.

  2. LEER Der Passagier ist in S eingeschifft worden. Sein Alter ist 23. Sein Fahrpreis istDer Passagier ist eingeschifft in

. Sein Alter ist 18. Sein Fahrpreis ist $7.25. [[]]Stattdessen können wir durch optionales Einschließen von Spalten mit

  1. diese Information vollständig ausschließen. Der Passagier ist in S eingeschifft worden. Sein Alter ist 23. Sein Fahrpreis ist.]]

  2. [[Der Passagier ist in S eingeschifft worden.]] [[Sein Alter ist 23.]] [[Sein Fahrpreis ist Der Passagier ist in S eingeschifft worden. Sein Alter ist 23. Sein Fahrpreis ist[[Der Passagier ist eingeschifft in

.]] [[Sein Alter ist 18.]] [[Sein Fahrpreis ist $7.25.]]

  1. wird zu:

  2. Der Passagier ist in S eingeschifft worden. Sein Alter ist 23.

Mehrfachrunden-Konversationen

8. Mehrzugige Konversationen

Ein kleines Problem, falls es Ihnen nicht aufgefallen ist, ist, dass der Alpaca-Datensatz einstufig ist, während ChatGPT interaktiv ist und man in mehreren Zügen mit ihm sprechen kann. Zum Beispiel ist links, was wir wollen, aber rechts, was der Alpaca-Datensatz bietet, sind nur einzelne Unterhaltungen. Wir möchten, dass das feinabgestimmte Sprachmodell irgendwie lernt, mehrzugige Unterhaltungen genauso wie ChatGPT zu führen. Also haben wir den conversation_extension

Parameter eingeführt, der im Wesentlichen zufällige Zeilen in Ihrem einstufigen Datensatz auswählt und sie zu einer einzigen Konversation zusammenführt! Wenn Sie ihn z. B. auf 3 setzen, wählen wir zufällig 3 Zeilen aus und führen sie zu einer zusammen! Zu lange Einstellungen können das Training verlangsamen, könnten aber Ihren Chatbot und das finale Finetuning deutlich verbessern! Wählen Sie die Ausgabe- oder Ziel-/Vorhersagespalte in Setzen Sie dann

auf die Vorhersage- / Ausgabespalte. Für den Alpaca-Datensatz wäre dies die Ausgabespalte. Wir verwenden dann die standardize_sharegpt

Visuelles Feintuning

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

Wir verwenden eine Stichprobe 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 Bildbeschreibung. Ziel ist es, ein VLM zu fine-tunen, 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
Bildbeschreibung

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

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

Wir werden eine benutzerdefinierte Anweisung erstellen, in der das VLM gebeten wird, ein expertenhafter Radiologe zu sein. Beachten Sie auch, dass Sie anstelle nur einer Anweisung mehrere Runden hinzufügen können, um es zu einem dynamischen Gespräch zu machen.

Lassen Sie uns den Datensatz in das "korrekte" Format für das Fine-Tuning konvertieren:

Das erste Beispiel ist jetzt wie unten strukturiert:

Bevor wir mit dem Fine-Tuning beginnen: Weiß das Vision-Modell vielleicht bereits, wie man die Bilder analysiert? Lassen Sie es uns überprüfen!

Und das Ergebnis:

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

Zuletzt aktualisiert

War das hilfreich?