TensorBoard
Safetensors
English
German
t5

Instructions?

#1
by AntonioC - opened

Hello!

First of all, I would like to say thank you for sharing this model.
Obviously it's impressive. Unfortunately I have not been able to find any information on how to use it.
I had to admit that I am not familiar with the different model types.
I have tried to use the model for summarization as is. I was under the impression that I could tell the model how long its summary of a text should be.

It didn't work. I am not sure if I misunderstood how the model works or if it's a model that does not work without any further fine-tuning to my special needs or... I would appreciate author's info very much to be able to appreciate the model.

What I tried was this (please forgive me for using AI to help with the script)!).

Thank you for your any help on using this model!

import torch
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import sys

print("🔹 Lade Modell und Tokenizer...")
try:
# Der Pfad zum lokal gespeicherten Modell.
model_path = "D:/models/occiglot5"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForSeq2SeqLM.from_pretrained(model_path).to("cuda")
print("✅ Modell und Tokenizer sind bereit.")
except Exception as e:
print(f"❌ Kritischer Fehler beim Laden des Modells: {e}")
print("Stellen Sie sicher, dass der Pfad korrekt ist und alle Modelldateien vorhanden sind.")
sys.exit(1)

--- 2. Definition des Basistextes ---

Der Text, der als Grundlage für die Zusammenfassungen dient.

base_text = (
"Das Bundesverfassungsgericht hat am 5. Mai 2024 entschieden, dass bestimmte Teile "
"des neuen Bürgergeldgesetzes mit dem Grundgesetz unvereinbar sind. Die Klage wurde "
"von mehreren Bundesländern eingereicht. Das Urteil betrifft die Ausgestaltung der "
"Sanktionen und die Leistungshöhe für junge Erwachsene. Insbesondere die pauschale "
"Kürzung der Leistungen um 30 Prozent bei Pflichtverletzungen wurde als unverhältnismäßig "
"kritisiert. Das Gericht forderte den Gesetzgeber auf, bis Ende 2025 eine verfassungskonforme "
"Neuregelung zu schaffen, die eine stärkere Einzelfallprüfung vorsieht."
)

--- 3. Interaktive Benutzerschleife ---

Eine Dauerschleife ermöglicht es dem Benutzer, mehrere Zusammenfassungen

mit unterschiedlichen Längenvorgaben zu erstellen, ohne das Skript

jedes Mal neu starten zu müssen.

while True:
try:
# Abfrage der gewünschten Wortanzahl für die Zusammenfassung.
user_input = input("\n🔢 In wie vielen Wörtern zusammenfassen? (Geben Sie 0 oder eine leere Eingabe zum Beenden ein): ").strip()

    # Abbruchbedingung für die Schleife.
    if not user_input or int(user_input) <= 0:
        print("🚪 Skript wird beendet.")
        break
    
    word_limit = int(user_input)
except ValueError:
    print("❌ Ungültige Eingabe. Bitte geben Sie eine ganze Zahl ein.")
    continue

# --- 4. Erstellung des korrekten Prompts ---
# FÜR T5-BASISMODELLE IST EIN AUFGABENPRÄFIX ENTSCHEIDEND.
# Der Standardpräfix für Zusammenfassungen ist "summarize: ".
# Komplexe Anweisungen in natürlicher Sprache (wie im ursprünglichen Skript)
# funktionieren bei Basismodellen nicht zuverlässig. Die Steuerung der
# Länge erfolgt über die Parameter der.generate()-Methode.
prompt = f"summarize: {base_text}"
print(f"✅ Korrekter Prompt erstellt: '{prompt[:50]}...'")

# --- 5. Tokenisierung des Inputs ---
# Der Prompt-Text wird in eine Sequenz von Zahlen (Token-IDs) umgewandelt,
# die das Modell verarbeiten kann. return_tensors="pt" erstellt PyTorch-Tensoren.
#.to("cuda") verschiebt die tokenisierten Daten auf die GPU, wo auch das Modell liegt.
inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=1024).to("cuda")

# --- 6. Generierung der Zusammenfassung ---
# Dies ist der Kernprozess. Wir verwenden optimierte Parameter für hohe Qualität.
# torch.no_grad() deaktiviert die Gradientenberechnung, was die Inferenz
# schneller macht und den Speicherverbrauch reduziert.
print("Generation summary...")
with torch.no_grad():
   
    outputs = model.generate(
        **inputs,
        # max_new_tokens: Gibt die maximale Länge der *neuen*, generierten Tokens an.
        # Ein Puffer (z.B. * 2) ist sinnvoll, da das Wort-Token-Verhältnis nicht 1:1 ist.
        max_new_tokens=word_limit * 2,
        
        # num_beams: Aktiviert die Beam Search. Dies ist der wichtigste Parameter
        # für qualitativ hochwertige, kohärente Zusammenfassungen.
        num_beams=4,
        
        # length_penalty: Ein Wert > 1.0 ermutigt das Modell, längere Sequenzen zu
        # generieren und verhindert zu knappe Zusammenfassungen.
        length_penalty=2.0,
        
        # no_repeat_ngram_size: Verhindert, dass sich Sequenzen von 3 Wörtern wiederholen.
        # Verbessert die sprachliche Qualität erheblich.
        no_repeat_ngram_size=3,
        
        # early_stopping: Beendet die Generierung, sobald alle "Beams" eine
        # vollständige Sequenz gefunden haben. Effizienz-Optimierung für Beam Search.
        early_stopping=True
    )

# --- 7. Dekodierung und Ausgabe ---
# Die generierten Token-IDs werden wieder in lesbaren Text umgewandelt.
# skip_special_tokens=True entfernt technische Tokens wie <pad> oder </s>.
summary = tokenizer.decode(outputs[0], skip_special_tokens=True)


print("\nSummary:")
print(summary)
# Zähle die Wörter in der generierten Zusammenfassung zur Überprüfung.
print(f"(Ungefähre Wortanzahl: {len(summary.split())})")

Sign up or log in to comment