🧠 Train – OpenAI Fine-Tuning Pipeline

Text-Chunking → JSON → Modell-Training → Retrieval – vollständige Pipeline

PythonOpenAIFine-TuningNLP

📊 Pipeline-Übersicht

1
📄

Text-Eingabe

Rohtext-Dateien (.txt) aus Dokumenten-Ordner einlesen – beliebige Encodings.

2
✂️

Chunking

Text in 500-Zeichen-Blöcke aufteilen mit ID und Kategorie-Metadaten.

3
🔄

JSON-Konvertierung

Strukturierte JSON-Dateien mit {"data": [{"id":0, "text":"...", "category":"..."}]}.

4
🏋️

Fine-Tuning

OpenAI davinci-003 mit 5 Epochen und Batch-Size 16 trainieren.

💻 Echter Code aus dem Projekt

Text-Chunking mit automatischer Encoding-Erkennung

import os, json, chardet

def split_text_into_chunks(text, chunk_size=500):
    """Text in Abschnitte der gewünschten Größe aufteilen"""
    return [text[i:i+chunk_size] 
            for i in range(0, len(text), chunk_size)]

def convert_text_to_json(file_path):
    # Automatische Encoding-Erkennung mit chardet
    with open(file_path, "rb") as f:
        text_bytes = f.read()
        result = chardet.detect(text_bytes)
        encoding = result["encoding"]

    with open(file_path, "r", encoding=encoding) as f:
        text = f.read()

    # Dateiname als Kategorie nutzen
    category = os.path.splitext(
        os.path.basename(file_path))[0]

    chunks = split_text_into_chunks(text, chunk_size=500)
    
    json_data = [{"id": i, "text": chunk, 
                  "category": category} 
                 for i, chunk in enumerate(chunks)]
    
    json_file_path = os.path.splitext(file_path)[0] + ".json"
    with open(json_file_path, "w") as f:
        json.dump({"data": json_data}, f)

Batch-Verarbeitung aller TXT-Dateien im Ordner

text_dir = "/var/www/vhosts/computerkumpel.de/upload/politik/train/doc/"

for file_name in os.listdir(text_dir):
    if file_name.endswith(".txt"):
        file_path = os.path.join(text_dir, file_name)
        convert_text_to_json(file_path)
        print(f"Konvertiert: {file_name} → .json")

OpenAI Fine-Tuning mit davinci-003

import openai

openai.api_key = "sk-..."

model_name = "politik-model-v2"

# Modell erstellen oder bestehendes laden
try:
    with open("model_id.txt", "r") as f:
        model_id = f.read().strip()
except FileNotFoundError:
    model = openai.Model.create(
        "text-davinci-003",
        model_name=model_name,
        language="de")
    model_id = model.id

# Training mit allen JSON-Dateien
text = ""
for filename in os.listdir(train_dir):
    if filename.endswith(".json"):
        with open(os.path.join(train_dir, filename)) as f:
            for chunk in json.load(f)["data"]:
                text += chunk["text"]

model.train(data=text, n_epochs=5, batch_size=16)

Training-Status Polling

model = openai.Model.retrieve(model_id)
while model.status != "ready":
    print(f"Status: {model.status} – warte...")
    time.sleep(30)
    model = openai.Model.retrieve(model_id)

print("Training abgeschlossen!")
with open("model_id.txt", "w") as f:
    f.write(model_id)

🎯 Business Value

🔍

Domain-spezifisches Wissen

Durch Fine-Tuning antwortet das Modell präzise zu Ihren Fachtexten – statt generischem Allgemeinwissen.

🤖

Automatisierte Wissensbasis

Aus unstrukturierten Textdateien wird ein abfragbares KI-Modell – ohne manuelle Datenaufbereitung.