Ressourcen/Modelltraining/Datensätze

Konzept

Öffentliche Datensätze von Hugging Face

Was ein öffentlicher Hugging Face-Datensatz enthält, in welchen gängigen Formaten solche Datensätze vorliegen und warum einige Datensätze zu Chats werden, andere zu Dokumenten und wieder andere überhaupt nicht für das Training verwendet werden können.

Kapitel 44 Min. Lesezeit4 Quellen

Was ein öffentlicher Datensatz enthält

Der Hugging Face Hub hostet Hunderttausende öffentlicher Datensätze, von wenigen Hundert bis zu Milliarden von Zeilen. Ein Datensatz ist eine Tabelle: Jede Zeile ist ein Element, jede Spalte ein Feld. Größere Datensätze werden in Konfigurationen (Teilmengen, wie z. B. eine Sprache) und Splits (meistens Training, Validierung und Test) unterteilt. Der Hub schreibt nicht vor, was die Spalten bedeuten, daher wird jeder Datensatz von seinen Autoren gestaltet: eine Liste von Chat-Runden im einen, eine Frage- und eine Antwortspalte im anderen, eine ganze Webseite pro Zeile in einem dritten.

Nur einige dieser Formate können zu Trainings-Chats werden. Ein Mathematik-Datensatz mit einer Frage und einem Lösungsweg kann das; ein Datensatz von Tweets, die mit einer Emotion versehen sind, nicht, da er angibt, was ein Text ist, und nicht, wie man darauf antwortet. Vor dem Import prüft Scalata den von Ihnen gewählten Split und schlägt die passenden Formate vor.

Welche Spalte fragt und welche antwortet

Um zu einem Trainings-Chat zu werden, benötigt jede Zeile einen Teil, den der Nutzer sagt, und einen Teil, den der Assistent antwortet. In den meisten Datensätzen verraten die Spaltennamen dies bereits: Prompt, Frage, Anweisung oder Abfrage auf der einen Seite; Reaktion, Antwort, Ausgabe oder Vervollständigung auf der anderen. Einige Datensätze fügen eine Kontext-Spalte hinzu — einen Textabschnitt, auf den sich die Frage bezieht, wie in SQuAD — oder einen System-Prompt. Andere Spalten, wie eine ID, eine Webadresse oder eine Kategorie, beschreiben die Zeile und spielen im Chat keine Rolle.

SpalteInhaltRolle
instructionText · kurzPrompt
contextText · lang, oft leerKontext, unter der Frage hinzugefügt
responseText · langAntwort
categoryKurzer Text · wenige unterschiedliche WerteNicht verwendet
Die Spalten von databricks-dolly-15k und die Rolle, die jede in einem Trainings-Chat spielt: Die Anweisung fragt, die Antwort antwortet, der Kontext wird unter der Frage hinzugefügt und die Kategorie wird weggelassen. Das Ergebnis ist das Prompt-und-Antwort-Format, mit Kontext.

Scalata schlägt die Formate vor, die zu dem von Ihnen gewählten Datensatz passen, jeweils mit einer kurzen Begründung. Wenn Sie es besser wissen, können Sie mit Spalten manuell auswählen jedes beliebige Format und jede beliebige Spalte wählen; Zeilen, die nicht passen, werden übersprungen.

Die Formate

ChatTypisch z. B. HuggingFaceH4/ultrachat_200k, HuggingFaceH4/no_robots#

Eine Spalte enthält eine Liste von Turns, als role/content-Paare oder im ShareGPT-Stil mit from/value. Dies kommt einem Trainings-Chat am nächsten; Multi-Turn-Unterhaltungen bleiben Multi-Turn.

Prompt und AntwortTypisch z. B. openai/gsm8k, rajpurkar/squad, databricks/databricks-dolly-15k#

Eine Spalte für Fragen und eine für Antworten, optional mit einer Kontext-Spalte, die unter der Frage hinzugefügt wird. Jede Zeile wird zu einem Single-Turn-Chat.

Instruction (Alpaca)Typisch z. B. tatsu-lab/alpaca#

Eine instruction, ein optionaler input, auf den sie sich bezieht, und ein output. Benannt nach dem Alpaca-Datensatz von Stanford, der dieses Format populär gemacht hat. Instruction und Input werden zusammen zur Benutzernachricht.

Eine Zeile im Alpaca-Stil
instruction: Summarise the customer's complaint in one sentence.
input:       I ordered the blue model on the 3rd, was charged twice and still have no tracking number.
output:      The customer was charged twice for an order that has not shipped.
PräferenzTypisch z. B. Anthropic/hh-rlhf#

Eine bessere (chosen) und eine schlechtere (rejected) Antwort auf denselben Prompt, oder zwei vollständige Unterhaltungen, die sich nur am Ende unterscheiden. Diese Zeilen werden zu Präferenzpaaren für DPO anstelle von einzelnen Antworten.

Eine Präferenz-Zeile
prompt:   Can I change my delivery address after ordering?
chosen:   Yes, until the parcel ships. Open Orders → your order → Edit address…
rejected: Please contact support.
TranskriptTypisch z. B. timdettmers/openassistant-guanaco#

Eine Textspalte enthält eine vollständige Unterhaltung mit Sprecher-Labels, die Scalata in Turns aufteilt. Der Text vor dem ersten Label wird zum System-Prompt.

Häufige Sprecher-Labels in Transkript-Datensätzen
### Human: …  ### Assistant: …
Human: …  Assistant: …
User: …  Assistant: …
<|system|> …  <|user|> …  <|assistant|> …      (also <|im_start|>user)
[INST] <<SYS>> … <</SYS>> … [/INST] …          (Llama 2 style)
### Instruction: …  ### Input: …  ### Response: …
Question: …  Answer: …
Reiner TextTypisch z. B. HuggingFaceFW/fineweb#

Langer Text ohne Fragen, Antworten oder Sprecher-Labels: Webseiten, Artikel, Bücher. Da es nichts zu beantworten gibt, eignet sich dies nicht für das Chat-Training, ist aber nützlich für fortgesetztes Pre-Training.

Drei Ergebnisse

Chats
Eine ZeileChat, Prompt und Antwort, Alpaca, Präferenz oder Transkript→Ein Trainingsbeispiel
Klartext
aufeinanderfolgende ZeilenWebseiten, Artikel, Bücher→Dokumente→fortgesetztes Pre-Training oder Q&A-Generierung
Nicht unterstützt
Text + Klassen-LabelNur Bilder oder AudioZahlentabellen

Mit Begründung dargestellt. Ein als „Freude“ gekennzeichneter Tweet sagt aus, was ein Text ist, nicht, wie man darauf antwortet.

Jeder öffentliche Datensatz landet an einem von drei Orten. Nur Zeilen mit einer Frage und einer Antwort werden zu Chats.
  • Chats. Jede Zeile wird zu einem Beispiel, bereit für überwachtes Training (oder DPO, bei Präferenz-Zeilen).
  • Reiner Text. Zeilen werden zu Dokumenten zusammengefasst und den Dokumenten des Datensatzes hinzugefügt, bereit für fortgesetztes Pre-Training oder um daraus Fragen und Antworten zu generieren.
  • Nicht unterstützt, mit entsprechender Begründung. Typische Fälle sind Klassifizierungsdaten (ein kurzer Text und ein Label, wie cardiffnlp/tweet_eval), reine Bild- oder Audiodaten oder Zahlentabellen.
Import von databricks-dolly-15k
  1. Sie wählen den Datensatz und seinen Train-Split aus, etwa 15.000 von Menschen verfasste Anweisungs-/Antwort-Paare.
  2. Der Datensatz hat vier Spalten: instruction (kurz), context (lang, oft leer), response (lang) und category (eine Handvoll wiederholter Labels).
  3. Prompt und Antwort passen hier am besten: instruction → Prompt, response → Antwort, context wird unter der Frage hinzugefügt. category wird ausgelassen.
  4. Sie importieren 2.000 Zeilen. Diese werden zu 2.000 Single-Turn-Beispielen. Ein späterer erneuter Import mit 5.000 Zeilen fügt nur die 3.000 neuen hinzu.

Wie man öffentliche Daten richtig nutzt

  • Lesen Sie zuerst die Dataset Card. Sie gibt Auskunft über die Lizenz, die Herkunft der Daten und bekannte Probleme. Einige Datensätze dürfen nicht kommerziell genutzt werden.
  • Bevorzugen Sie Passgenauigkeit vor Größe. Ein öffentlicher Datensatz vermittelt seinen eigenen Stil und seine eigenen Themen. Ein paar Tausend Zeilen, die Ihrem Anwendungsfall ähneln, helfen meist mehr als ein riesiger, allgemeiner Datensatz.
  • Mischen Sie mit Ihren eigenen Daten. Öffentliche Chats sind eine gute Basis für allgemeines Verhalten; Ihre eigenen Chats vermitteln das, was für Sie spezifisch ist.
  • Sehen Sie sich einige importierte Beispiele an, bevor Sie mit dem Training beginnen, um sicherzustellen, dass die Rollen dort gelandet sind, wo Sie es erwartet haben.

Häufige Fehler

  • Einen Klassifizierungsdatensatz importieren und erwarten, dass er dem Modell beibringt, wie man antwortet.
  • Die Lizenz auf der Dataset Card nicht lesen, bevor ein Modell trainiert wird, das Sie kommerziell nutzen möchten.
  • Ein manuelles Mapping erzwingen, das die Antwortspalte in die Prompt-Rolle setzt, sodass das Modell lernt, mit Fragen zu antworten.
  • Einen riesigen allgemeinen Datensatz importieren und die wenigen hundert Chats übertönen, die Ihre eigentliche Aufgabe beschreiben.
  • Den Test-Split eines öffentlichen Datensatzes als Trainingsdaten verwenden und dann anhand von Benchmarks evaluieren, die darauf basieren.

Quellen und weiterführende Literatur

Externe Quellen werden in einem neuen Tab geöffnet.

  1. 01DatasetsHugging Face docs · huggingface.coWie Hub-Datensätze in Konfigurationen, Splits, Zeilen und Spalten organisiert sind.
  2. 02Dataset CardsHugging Face Hub docs · huggingface.coWas Ihnen eine Dataset Card verraten sollte: Quellen, Lizenz, Verwendungszweck und Einschränkungen.
  3. 03Dataset formats and typesHugging Face TRL docs · huggingface.coDie gängigen Formate für Trainingsdaten — konversationell, Prompt-Vervollständigung, Präferenz — im direkten Vergleich.
  4. 04Alpaca: A Strong, Replicable Instruction-Following ModelStanford CRFM, 2023 · crfm.stanford.eduWoher das Layout mit Anweisung, Eingabe und Ausgabe stammt.

Verwandeln Sie wochenlange Expertenarbeit in Minuten

Erfahren Sie, wie Scalata zu Ihrem Team, Ihren Daten und Ihren Kontrollen passt.

Vertrieb kontaktieren