back

Knowledge Centre

Feinabstimmung von LLaMA zur Nachbildung von Eminescus literarischem Stil

| 23.01.2025

Feinabstimmung von LLaMA zur Nachbildung von Eminescus literarischem Stil

Während die künstliche Intelligenz weiterhin fortschreitet, haben wir ein spannendes Projekt gestartet, das die Lücke zwischen klassischer Literatur und moderner Technologie schließt. Unser Ziel war es, erfolgreich ein KI-Modell zu entwickeln, das Texte im unverwechselbaren Stil von Mihai Eminescu, Rumäniens herausragendem Dichter und prägender Stimme der rumänischen Poesie, generieren kann.

Für dieses Projekt haben wir Google Collab mit Python verwendet. 

Verständnis der Herausforderung

Bevor wir in die technischen Details eintauchen, ist es wichtig zu verstehen, was dieses Projekt einzigartig macht. Ein KI-Modell zu lehren, wie Eminescu zu schreiben, geht nicht nur um Wortschatz und Grammatik - es geht darum, das Wesen seines romantischen Stils, seiner philosophischen Tiefe und seiner meisterhaften Verwendung der rumänischen Sprache einzufangen. Dies stellt mehrere interessante Herausforderungen dar, von der Handhabung rumänischer Diakritika bis hin zum Verständnis der komplexen Strukturen des literarischen Rumänisch des 19. Jahrhunderts.

Technische Grundlage: Das LLaMA-Modell

Wir haben uns aus mehreren Gründen dafür entschieden, auf Metas LLaMA-Modell aufzubauen. LLaMA eignet sich besonders gut für Feinabstimmungsaufgaben aufgrund seiner effizienten Architektur und starken mehrsprachigen Fähigkeiten. Wir haben mit zwei Versionen experimentiert:

  • LLaMA-3.2-3B: Unsere erste Implementierung
  • LLaMA-3.1-8B: Eine alternative Version zum Vergleich
  • LLaMA-3.3-70B-Instruct: Unsere neueste Iteration

Der Feinabstimmungsprozess

Datenvorbereitung
Der erste entscheidende Schritt war die Vorbereitung unserer Trainingsdaten und deren Aufteilung in kleine Blöcke für den Tokenisierungsteil. So haben wir die Textverarbeitung gehandhabt:

def prepare_dataset(file_paths, chunk_size=1024, overlap=128):
   chunks = []
   total_chunks = 0
   
   for file_path in file_paths:
       with open(file_path, 'r', encoding='utf-8') as file:
           text = file.read()
           
       # Split text into overlapping chunks for better context preservation
       words = text.split()
       for i in range(0, len(words), chunk_size - overlap):
           chunk = ' '.join(words[i:i + chunk_size])
           chunks.append(chunk)
           
   return Dataset.from_dict({"text": chunks})

Dieser Code zerlegt Eminescus Werke in handhabbare Blöcke, während der Kontext durch Überlappung erhalten bleibt. Die Überlappung ist entscheidend, da sie dem Modell hilft, längere Abhängigkeiten im Text zu verstehen.

Speicheroptimierung

Eine unserer größten Herausforderungen war die effiziente Handhabung des großen Modells. Wir haben mehrere Speicheroptimierungstechniken implementiert:

bnb_config = BitsAndBytesConfig(
   load_in_4bit=True,  # Use 4-bit quantization
   bnb_4bit_compute_dtype=torch.float16,  # Use float16 for calculations
   bnb_4bit_quant_type="nf4",  # Normal format 4-bit quantization
   bnb_4bit_use_double_quant=False,  # Avoid double quantization
   bnb_4bit_cpu_offload=True  # Offload to CPU when necessary
)

Diese Konfiguration ermöglicht es uns, große Sprachmodelle auf Verbraucher-Hardware auszuführen und dabei die Modellqualität zu erhalten. Die 4-Bit-Quantisierung reduziert den Speicherbedarf erheblich, während das CPU-Offloading hilft, GPU-Speicherbeschränkungen zu bewältigen.

Low-Rank-Adaptation (LoRA)

Wir haben LoRA verwendet, um das Modell effizient zu optimieren, ohne alle Parameter zu aktualisieren:

lora_config = LoraConfig(
   r=16,  # Rank of the update matrices
   lora_alpha=32,  # Scaling factor
   target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],  # Which layers to fine-tune
   lora_dropout=0.05,  # Dropout for regularization
   bias="none",
   task_type="CAUSAL_LM"
)

Dieser Ansatz ermöglicht es uns, das Modell mit deutlich weniger Parametern zu optimieren, was den Prozess effizienter macht und gleichzeitig die Leistung erhält. Die Zielmodule konzentrieren sich auf die Aufmerksamkeitsmechanismen, die für die Erfassung der stilistischen Elemente von Eminescus Schreiben entscheidend sind.

Auswertung und Ergebnisse

Wir haben ein umfassendes Auswertungssystem entwickelt, das die Ausgabe unseres optimierten Modells mit dem Basis-LLaMA-Modell vergleicht:

def generate_text(model, tokenizer, prompt, max_length=200):
   with torch.no_grad():
       inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
       outputs = model.generate(
           **inputs,
           max_length=max_length,
           num_return_sequences=1,
           temperature=0.8,  # Controls randomness
           do_sample=True,   # Enable sampling
           top_p=0.92,       # Nucleus sampling parameter
           top_k=50,         # Limit vocabulary choices
           repetition_penalty=1.1  # Avoid repetition
       )
       return tokenizer.decode(outputs[0], skip_special_tokens=True)

Diese Generierungsfunktion balanciert Kreativität und Kohärenz durch sorgfältig abgestimmte Parameter. Die Temperatur von 0,8 bietet eine gute Balance zwischen Vielfalt und Fokus, während die Parameter top_p und top_k helfen, Qualität und Relevanz zu erhalten.

Reale Anwendungen

Die Auswirkungen dieses Projekts gehen über die bloße Generierung von Eminescu-Stil-Text hinaus. Diese Technologie kann angewendet werden auf:

  • Bildungswerkzeuge zum Studium der rumänischen Literatur
  • Unterstützung beim kreativen Schreiben
  • Erhaltung des kulturellen Erbes
  • Literarische Stilanalyse und Forschung

Wir arbeiten weiterhin daran, das Modell mit mehreren Initiativen zu verbessern:

  • Erweiterung des Trainingsdatensatzes mit mehr von Eminescus Werken
  • Experimentieren mit größeren Modellvarianten
  • Entwicklung besserer Bewertungsmetriken für rumänische Poesie
  • Erstellung interaktiver Werkzeuge für Autoren und Forscher

Der vollständige Code ist auf unserem GitHub-Repository verfügbar, und wir haben unsere Modelle auf HuggingFace für die breitere KI- und Literaturgemeinschaft zur Verfügung gestellt, um sie zu nutzen und darauf aufzubauen. 

Sie können unsere Videos aus der Serie auf YouTube ansehen. Wir hoffen, dass Sie unsere Schritte nachvollziehen und genauso viel Spaß haben werden wie wir. Die erste Folge dieser Serie ist auf YouTube und der Link ist hier.

Bereit, Ihr Geschäft mit individuellen KI-Lösungen zu transformieren?

Bei Softescu sind wir auf die Entwicklung intelligenter KI-Anwendungen spezialisiert, die Ihre einzigartigen Geschäftsanforderungen verstehen. Unser Team aus KI-Ingenieuren und Machine-Learning-Experten kann Ihnen helfen, die Kraft von Large Language Models und konversationeller KI zu nutzen und gleichzeitig eine nahtlose Integration mit Ihren bestehenden Systemen zu gewährleisten. Ob Sie Prozesse automatisieren, Kundenerlebnisse verbessern oder tiefere Geschäftseinblicke gewinnen möchten, wenden Sie sich an uns für eine individuelle KI-Lösungskonsultation.

white-paper
  • Wissen
    Wissenszentrum
    Im Gehirn einer KI
  • Wissen
    Wissenszentrum
    Ein neues Zeitalter beginnt: Drupal CMS 1.0 startet
  • Wissen
    Wissenszentrum
    KI in den B2B-Bereich bringen