💬Chat-Vorlagen

Lerne die Grundlagen und Anpassungsmöglichkeiten von Chat-Vorlagen, einschließlich Conversational, ChatML, ShareGPT, Alpaca-Formate und mehr!

In unserem GitHub haben wir eine Liste aller Chat-Vorlagen, die Unsloth verwendet, einschließlich für Llama, Mistral, Phi-4 usw. Wenn Sie also Hinweise zur Formatierung oder zum Anwendungsfall benötigen, können Sie sie hier einsehen: github.com/unslothai/unsloth/blob/main/unsloth/chat_templates.pyarrow-up-right

Liste der Colab-Chatvorlagen-Notebooks:

Neue Token hinzufügen

Unsloth hat eine Funktion namens add_new_tokens die es Ihnen ermöglicht, neue Token zu Ihrem Finetuning hinzuzufügen. Zum Beispiel, wenn Sie <CHARACTER_1>, <THINKING> und <SCRATCH_PAD> hinzufügen möchten, 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(...)
circle-exclamation

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!

Anpassbare Chatvorlagen

Wir können nun die Chatvorlage für das Finetuning selbst angeben. Das sehr berühmte Alpaca-Format ist unten:

Aber denken Sie daran, wir sagten, dies sei eine schlechte Idee, weil ChatGPT‑Stil-Finetunes nur 1 Eingabeaufforderung erfordern? Da wir erfolgreich alle Datensatzspalten mit Unsloth in eine einzige zusammengeführt haben, können wir im Wesentlichen die unten gezeigte Chatvorlage im Stil mit 1 Eingabespalte (instruction) und 1 Ausgabe erstellen:

Wir verlangen nur, dass Sie ein {INPUT} Feld für die Anweisung und ein {OUTPUT} Feld für das Ausgabeergebnis des Modells einfügen. Tatsächlich erlauben wir optional ein {SYSTEM} Feld, das nützlich ist, um eine Systemaufforderung wie in ChatGPT anzupassen. Zum Beispiel sind unten einige coole Beispiele, mit denen Sie die Chatvorlage anpassen können:

Für das ChatML-Format, das in OpenAI-Modellen verwendet wird:

Oder Sie können die Llama-3-Vorlage selbst verwenden (die nur funktioniert, wenn die Instruct-Version von Llama-3 verwendet wird): Tatsächlich erlauben wir optional ein {SYSTEM} Feld, das ebenfalls nützlich ist, um eine Systemaufforderung wie in ChatGPT anzupassen.

Oder bei der Titanic-Vorhersageaufgabe, bei der Sie vorhersagen mussten, ob ein Passagier gestorben oder überlebt hat, in diesem Colab-Notebook, das CSV- und Excel-Uploads enthält: https://colab.research.google.com/drive/1VYkncZMfGFkeCEgN2IzbZIKEDkyQuJAS?usp=sharingarrow-up-right

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: \

Weitere Informationen

Vorausgesetzt, Ihr Datensatz ist eine Liste von Listen von Dictionaries wie unten:

Sie können unser get_chat_template verwenden, um es zu formatieren. Wählen Sie chat_template aus, um eines von zephyr, chatml, mistral, llama, alpaca, vicuna, vicuna_old, unslothzu sein, und verwenden Sie mapping um die Wörterbuchwerte abzubilden von, value usw. map_eos_token ermöglicht es Ihnen, <|im_end|> ohne weiteres Training auf EOS abzubilden.

Sie können auch Ihre eigenen benutzerdefinierten Chatvorlagen erstellen! Zum Beispiel ist unsere interne Chatvorlage, die wir verwenden, unten. Sie müssen ein Tupel aus (custom_template, eos_token) übergeben, wobei das eos_token im Template verwendet werden muss.

Zuletzt aktualisiert

War das hilfreich?