7.2. Fine-Tuning to follow instructions
Das Ziel dieses Abschnitts ist es zu zeigen, wie man ein bereits vortrainiertes Modell feinabstimmt, um Anweisungen zu befolgen, anstatt nur Text zu generieren, zum Beispiel, um auf Aufgaben als Chatbot zu reagieren.
Datensatz
Um ein LLM zur Befolgung von Anweisungen feinabzustimmen, ist es notwendig, einen Datensatz mit Anweisungen und Antworten zu haben, um das LLM feinabzustimmen. Es gibt verschiedene Formate, um ein LLM zur Befolgung von Anweisungen zu trainieren, zum Beispiel:
Das Beispiel des Apply Alpaca-Prompt-Stils:
Phi-3 Prompt-Stil Beispiel:
Training a LLM mit diesen Arten von Datensätzen anstelle von nur rohem Text hilft dem LLM zu verstehen, dass er spezifische Antworten auf die Fragen geben muss, die er erhält.
Daher ist eine der ersten Maßnahmen mit einem Datensatz, der Anfragen und Antworten enthält, diese Daten im gewünschten Eingabeformat zu modellieren, wie:
Dann ist es wie immer notwendig, den Datensatz in Trainings-, Validierungs- und Testsets zu unterteilen.
Batching & Data Loaders
Dann ist es notwendig, alle Eingaben und erwarteten Ausgaben für das Training zu batchen. Dazu ist es erforderlich:
Die Texte zu tokenisieren
Alle Samples auf die gleiche Länge zu paddeln (in der Regel wird die Länge so groß sein wie die Kontextlänge, die zum Vortrainieren des LLM verwendet wurde)
Die erwarteten Tokens zu erstellen, indem man den Input in einer benutzerdefinierten Collate-Funktion um 1 verschiebt
Einige Padding-Tokens durch -100 zu ersetzen, um sie vom Trainingsverlust auszuschließen: Nach dem ersten
endoftext
-Token alle anderenendoftext
-Tokens durch -100 ersetzen (da die Verwendung voncross_entropy(...,ignore_index=-100)
bedeutet, dass Ziele mit -100 ignoriert werden)[Optional] Auch alle Tokens, die zur Frage gehören, mit -100 zu maskieren, damit das LLM nur lernt, wie man die Antwort generiert. Im Apply Alpaca-Stil bedeutet dies, alles bis
### Response:
zu maskieren.
Damit erstellt, ist es Zeit, die Datenlader für jedes Dataset (Training, Validierung und Test) zu erstellen.
Vortrainiertes LLM laden & Feinabstimmung & Verlustüberprüfung
Es ist notwendig, ein vortrainiertes LLM zu laden, um es fein abzustimmen. Dies wurde bereits auf anderen Seiten besprochen. Dann ist es möglich, die zuvor verwendete Trainingsfunktion zu nutzen, um das LLM fein abzustimmen.
Während des Trainings ist es auch möglich zu sehen, wie der Trainingsverlust und der Validierungsverlust während der Epochen variieren, um zu überprüfen, ob der Verlust reduziert wird und ob Overfitting auftritt. Denken Sie daran, dass Overfitting auftritt, wenn der Trainingsverlust reduziert wird, der Validierungsverlust jedoch nicht reduziert wird oder sogar steigt. Um dies zu vermeiden, ist das Einfachste, das Training in der Epoche zu stoppen, in der dieses Verhalten beginnt.
Antwortqualität
Da dies keine Klassifikationsfeinabstimmung ist, bei der man den Verlustvariationen mehr vertrauen kann, ist es auch wichtig, die Qualität der Antworten im Testset zu überprüfen. Daher wird empfohlen, die generierten Antworten aus allen Testsets zu sammeln und ihre Qualität manuell zu überprüfen, um zu sehen, ob es falsche Antworten gibt (beachten Sie, dass es möglich ist, dass das LLM das Format und die Syntax des Antwortsatzes korrekt erstellt, aber eine völlig falsche Antwort gibt. Die Verlustvariation wird dieses Verhalten nicht widerspiegeln). Beachten Sie, dass es auch möglich ist, diese Überprüfung durchzuführen, indem man die generierten Antworten und die erwarteten Antworten an andere LLMs weitergibt und sie bittet, die Antworten zu bewerten.
Weitere Tests zur Überprüfung der Qualität der Antworten:
Messung des Massive Multitask Language Understanding (MMLU): MMLU bewertet das Wissen und die Problemlösungsfähigkeiten eines Modells in 57 Fächern, einschließlich Geisteswissenschaften, Naturwissenschaften und mehr. Es verwendet Multiple-Choice-Fragen, um das Verständnis auf verschiedenen Schwierigkeitsgraden zu bewerten, von elementar bis fortgeschritten.
LMSYS Chatbot Arena: Diese Plattform ermöglicht es Benutzern, Antworten von verschiedenen Chatbots nebeneinander zu vergleichen. Benutzer geben einen Prompt ein, und mehrere Chatbots generieren Antworten, die direkt verglichen werden können.
AlpacaEval: AlpacaEval ist ein automatisiertes Bewertungsframework, bei dem ein fortgeschrittenes LLM wie GPT-4 die Antworten anderer Modelle auf verschiedene Prompts bewertet.
Allgemeine Bewertung des Sprachverständnisses (GLUE): GLUE ist eine Sammlung von neun Aufgaben zum natürlichen Sprachverständnis, einschließlich Sentiment-Analyse, textueller Folgerung und Fragebeantwortung.
SuperGLUE: Aufbauend auf GLUE umfasst SuperGLUE herausforderndere Aufgaben, die für aktuelle Modelle schwierig sein sollen.
Über das Imitationsspiel-Benchmark (BIG-bench): BIG-bench ist ein großangelegtes Benchmark mit über 200 Aufgaben, die die Fähigkeiten eines Modells in Bereichen wie Schlussfolgern, Übersetzung und Fragebeantwortung testen.
Ganzheitliche Bewertung von Sprachmodellen (HELM): HELM bietet eine umfassende Bewertung über verschiedene Metriken wie Genauigkeit, Robustheit und Fairness.
OpenAI Evals: Ein Open-Source-Bewertungsframework von OpenAI, das das Testen von KI-Modellen auf benutzerdefinierten und standardisierten Aufgaben ermöglicht.
HumanEval: Eine Sammlung von Programmierproblemen, die zur Bewertung der Codegenerierungsfähigkeiten von Sprachmodellen verwendet wird.
Stanford Question Answering Dataset (SQuAD): SQuAD besteht aus Fragen zu Wikipedia-Artikeln, bei denen Modelle den Text verstehen müssen, um genau zu antworten.
TriviaQA: Ein großangelegter Datensatz von Trivia-Fragen und -Antworten sowie Beweis-Dokumenten.
und viele, viele mehr
Code zur Feinabstimmung nach Anweisungen
Sie finden ein Beispiel für den Code zur Durchführung dieser Feinabstimmung unter https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/gpt_instruction_finetuning.py
Referenzen
Last updated