For the complete documentation index, see llms.txt. This page is also available as Markdown.

💬Chat-Vorlagen

Lerne die Grundlagen und Anpassungsoptionen von Chat-Vorlagen kennen, einschließlich Conversational-, ChatML-, ShareGPT-, Alpaca-Formate und mehr!

In unserem GitHub haben wir eine Liste jeder Chat-Vorlage, die Unsloth verwendet, einschließlich für Llama, Mistral, Phi-4 usw. Wenn ihr also Hinweise zur Formatierung oder zum Anwendungsfall braucht, könnt ihr sie hier ansehen: github.com/unslothai/unsloth/blob/main/unsloth/chat_templates.py

Liste der Colab-Notebooks für Chat-Vorlagen:

Neue Tokens hinzufügen

Unsloth hat eine Funktion namens add_new_tokens mit der ihr neue Tokens zu eurem Finetuning hinzufügen könnt. Wenn ihr zum Beispiel hinzufügen wollt <CHARACTER_1>, <THINKING> und <SCRATCH_PAD> können wir Folgendes tun:

model, tokenizer = FastLanguageModel.from_pretrained(...)
from unsloth import add_new_tokens
add_new_tokens(model, tokenizer, new_tokens = ["<CHARACTER_1>", "<THINKING>", "<SCRATCH_PAD>"])

model = FastLanguageModel.get_peft_model(...)

Mehrturn-Konversationen

Ein Problem, falls du es nicht bemerkt hast, ist, dass der Alpaca-Datensatz nur eine einzelne Gesprächsrunde hat, während die Verwendung von ChatGPT interaktiv war und du in mehreren Runden mit ihm sprechen kannst. Zum Beispiel ist links das, was wir wollen, aber rechts, der Alpaca-Datensatz, bietet nur einzelne Gespräche. Wir wollen, dass das feinabgestimmte Sprachmodell irgendwie lernt, wie man mehrrundige Gespräche führt, genau wie ChatGPT.

Also haben wir den conversation_extension Parameter eingeführt, der im Wesentlichen einige zufällige Zeilen in deinem Ein-Runden-Datensatz auswählt und sie zu 1 Gespräch zusammenführt! Wenn du ihn zum Beispiel auf 3 setzt, wählen wir zufällig 3 Zeilen aus und führen sie zu 1 zusammen! Wenn du ihn zu lang setzt, kann das Training langsamer machen, aber deinen Chatbot und die finale Feinabstimmung deutlich verbessern!

Dann setze output_column_name an die Vorhersage-/Ausgabespalte. Für den Alpaca-Datensatz wäre es die Ausgabespalte.

Dann verwenden wir die standardize_sharegpt Funktion, um das Datenset einfach in ein korrektes Format für die Feinabstimmung zu bringen! Immer aufrufen!

Anpassbare Chat-Vorlagen

Wir können nun die Chat-Vorlage für die Feinabstimmung selbst festlegen. Das sehr berühmte Alpaca-Format ist unten:

Aber erinnere dich, wir sagten, das sei eine schlechte Idee, weil ChatGPT-ähnliche Feinabstimmungen nur 1 Prompt erfordern? Da wir mit Unsloth erfolgreich alle Datensatzspalten in 1 zusammengeführt haben, können wir im Wesentlichen die unten stehende Chat-Vorlage mit 1 Eingabespalte (Anweisung) und 1 Ausgabe erstellen:

Wir verlangen lediglich, dass du ein {INPUT} Feld für die Anweisung und ein {OUTPUT} Feld für das Ausgabefeld des Modells einfügst. Wir erlauben tatsächlich auch ein optionales {SYSTEM} Feld, das nützlich ist, um einen System-Prompt ähnlich wie in ChatGPT anzupassen. Unten sind zum Beispiel einige coole Beispiele, wie du die Chat-Vorlage anpassen kannst:

Für das in OpenAI-Modellen verwendete ChatML-Format:

Oder du kannst die Llama-3-Vorlage selbst verwenden (die nur mit der Instruct-Version von Llama-3 funktioniert): Wir erlauben tatsächlich auch ein optionales {SYSTEM} Feld, das nützlich ist, um einen System-Prompt ähnlich wie in ChatGPT anzupassen.

Oder in der Titanic-Vorhersageaufgabe, bei der du in diesem Colab-Notebook mit CSV- und Excel-Upload vorhersagen musstest, ob ein Passagier gestorben oder überlebt hat: https://colab.research.google.com/drive/1VYkncZMfGFkeCEgN2IzbZIKEDkyQuJAS?usp=sharing

Chat-Vorlagen mit Unsloth anwenden

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

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

    Dies gibt die Liste der Vorlagen aus, die derzeit von Unsloth unterstützt werden. Hier ist eine Beispielausgabe:\

    \

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

    \

  • Definiert eure Formatierungsfunktion. Hier ist ein Beispiel:\

    Diese Funktion läuft durch euren Datensatz und wendet die von euch definierte Chat-Vorlage auf jedes Beispiel an.\

  • Lassen wir nun den Datensatz laden und die erforderlichen Änderungen an unserem Datensatz vornehmen: \

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

Weitere Informationen

Angenommen, euer Datensatz ist eine Liste von Listen von Dictionaries wie unten:

Ihr könnt unser get_chat_template verwenden, um es zu formatieren. Wählt chat_template als eines von zephyr, chatml, mistral, llama, alpaca, vicuna, vicuna_old, unsloth, und verwendet mapping um die Dictionary-Werte zuzuordnen from, value usw. map_eos_token ermöglicht es euch, <|im_end|> ohne jegliches Training auf EOS abzubilden.

Ihr könnt auch eure eigenen benutzerdefinierten Chat-Vorlagen erstellen! Zum Beispiel ist unsere interne Chat-Vorlage, die wir verwenden, unten zu sehen. Ihr müsst ein Tupel von (custom_template, eos_token) übergeben, wobei das eos_token innerhalb der Vorlage verwendet werden muss.

Zuletzt aktualisiert

War das hilfreich?