📊 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.