Willkommen zurück zu unserer Serie über die Feinabstimmung von Sprachmodellen (LLMs)! In unserem vorherigen Beitrag haben wir die Feinabstimmung von LLMs mit Hugging Face (opens new window) erkundet. Heute richten wir unseren Fokus auf die OpenAI-Plattform. Während viele OpenAI hauptsächlich mit ChatGPT und dem API-Schlüsselzugriff zur Integration von KI-Funktionen in Verbindung bringen, gibt es noch eine weitere leistungsstarke Funktion: die Möglichkeit, Modelle an Ihre spezifischen Anforderungen anzupassen. Dieser Prozess ermöglicht es Ihnen, die umfangreiche Wissensbasis vortrainierter Modelle zu nutzen und gleichzeitig Kompatibilität und Optimierung mit Ihrem eigenen Datensatz sicherzustellen.
In diesem Blog zeigen wir Ihnen, wie Sie Ihr Modell mithilfe der OpenAI-API feinabstimmen können. Egal, ob Sie einen Chatbot verbessern, neue Arten von Geschichten erstellen oder ein System zur Beantwortung von Fragen einrichten möchten, dieser Beitrag zeigt Ihnen, wie Sie das Beste aus der Feinabstimmungsfunktion von OpenAI herausholen können.
# Voraussetzungen
Bevor wir beginnen, stellen Sie sicher, dass Sie die erforderlichen Pakete installiert haben. Sie benötigen das Paket datasets
zum Umgang mit unseren Daten und openai
zur Interaktion mit der OpenAI-API. Öffnen Sie Ihr Terminal und geben Sie den folgenden Befehl ein.
pip install datasets openai
Die datasets
-Bibliothek ist ein vielseitiges Werkzeug zum Laden und Manipulieren von Datensätzen, das besonders für maschinelles Lernen geeignet ist.
Verwandter Artikel: Wie man ein Empfehlungsmodell erstellt (opens new window)
# Laden des Datensatzes
Wir beginnen damit, unseren Datensatz zu laden. Zu Demonstrationszwecken verwenden wir einen auf Hugging Face verfügbaren Datensatz. So können Sie ihn laden:
from datasets import load_dataset
# Laden Sie Ihren Datensatz von Hugging Face
dataset = load_dataset("lamini/lamini_docs")
In diesem Code-Snippet laden wir unseren Datensatz mit dem Namen "lamini/lamini_docs". Ersetzen Sie dies durch den Namen Ihres Datensatzes, falls er anders lautet.
# Erkunden des Datensatzes
Bevor Sie mit der Feinabstimmung fortfahren, ist es wichtig, Ihren Datensatz zu verstehen. Werfen wir einen Blick auf die Struktur unseres Datensatzes:
dataset
Dies gibt Ergebnisse wie diese aus:
DatasetDict({
train: Dataset({
features: ['question', 'answer', 'input_ids', 'attention_mask', 'labels'],
num_rows: 1260
})
test: Dataset({
features: ['question', 'answer', 'input_ids', 'attention_mask', 'labels'],
num_rows: 140
})
})
Der nächste Schritt besteht darin, die benötigten Daten aus diesem Datensatz zu extrahieren und für das Training vorzubereiten.
Verwandter Artikel: Erstellen einer Bildsuchanwendung (opens new window)
# Formatieren der Daten für die Feinabstimmung
Der Datensatz ist in Trainings- und Testaufteilungen unterteilt. Wir werden nur die Trainingsdaten verwenden. Extrahieren wir diese.
import pandas as pd
train_dataset = dataset['train']
train_df = pd.DataFrame(train_dataset)
questions_answers = train_df[['question', 'answer']]
In diesem Schritt extrahieren wir nur Fragen und Antworten aus dem DataFrame, da wir für die Feinabstimmung hauptsächlich diese beiden Elemente benötigen.
OpenAI erfordert die Daten in einem spezifischen JSONL-Format für die Feinabstimmung. Jede Zeile muss ein JSON-Objekt darstellen, das ein einzelnes Trainingsbeispiel repräsentiert. So formatieren Sie Ihre Daten:
with open('feinabstimmungsdaten_chat_format.jsonl', 'w') as jsonl_file:
for index, example in questions_answers.iterrows():
formatted_data = {
"messages": [
{"role": "system", "content": "Du bist ein hilfreicher Assistent"},
{"role": "user", "content": example['question']},
{"role": "assistant", "content": example['answer']}
]
}
jsonl_file.write(json.dumps(formatted_data) + '\\n')
Hinweis: Unser Ziel ist es, einen Chatbot zu erstellen und gpt-3.5-turbo für die Feinabstimmung zu verwenden, daher verwenden wir ein konversationelles Chat-Format. Sie können auf der Chat-Format (opens new window)-Seite von OpenAI andere Formate sehen.
# Hochladen Ihres Datensatzes zu OpenAI
Bevor Sie die Feinabstimmung durchführen können, müssen Sie Ihren formatierten Datensatz bei OpenAI hochladen:
from openai import OpenAI
from pathlib import Path
client = OpenAI(api_key="Ihr_API-Schlüssel")
response = client.files.create(
file=Path('feinabstimmungsdaten_chat_format.jsonl'),
purpose='feinabstimmung'
)
Hinweis: Speichern Sie Ihren API-Schlüssel sicher und geben Sie ihn niemals in freigegebenem oder öffentlichem Code preis. Der Parameter purpose='feinabstimmung' gibt an, dass die hochgeladene Datei für das Modelltraining bestimmt ist.
# Starten des Feinabstimmungsprozesses
Mit Ihren hochgeladenen Daten können Sie nun den Feinabstimmungsprozess starten:
fine_tune_response = client.fine_tuning.jobs.create(
training_file=response.id, # Verwenden Sie die ID der hochgeladenen Datei
model="gpt-3.5-turbo" # Geben Sie das Modell an, das Sie feinabstimmen möchten
)
print("Feinabstimmungsvorgang gestartet mit ID:", fine_tune_response.id)
Damit wird der Feinabstimmungsprozess auf dem ausgewählten Modell gestartet. Die Job-ID dient zur Verfolgung des Fortschritts Ihres Feinabstimmungsvorgangs.
Hinweis: Sie erhalten eine E-Mail mit dem Modellnamen, sobald das Training abgeschlossen ist. Diesen Modellnamen verwenden Sie im Testteil.
# Überwachen des Fortschritts der Feinabstimmung
Sie können den Status Ihres Feinabstimmungsvorgangs wie folgt überwachen:
client.fine_tuning.jobs.retrieve("Ihre_Feinabstimmungs-Job-ID")
Ersetzen Sie "Ihre_Feinabstimmungs-Job-ID" durch die ID, die vom Job-Erstellungsschritt zurückgegeben wurde. Dieser Befehl liefert detaillierte Informationen zum Status und zur Leistung des Jobs.
# Testen des feinabgestimmten Modells
Nach der Feinabstimmung ist es an der Zeit, Ihr Modell zu testen. So können Sie Abschlüsse mit Ihrem feinabgestimmten Modell generieren:
completion = client.chat.completions.create(
model="Ihr_feinabgestimmter_Modellname",
messages=[
{"role": "system", "content": "Du bist ein hilfreicher Assistent."},
{"role": "user", "content": "Ihre Nachricht hier"}
],
max_tokens=50
)
print(completion.choices[0].message.content)
Ersetzen Sie "Ihr_feinabgestimmter_Modellname"
und "Ihr Prompt hier"
durch Ihren Modellnamen und Ihren Test-Prompt.
Jetzt sollten Sie ein Modell haben, das optimal auf Ihre Bedürfnisse abgestimmt ist, aber das ist nur der Anfang mit OpenAI. Diese Plattform ermöglicht es Ihnen, noch fortschrittlichere und komplexe Modelle zu trainieren und so Ihre KI-Möglichkeiten zu erweitern.
# Vergleich der Feinabstimmung von LLMs mit Hugging Face und OpenAI
Nach dem umfassenden Überblick und der Arbeit mit beiden Techniken werfen wir einen Vergleich.
Faktor | Hugging Face | OpenAI |
---|---|---|
Benutzerfreundlichkeit | Benutzerfreundliche Oberfläche. Umfassende Dokumentation, erfordert jedoch fundierte Kenntnisse im Bereich maschinelles Lernen. | Einfach und erfordert etwas Vertrautheit mit maschinellem Lernen. |
Verfügbarkeit von Modellen | Breites Spektrum an vortrainierten Modellen (BERT, GPT, etc.). | Konzentriert sich hauptsächlich auf GPT-Varianten mit hoher Optimierung. Bietet auch Jurassic-1 Jumbo (QA) und Codex (Code-Generierung) an. |
Anpassungsmöglichkeiten | Umfangreiche Anpassungsoptionen für die Feinabstimmung. | Vereinfachter Anpassungsprozess, weniger granular als Hugging Face. |
Datenschutz | Starke Optionen: ermöglicht lokale oder private Cloud-Verarbeitung. | Stark, hauptsächlich cloud-basiert. Möglicherweise nicht für alle Datenschutzanforderungen geeignet. |
Leistung | Variiert je nach Modell und Einstellungen, skalierbar mit geeigneter Hardware. | Hohe Leistung, insbesondere bei Sprachverständnis und -generierung. |
Skalierbarkeit | Benutzerverwaltete Skalierbarkeit, abhängig von Hardware und Datensatzgröße. | Von OpenAI verwaltet, weniger Benutzeranforderungen für die Infrastruktur. |
Kosten | Kostenlose und kostenpflichtige Stufen, kosteneffizient bei gutem Management (insbesondere bei lokaler Verarbeitung). | Nutzungsabhängige Preisgestaltung, kann bei Skalierung teuer sein. |
Community & Support | Große, aktive Community mit Foren, Tutorials und gemeinsamen Projekten. | Starke offizielle Kanäle und Dokumentation, weniger community-getrieben. |
Zusätzliche Funktionen | TRL-Bibliothek vereinfacht die Feinabstimmung (SFT, RLHF) | Benutzerfreundliche API für die Integration in Anwendungen |
Beide Feinabstimmungstechniken haben ihre Vor- und Nachteile, aber es hängt hauptsächlich von Ihrem Anwendungsfall ab. Wenn Sie Datenschutz wünschen und über technisches Wissen verfügen, können Sie Hugging Face wählen, ansonsten können Sie OpenAI verwenden.
# Fazit
Die Feinabstimmung von LLMs mit der OpenAI-API bietet Ihnen einen effizienten und leistungsstarken Ansatz zur Anpassung von Sprachmodellen an Ihre spezifischen Anforderungen. Durch Befolgen der in diesem Artikel beschriebenen Schritte können Sie Ihr Modell effizient feinabstimmen und sicherstellen, dass es maßgeschneiderte und hochwertige Ergebnisse liefert. Denken Sie daran, dass die Effektivität der Feinabstimmung stark von der Qualität und Relevanz Ihrer Trainingsdaten abhängt. Investieren Sie Zeit in die Kuratierung und Strukturierung Ihres Datensatzes, um die besten Ergebnisse aus Ihren Feinabstimmungsbemühungen zu erzielen.
Die Feinabstimmung eines Modells kann das Generieren von Einbettungen oder Vektoren für Eingabedaten umfassen. In einigen Fällen können diese Einbettungen in einer Vektordatenbank gespeichert werden, um eine effiziente Abfrage oder Ähnlichkeitssuche zu ermöglichen. Wenn Sie beispielsweise ein Sprachmodell für eine bestimmte Anwendung wie die Dokumentklassifizierung feinabstimmen, ist MyScale (opens new window), eine SQL-Vektordatenbank, für KI-Anwendungen konzipiert und bietet eine schnelle Abfrage- oder Ähnlichkeitssuchleistung. Es ist für Entwickler sehr zugänglich, da nur SQL für die Interaktion erforderlich ist.
Für Ihr Feedback oder Ihre Vorschläge können Sie uns im MyScale Discord (opens new window) kontaktieren.