Weiter zum Inhalt
Künstliche Intelligenz

FLAN-T5 Tutorial: Leitfaden und Fine-Tuning

Ein kompletter Leitfaden für das Fine-Tuning eines FLAN-T5-Modells für Question-Answering mit der Transformers-Bibliothek und optimierter Inferenz in einem realen Szenario.
Zoumana Keita 's photo
Zoumana Keita
Aktualisiert · 15 Min. lesen

Entdecke KI

ChatGPTClaudePerplexity

Erstelle dein kostenloses Konto

Üben und Lernpfad deinen Fortschritt.

Weiter Mit Google
Durch Klick auf die Schaltfläche akzeptierst du unsere Nutzungsbedingungen, unsere Datenschutzrichtlinie und die Speicherung deiner Daten in den USA.

Was ist FLAN-T5?

FLAN-T5 ist ein Open-Source-Sprachmodell im Sequence-to-Sequence-Format, das auch kommerziell genutzt werden kann. Das Modell wurde Ende 2022 von Google-Forschenden veröffentlicht und auf eine Vielzahl von Aufgaben feinabgestimmt.

Das T5-Modell bildet unterschiedliche Aufgaben in ein Text-zu-Text-Format ab, etwa Übersetzung, linguistische Akzeptabilität, Satzähnlichkeit und Textzusammenfassung – wie unten gezeigt:

Beispiele dafür, wie T5 verschiedenste Aufgaben ins Text-zu-Text-Framework überführt (Quelle)

Beispiele dafür, wie T5 verschiedenste Aufgaben ins Text-zu-Text-Framework überführt (Quelle)

Auch die Architektur von T5 orientiert sich eng an der Encoder-Decoder-Struktur aus dem ursprünglichen Transformer-Paper. Der größte Unterschied liegt in Umfang und Art der Trainingsdaten: T5 wurde auf dem 750-GB-Korpus Colossal Clean Crawled Corpus (C4) trainiert.

Der originale Transformer hingegen wurde speziell für maschinelle Übersetzung entwickelt und auf 1,4 GB englisch-deutschen Satzpaaren trainiert.

Unser Artikel An Introduction to Using Transformers and Hugging Face hilft dir, Transformer zu verstehen und für reale Anwendungsfälle zu nutzen.

Die Architektur des Transformer-Modells (Quelle)

Die Architektur des Transformer-Modells (Quelle)

Wie wichtig ist das Fine-Tuning von FLAN-T5?

Es besteht kein Zweifel, dass sich FLAN-T5 für zahlreiche NLP-Aufgaben einsetzen lässt.

Um sein volles Potenzial auszuschöpfen und für spezifische Anwendungen optimale Ergebnisse zu erzielen, ist Fine-Tuning jedoch entscheidend. Hier die wichtigsten Punkte, die die Bedeutung des Fine-Tunings von FLAN-T5 unterstreichen:

  • Fine-Tuning passt das Modell an eine konkrete Aufgabe an und verbessert seine Leistung genau dafür.
  • Es ermöglicht eine Maßschneiderung an deine Anforderungen und Daten.
  • Das Fine-Tuning von FLAN-T5 kann auf lokalen Workstations mit CPUs erfolgen – und macht das Modell so für mehr Nutzer zugänglich.
  • Diese Zugänglichkeit hilft insbesondere kleineren Organisationen oder Einzelpersonen ohne GPU-Ressourcen.
  • In Summe ist Fine-Tuning ein zentraler Schritt, um FLAN-T5 für konkrete Use Cases zu optimieren und maximalen Nutzen zu erzielen.

Ziel dieses Tutorials ist ein vollständiger Leitfaden zum Fine-Tuning von FLAN-T5 für ein Question-Answering-Szenario.

Dafür behandeln wir die benötigten Bibliotheken und Tools sowie die Einrichtung der Umgebung für das Fine-Tuning.

Anschließend zeigen wir, wie du das FLAN-T5-Modell lädst und deine Daten für das Fine-Tuning vorbereitest. Ist alles bereit, gehen wir Schritt für Schritt durch das Training und passen das Modell auf deinen Bedarf an.

Zum Schluss beleuchten wir mögliche Anwendungen des feinabgestimmten FLAN-T5 und zeigen, wie es in verschiedenen Szenarien bessere Performance und präzisere Ergebnisse liefert.

Mögliche Anwendungsfälle eines feinabgestimmten FLAN-T5

Bevor wir in die Technik einsteigen, werfen wir einen Blick auf potenzielle Anwendungen eines feinabgestimmten FLAN-T5. Unten findest du Beispiele für Chat- und Dialogzusammenfassung, Textklassifikation und Fast Healthcare Interoperability Resources (FHIR).

Drei mögliche Anwendungsfälle von feinabgestimmtem FLAN-T5

Drei mögliche Anwendungsfälle von feinabgestimmtem FLAN-T5

  • Chat- und Dialogzusammenfassung: FLAN-T5 kann Gespräche verdichten – etwa für kurze Recaps von Kundenservice-Interaktionen oder Meetings.
  • Textklassifikation: Nützlich, um Texte automatisch vordefinierten Klassen zuzuordnen, z. B. Sentiment-Analyse, Spam-Erkennung oder Topic Modeling.
  • FHIR-Ressourcenerzeugung: FLAN-T5 kann klinische Texte in strukturierte FHIR-Daten (Fast Healthcare Interoperability Resources) überführen, um sie einfacher zu teilen und in Gesundheitssysteme zu integrieren.

Vor den technischen Details: Unser Tutorial How to Build LLM Applications with LangChain zeigt dir, wie du das Potenzial großer Sprachmodelle mit LangChain, einem Open-Source-Python-Framework für fortgeschrittene KI-Anwendungen, ausschöpfst.

Voraussetzungen

Jetzt, da wir FLAN-T5 besser kennen, sieh dir an, wie du es für ein Question-Answering-Use-Case feinabstimmst. Das vollständige Notebook findest du auf GitHub.

Zu Beginn benötigst du folgende Bibliotheken und Tools:

  • Hugging Face: Plattform mit Zugriff auf das FLAN-T5-Modell, inkl. Download und Nutzung für Fine-Tuning
  • Transformers: Vereinfacht das Laden des vortrainierten FLAN-T5 und bietet hilfreiche Funktionen für das Fine-Tuning
  • Datasets: Sammlung sofort nutzbarer Datensätze – zentral, um passende Daten fürs Fine-Tuning zu beziehen
  • SentencePiece: Tokenizer, insbesondere für große und mehrsprachige Textdaten
  • Tokenizers: Tokenizer-Bibliothek, um Text in ein passendes Format zu überführen
  • Evaluate: Stellt eine breite Auswahl an Metriken zur Modellbewertung bereit, damit das feinabgestimmte Modell den Zielwerten entspricht
  • ROUGE Score: Spezifische Metrik zur Bewertung der Qualität von Texten aus großen Sprachmodellen
  • NLTK: Hilfreich für Vorverarbeitungsschritte wie Tokenisierung und Stemming

Installation der Bibliotheken

Die Installation erfolgt mit pip, dem Python-Paketmanager, direkt aus dem Jupyter-Notebook.

%%bash
pip install nltk
pip install datasets
pip install transformers[torch]
pip install tokenizers
pip install evaluate
pip install rouge_score
pip install sentencepiece
pip install huggingface_hub

Der Befehl %%bash lässt die Zelle als Bash-Skript ausführen, statt jeden Befehl einzeln laufen zu lassen.

Bibliotheken importieren

Nach der Installation können wir die Bibliotheken wie folgt importieren:

import nltk
import evaluate
import numpy as np
from datasets import load_dataset
from transformers import T5Tokenizer, DataCollatorForSeq2Seq
from transformers import T5ForConditionalGeneration, Seq2SeqTrainingArguments, Seq2SeqTrainer

FLAN-T5 laden

Auf Hugging Face gibt es FLAN-T5 in mehreren Größen von klein bis extra groß. Je größer das Modell, desto mehr Parameter.

Unten siehst du die verfügbaren Modellgrößen aus der Model Card von Hugging Face:

FLAN-T5-Varianten mit ihren Parametern und dem Speicherbedarf

FLAN-T5-Varianten mit ihren Parametern und dem Speicherbedarf

Die richtige Modellgröße wählen

Die Wahl der passenden Modellvariante hängt stark ab von:

  • Den Anforderungen deines Projekts
  • Verfügbaren Rechenressourcen
  • Der erwarteten Performance

Für dieses Experiment verwenden wir eine NVIDIA A100 GPU. Das Modell google/flan-t5-base bietet hier einen guten Kompromiss aus Effizienz und Leistung.

Initialisierung von Modell und Tokenizer

Die folgenden drei Schritte genügen, um das Modell zu erstellen.

# Load the tokenizer, model, and data collator
MODEL_NAME = "google/flan-t5-base"

tokenizer = T5Tokenizer.from_pretrained(MODEL_NAME)
model = T5ForConditionalGeneration.from_pretrained(MODEL_NAME)
data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=model)
  • Der Tokenizer wird über T5Tokenizer und den Modellnamen instanziiert.
  • Mit der Funktion from_pretrained aus T5ForConditionalGeneration wird das Modell geladen.
  • Mit DataCollatorForSeq2Seq wird ein Data Collator für die Question-Answering-Aufgabe erstellt.

Daten für das Fine-Tuning vorbereiten

Sind Modell, Tokenizer und Data Collator bereit, laden wir die Daten für das Fine-Tuning. Hier nutzen wir die Yahoo-Diskussionsdaten auf Hugging Face.

Das Laden ist unkompliziert und erfolgt mit der Funktion load_dataset, die den Datensatznamen als Parameter erhält. In diesem Fall konzentrieren wir uns auf die Trainingsdaten.

# Acquire the training data from Hugging Face
DATA_NAME = "yahoo_answers_qa"
yahoo_answers_qa = load_dataset(DATA_NAME)

Nach dem Laden teilen wir die Daten im Verhältnis 70 % zu 30 % in Trainings- und Testdaten auf. Das übernimmt train_test_split.

yahoo_answers_qa = yahoo_answers_qa["train"].train_test_split(test_size=0.3)

Die folgende Anweisung zeigt die Gesamtzahl der Beobachtungen in Trainings- und Testdaten.

# Check the length of the data and its structure
yahoo_answers_qa

Gesamtzahl der Beobachtungen in Trainings- und Validierungsdaten

Gesamtzahl der Beobachtungen in Trainings- und Validierungsdaten

Datenformatierung und Tokenisierung

Wir haben für das Fine-Tuning reichlich Daten in Training und Test. Vor dem Start bringen wir sie in das passende Format.

Viele der folgenden Funktionen sind vom Toughdata-Artikel inspiriert.

In der Inferenz rufen wir das Modell in folgendem Format auf:

„Please answer this question: <USER_QUESTION>“

Dabei ist <USER_QUESTION> die Frage, zu der die Antwort gewünscht ist. Um dieses Verhalten zu erreichen, präfixen wir die Trainingsdaten mit dem String „Please answer this question:“. Das erledigt die Funktion preprocess_function unten.

Zusätzlich tokenisiert die Funktion Eingaben und Ausgaben mit dem tokenizer.

# We prefix our tasks with "answer the question"
prefix = "Please answer this question: "

# Define the preprocessing function

def preprocess_function(examples):
   """Add prefix to the sentences, tokenize the text, and set the labels"""
   # The "inputs" are the tokenized answer:
   inputs = [prefix + doc for doc in examples["question"]]
   model_inputs = tokenizer(inputs, max_length=128, truncation=True)
  
   # The "labels" are the tokenized outputs:
   labels = tokenizer(text_target=examples["answer"], 
                      max_length=512,         
                      truncation=True)

   model_inputs["labels"] = labels["input_ids"]
   return model_inputs

Anschließend wenden wir die Funktion mit map auf den gesamten Datensatz an:

# Map the preprocessing function across our dataset
tokenized_dataset = yahoo_answers_qa.map(preprocess_function, batched=True)

Training und Fine-Tuning von FLAN-T5

Bevor wir mit dem Training starten, legen wir die Metriken zur Leistungsbewertung fest.

Gute Evaluationsmetriken sind in jedem Deep-Learning- und Machine-Learning-Projekt wichtig – während des Trainings und später in der Produktion.

Für Textgenerierungsmodelle sind BLEU und ROUGE sehr verbreitet. Hier vergleichen wir die Qualität einer erzeugten Antwort mit einer Referenzantwort.

In diesem Tutorial fokussieren wir uns auf ROUGE. Mehr zu BLEU findest du in diesem Wikipedia-Artikel.

Was ist der ROUGE-Score?

ROUGE steht für Recall-Oriented Understudy for Gisting Evaluation. Wichtige Komponenten von ROUGE für Question-Answering sind:

  • ROUGE-L: Misst die längste gemeinsame Teilfolge zwischen Kandidat und Referenz. Fokus auf Recall des Volltexts.
  • ROUGE-1, ROUGE-2, ROUGE-SU4: Vergleichen Uni-, Bi- und 4-Gramm-Überlappungen zwischen Kandidat und Referenz. Fokus auf wichtige Textteile.
  • Höhere ROUGE-Werte deuten generell auf bessere QA-Leistung hin. Werte ab etwa 0,70 gelten als stark.
  • Vorverarbeitung wie Stemming und Entfernen von Stoppwörtern kann die Ergebnisse verbessern.

Mit diesem Verständnis berechnet die folgende Hilfsfunktion compute_metrics den ROUGE-Score. Vorher richten wir ROUGE und NLTK ein.

nltk.download("punkt", quiet=True)
metric = evaluate.load("rouge")

Hier die Implementierung der Funktion.

def compute_metrics(eval_preds):
   preds, labels = eval_preds

   # decode preds and labels
   labels = np.where(labels != -100, labels, tokenizer.pad_token_id)
   decoded_preds = tokenizer.batch_decode(preds, skip_special_tokens=True)
   decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)

   # rougeLSum expects newline after each sentence
   decoded_preds = ["\n".join(nltk.sent_tokenize(pred.strip())) for pred in decoded_preds]
   decoded_labels = ["\n".join(nltk.sent_tokenize(label.strip())) for label in decoded_labels]

   result = metric.compute(predictions=decoded_preds, references=decoded_labels, use_stemmer=True)
  
   return result

Trainingsprozess

Für das Fine-Tuning legen wir einige Hyperparameter fest. Die wichtigsten sind:

  • Learning Rate: Steuert, wie schnell das Modell aus den Daten lernt. Typisch sind 1e-5 bis 5e-5, hier setzen wir 3e-4.
  • Batch-Größe: Anzahl Samples vor einem Gewichtsupdate. Größere Batches beschleunigen das Training, können aber die Leistung verschlechtern. Wir verwenden 8.
  • Per-Device Train Batch Size: Entspricht der Batch-Größe pro Gerät (GPU).
  • Weight Decay: Regulärisierung gegen Overfitting. Ein Wert von 0,01 ist gut praxiserprobt.
  • Save Total Limit: Anzahl der während des Trainings zu speichernden Checkpoints. Mehr Checkpoints erleichtern das Zurückrollen, benötigen aber mehr Speicher. Wir speichern 3.
  • Anzahl Epochen: Wie oft der Trainingsdatensatz komplett durchlaufen wird. Mehr Epochen bedeuten längere Trainingszeit, können aber die Leistung verbessern. Üblich sind 3 bis 10, hier nutzen wir 3.

Diese Parameter definieren wir unten und setzen damit die Trainingsargumente auf. Die Artefakte werden im Ordner results gespeichert:

# Global Parameters
L_RATE = 3e-4
BATCH_SIZE = 8
PER_DEVICE_EVAL_BATCH = 4
WEIGHT_DECAY = 0.01
SAVE_TOTAL_LIM = 3
NUM_EPOCHS = 3

# Set up training arguments
training_args = Seq2SeqTrainingArguments(
   output_dir="./results",
   evaluation_strategy="epoch",
   learning_rate=L_RATE,
   per_device_train_batch_size=BATCH_SIZE,
   per_device_eval_batch_size=PER_DEVICE_EVAL_BATCH,
   weight_decay=WEIGHT_DECAY,
   save_total_limit=SAVE_TOTAL_LIM,
   num_train_epochs=NUM_EPOCHS,
   predict_with_generate=True,
   push_to_hub=False
)

Als nächstes richten wir den Trainer ein und starten das Training.

trainer = Seq2SeqTrainer(
   model=model,
   args=training_args,
   train_dataset=tokenized_dataset["train"],
   eval_dataset=tokenized_dataset["test"],
   tokenizer=tokenizer,
   data_collator=data_collator,
   compute_metrics=compute_metrics
)

Schließlich starten wir das Training mit train:

trainer.train()

Nach rund vier Stunden liegen die Leistungswerte pro Epoche vor:

Trainingsepochen und zugehörige Performancescores

Trainingsepochen und zugehörige Performancescores

So liest du das Dashboard:

  • Training Loss und Validation Loss: Niedriger ist besser – die Werte sinken über die Epochen, mit den niedrigsten Werten in Epoche 3.
  • ROUGE-Metriken (ROUGE1, ROUGE2, ROUGEL, ROUGELsum): Höhere Werte sind besser und steigen über die Epochen – ebenfalls mit Spitzenwerten in Epoche 3.

Insgesamt performt das Modell in Epoche 3 am besten: niedrigste Verluste und höchste ROUGE-Werte. Unten der Inhalt des Ergebnisordners mit allen Checkpoints:

Inhalt des Ordners „results“

Inhalt des Ordners „results“

Modellinferenz

Jetzt, da das Modell feinabgestimmt ist, wollen wir es in einem realen Szenario anwenden.

Genau darum geht es bei der Inferenz: Ein vorhandenes Modell löst ein reales Problem – hier mit unserem feinabgestimmten Modell.

Davor erledigen wir ein paar Schritte:

  • Lade das feinabgestimmte Modell vom letzten Checkpoint
last_checkpoint = "./results/checkpoint-22500"

finetuned_model = T5ForConditionalGeneration.from_pretrained(last_checkpoint)
tokenizer = T5Tokenizer.from_pretrained(last_checkpoint)
  • Definiere eine konkrete Frage
my_question = "What do you think about the benefit of Artificial Intelligence?"
inputs = "Please answer to this question: " + my_question
  • Starte die Vorhersage
inputs = tokenizer(inputs, return_tensors="pt")
outputs = finetuned_model.generate(**inputs)
answer = tokenizer.decode(outputs[0])
from textwrap import fill

print(fill(res, width=80))

Unten siehst du das Ergebnis des feinabgestimmten Modells – es wirkt überzeugend. Die Funktion fill aus textwrap begrenzt die Zeilenlänge auf maximal 80 Zeichen, statt alles in einer Zeile auszugeben.

Antwort des feinabgestimmten Modells auf die Frage

Antwort des feinabgestimmten Modells auf die Frage

Fazit und nächste Schritte

Dieser Artikel bietet einen vollständigen Leitfaden für das Fine-Tuning eines FLAN-T5-Modells. Zuerst haben wir Modell und Anwendungsfälle eingeordnet, dann die technische Umsetzung durchlaufen – vom Laden der Experimentdaten und des Modells von Hugging Face bis hin zum Training auf der GPU. Das beste Modell gemäß ROUGE-Werten wurde in einem realen Szenario getestet.

Wie geht es weiter?

Unsere Artikel 12 GPT-4 Open-Source Alternatives und How to Train a LLM with PyTorch sind ideale nächste Schritte für deine Weiterbildung. Der erste zeigt Open-Source-Alternativen zu GPT-4, die ähnliche Leistung bieten und weniger Rechenressourcen benötigen. Diese Projekte enthalten Anleitungen, Code, Modellgewichte, Datensätze und Chatbot-UIs.

Der zweite Artikel hilft dir, das Training großer Sprachmodelle mit PyTorch von der Einrichtung bis zur Implementierung zu meistern. Bring deine Kompetenzen mit dem leistungsstarken Deep-Learning-Framework der KI-Profis aufs nächste Level. Starte noch heute mit dem Kurs Deep Learning with PyTorch.

Themen
Künstliche Intelligenz
Ähnlich

Blog

Die 36 wichtigsten Fragen und Antworten zum Thema generative KI für 2026

Dieser Blog hat eine ganze Reihe von Fragen und Antworten zu generativer KI, von den Grundlagen bis hin zu fortgeschrittenen Themen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Blog

Top 50+ AWS-Interviewfragen und Antworten für 2026

Ein kompletter Guide mit grundlegenden, fortgeschrittenen und szenariobasierten AWS-Interviewfragen – mit Beispielen aus der Praxis.
Zoumana Keita 's photo

Zoumana Keita

15 Min.

Blog

Arten von KI-Agenten: Ihre Rollen, Strukturen und Anwendungen verstehen

Lerne die wichtigsten Arten von KI-Agenten kennen, wie sie mit ihrer Umgebung interagieren und wie sie in verschiedenen Branchen eingesetzt werden. Verstehe einfache reflexive, modellbasierte, zielbasierte, nutzenbasierte, lernende Agenten und mehr.

Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

15 Min.

Tutorial

Python Switch Case Statement: Ein Leitfaden für Anfänger

Erforsche Pythons match-case: eine Anleitung zu seiner Syntax, Anwendungen in Data Science und ML sowie eine vergleichende Analyse mit dem traditionellen switch-case.
Matt Crabtree's photo

Matt Crabtree

5 Min.

Tutorial

Python-Lambda-Funktionen: Ein Leitfaden für Anfänger

Lerne mehr über Python-Lambda-Funktionen, wozu sie gut sind und wann man sie benutzt. Enthält praktische Beispiele und bewährte Methoden für eine effektive Umsetzung.
Mark Pedigo's photo

Mark Pedigo

10 Min.

Mehr anzeigen