Inhaltsverzeichnis

ChatGPT API Fine Tuning

ChatGPT API  Fine Tuning

Wie kann man ChatGPT Fine Tunen?

Man kann ChatGPT auch an den eigenen Daten trainieren. Dieser Prozess wird Fine-Tuning genannt. Dabei wird der ChatGPT KI etwas neues beigebracht. Dazu trainiert man den Bot mit seinen eigenen Daten.

Die Trainingsdaten müssen aus einer Frage und einer Antwort bestehen. Bzw. prompt und completion.


{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}

Die Variablen heißen prompt und completion, da ChatGPT mehr kann als nur Fragen zu beantworten. Man kann sich auch Sätze, Texte oder Programmcode vervollständigen lassen.

Beispiel Datensatz

Im folgenden werde ich an einem Beispiel zeigen wie man ChatGPT Fine Tunen kann. Dazu nutze ich das "Wine Reviews" Dataset von kaggle

Das Dataset enthält folgende Daten:

Die Tabelle enthält 150 000 Wein Testergebnisse. Mit diesen Daten werden wir ChatGPT beibringen, wie unterschiedliche Weine schmecken. Dafür müssen wir zuerst die Daten in das richtige Format bringen.

Ich bin kein Wein-Profi: Als Name des Weins, der Prompt für ChatGPT habe ich die Designation und die variety genommen. Also bspw. "Martha's Vineyard Cabernet Sauvignon" und als completion die description.

Um die Daten in das richtige Format zu bekommen habe ich in einem kaggle Notebook mit python programmiert.

Data Cleaning

Erklärung zur Python Programmierung:


	import pandas as pd #benötigte Bibliotheken importieren
  df = pd.read_csv("/kaggle/input/wine-reviews/winemag-data_first150k.csv") #Datensatz aus csv Datei einlesen
	print(df.head()) # Prüfen ob die Daten richtig sind

Die descriptions sind in Englisch und meistens mehrere Sätze lang, dass ist sehr gut um die KI zu trainieren. In den meisten Beschreibungen wird der Geschmack beschrieben, teilweise aber auch Fakten über den Wein.


# Erstellen unserer Namen Spalte !
designations = df["designation"]
varieties1 = df["variety"]
names = []
for name1, variety in zip(designations, varieties1):
    names.append(str(name1) + " " + str(variety))

Als prompt nutzen wir einen Namen des Weins, welche eine Kombi aus der Designation und der variety ist. Das sollte reichen um den Wein halbwegs genau zu bestimmen, aber keinen allzu langen Namen zu haben. (Obwohl es bestimmt bei den 150k so einige mehrfach geben wird)


def convert_format(prompt, answer):
    new_answer = answer.replace("\n", " ")
    return "{" + f'"prompt": "{prompt}", "completion": "{new_answer}" ' + "}"
qa = list(zip(prompts, list(df["description"])))
json_doc = "\n".join(list(map(lambda x: convert_format(*x), qa)))

Jetzt konvertieren wir die Daten in das Format von ChatGPT. Danach müssen wir die Daten nur noch in eine Datei schreiben.

Ich habe erstmal zum Testen nur die ersten 100 Zeilen genommen.


short_jsonl = "\n".join(json_doc.split("\n")[:100])
with open("wine-model3.txt", "w") as f:
    f.write(short_jsonl)

Creating The Fine Tune Model

Als nächstes müssen Sie die Open AI CLI nutzen, dazu müssen Sie diese zuerst installieren. Sie können diese über den Befehl "pip install --upgrade openai" installieren. Falls Sie den Python Package Manager pip noch nicht installiert haben, müssen Sie das zuerst tun :) .

Nun müssen Sie openAi noch Ihren OpenAI API Key mitteilen.

Open AI Api Key

Unter Linux oder MacOS können Sie dies mit dem folgendem Befehl:

export OPENAI_API_KEY="<OPENAI_API_KEY>"

Ich habe bei Windows die Systemumgebungsvariable OPENAI_API_KEY über die Windows Einstellungen gesetzt.

Jetzt können Sie Ihre Daten für das Model mit folgendem Befehl vorbereiten:

openai tools fine_tunes.prepare_data -f name-der-date.jsonl

Ihr Output könnte dann ungefähr folgendermaßen aussehen:

Based on the analysis we will perform the following actions:

- [Recommended] Add a suffix separator ` ->` to all prompts [Y/n]: Y

- [Recommended] Add a whitespace character to the beginning of the completion [Y/n]: Y

Ich habe alle Empfehlungen befolgt.

Nun sind Sie bereit ChatGPT zu trainieren, dafür müssen Sie sich für ein Basis Model entscheiden. Es gibt unterschiedliche Chat Models, welche unterschiedliche Stärken haben. Für dieses Beispiel verwende ich das davinci model:

openai api fine_tunes.create -t wine-model3_prepared.jsonl -m davinci

Die Ausgabe:

In der Ausgabe steht der Name des Models davinci:ft-personal-2023-03-03-18-24-15

Lasst uns das neue Model ausprobieren:


import openai as openai

if __name__ == '__main__':
    PROMPT = "How does the wine White Hawk Vineyard Syrah taste"
    completion_mm = openai.Completion.create(max_tokens=100, engine="davinci:ft-personal-2023-03-03-18-24-15", prompt=PROMPT)
    completion_om = openai.Completion.create(max_tokens=100, engine="text-davinci-003", prompt=PROMPT)
    print("MY Model:" + completion_mm.choices[0].text)
    print("Davinci Model:" + completion_om.choices[0].text)

Das ist das Ergebnis:

MY Model:Baked pears and Mirabelle plums combine on the nose of this wine, a hallmark of Miljenko’s Swan and White Hawk vineyards, along with graphite and black tea. Those aromas carry over to the palate, along with a compelling licorice flavor, backed by a fine grained texture and lingering tannin. It s appealing, warm and unabashed in its saturate color, but with the balance to age. 20172027. Drink now

Davinci Model:?

White Hawk Vineyard Syrah is described as bold and well-balanced, with notes of dark cherry and herbal spice and a lingering smoky finish. It has medium body and mild to moderate tannins, making it a smooth and enjoyable glass of wine. Reviews suggest that it is a delicious, crowd-pleasing wine.

Eigenen Chatbot entwickeln- Dienstleistung

Falls Sie eine Idee für einen eigenen Chatbot auf Basis von ChatGPT haben, dann helfen wir Ihnen gerne bei der Umsetzung. Mit einem gefinetuneten ChatGPT Model können Sie die KI mit Ihren eigenen Daten trainieren.

No items found.

Häufig gestellte Fragen:

Weitere Artikel:

Zuletzt Aktualisiert
4.3.2023

Kontakt:

Gerne vereinbaren wir ein Beratungsgespräch

info@softoft.de
Wir Freuen Uns Über Deine Nachricht!
Bitte gebe Kontaktdaten an über die wir dich erreichen können
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Email Schreiben