Startseite / Artikel

Auswahl von Chunks ohne Anfrage: Verwendung von K-Means, wenn RAG keine Frage stellen kann.

Ohne Benutzeranfrage kann RAG keinen Kontext auswählen. Setzen Sie K als Anzahl der Ausgaben fest, klonalisieren Sie die Chunk-Embeddings mithilfe von k-Means und behalten Sie die Mittelpunkt-Chunks sowie ihre Quellen bei.

Verlag: REACTAPP.TOP13 Min. Lesezeit3095 Wörter

Quellen: You Don’t Need RAG. You Need Semantic Compression.

Einige Probleme bei großen Sprachmodellen kommen ohne Namen, Rahmenwerk oder umfangreiche Literatur daher. Dieses Problem sieht wie folgt aus: eine sehr große Menge an Text, keine Benutzerfrage, und die Aufgabe, zu entscheiden, welche Teile an ein Modell weitergegeben werden sollen, damit jedes Thema abgedeckt wird und jeder Teil auf seine Herkunft zurückverfolgt werden kann.

Es handelt sich weder um generatives Verfahren mit Suchunterstützung, da nichts gesucht wird, noch um Prompt-Kompression oder Zusammenfassung. Die Forschungsgemeinschaft hat es noch nicht eindeutig benannt, und die üblichen Werkzeuge greifen nicht aus. Im Folgenden wird das Problem dargestellt, erklärt, warum bestehende Techniken unzureichend sind, und eine einfache Lösung beschrieben, die zufällig mit akademischen Ideen übereinstimmt und eine Lücke schließt, die diese Arbeiten überspringen.

Wenn es nichts zu suchen gibt

Jeder, der in den letzten Jahren mit großen Sprachmodellen gearbeitet hat, kennt den RAG-Zyklus: Ein Benutzer stellt eine Frage, die Anfrage wird eingebettet, ähnliche Textabschnitte werden aus einem Vektorlagern abgerufen, sie werden in die Anweisung aufgenommen, und daraufhin wird eine Antwort generiert, die auf diesen Abschnitten beruht. Dieses Muster ist elegant, gut dokumentiert und wird von allen großen Frameworks unterstützt. Gleichzeitig geht es stillschweigend davon aus, dass eine Anfrage vorhanden ist.

Oft gibt es jedoch keine. Frameworks wie LangChain und LlamaIndex sind um Anfragen und deren Abruf organisiert, und die meisten Arbeiten zur Kontextkompression beginnen ebenfalls mit einer Anfrage. Es wird nach Wegen gesucht, die besten Textabschnitte für ein großes Sprachmodell auszuwählen, wobei jede gefundenen Option davon ausgeht, dass es eine Benutzerfrage gibt, die die Auswahl leitet.

Betrachten wir eine Lern-App. Schüler laden Kursmaterialien hoch: Lehrbücher, Präsentationsfolien, Video-Transkripte, handschriftliche Notizen – manchmal Hunderte von Seiten. Sie suchen nicht nach etwas Bestimmtem. Im Grunde sagen sie: „Hier sind meine Kurse, erstelle mir Lernmaterialien.“ Das System muss anschließend strukturierte Ausgaben wie Quizblätter, Flashcards, Zusammenfassungen und Konzeptkarten erzeugen. Jede Ausgabe sollte ein anderes Thema abdecken und angben, woher sie stammt, obwohl das Gesamtvolumen der Quellen jedes Kontextfenster übersteigt.

Drei Anforderungen gleichzeitig

Bestehende Ansätze verletzen jeweils mindestens eine der drei Einschränkungen, die in diesem Anwendungsfall gemeinsam gelten.

  1. Kein Abfragesignal. Nichts vom Benutzer leitet die Auswahl, sodass das System allein anhand der Daten beurteilen muss, was wichtig ist.
  2. Garantierte thematische Abdeckung. Das Ergebnis ist eine Reihe von Ausgaben, die gemeinsam die Breite des Materials abdecken. Das Auslassen eines gesamten Themas ist ein schwerwiegender Fehler – ein Biologie-Quiz, das die Genetik gar nicht behandelt, ist nutzlos.
  3. Quellenrückverfolgbarkeit. Jede Ausgabe muss auf einen bestimmten Abschnitt des Originals verweisen, zum Beispiel „basierend auf Kapitel 3, Seiten 12 bis 14 des Biochemie-Lehrbuchs.“ In der Bildung ist das keine Option, denn die Schüler müssen wissen, wo sie weiterlesen sollen.

Keine bestehende Methode erfüllt alle drei Kriterien gleichzeitig. Das ist die Lücke.

Was die Literatur bietet – und wo sie endet

Warum das Versenden von allem fehlschlägt

Der naive Ansatz besteht darin, den gesamten Inhalt in das Kontextfenster zu geben. Da Modelle 128k bis 200k Token verarbeiten können, ist es verlockend zu glauben, dass das funktioniert. Das ist jedoch nicht der Fall. Die Studie „Lost in the Middle“ zeigte eine U-förmige Leistungskurve: Modelle bewältigen den Anfang und das Ende eines Kontexts gut, überschauen jedoch konsequent den Inhalt in der Mitte. Die Genauigkeit sank um mehr als 30 Prozent, wenn wichtiger Inhalt von den Rändern in die Mitte verschoben wurde – selbst bei Modellen, die für lange Kontexte entwickelt wurden.

Selbst wenn alles hineinpasst, werden große Teile des Materials ignoriert. Das Quiz würde die ersten und letzten Kapitel abdecken und den Rest überspringen. Mehr Kontext bedeutet nicht automatisch besseren Kontext.

Prompt-Kompression beantwortet eine andere Frage

Es gibt immer mehr Arbeiten, die Eingaben durch das Löschen überflüssiger Token verkürzen, bevor diese das Modell erreichen.

Selective Context verfügt über ein kleines Sprachmodell, das die Selbstinformation lexikalischer Einheiten – sei es Token, Substantivphrasen oder Sätze – berechnet und jene mit geringer Selbstinformation ausschließt. Es benötigt keine Abfrage, was die erste Einschränkung erfüllt. Allerdings filtert es innerhalb des vorhandenen Textes und erzeugt eine komprimierte Kopie desselben Textes, anstatt eine Auswahl repräsentativen Inhalts aus verschiedenen Themenbereichen. Es kann keine Vollständigkeit garantieren, und der veränderte Text verliert seinen direkten Bezug zu den ursprünglichen Abschnitten, wodurch die zweite und dritte Einschränkung nicht erfüllt werden.

LLMLingua und LLMLingua-2 erweitern dieses Konzept durch iterative Kompression sowie gelernte Token-Klassifikatoren und erreichen Kompressionsraten von bis zu 20-fach. Sie weisen dieselbe grundlegende Beschränkung auf: Der Text wird für die Maschine komprimiert, nicht für einen Menschen strukturiert. Das Ergebnis ist ein Prompt, den das Modell verarbeiten kann, nicht eine strukturierte Inhaltsmenge, die nachvollzogen werden kann.

RECOMP trainiert Kompressoren, die aus abgerufenen Dokumenten zusammenfassen oder Inhalte extrahieren können – sowohl auf extraktiver als auch auf abstraktiver Weise. Er ist das fortschrittlichste Modell der Gruppe, benötigt jedoch ausdrücklich eine Abfrage, um zu entscheiden, was beibehalten werden soll, wodurch er die erste Einschränkung nicht erfüllt.

Kurz gesagt verringert die Prompt-Kompression die Anzahl der Tokens. Sie wählt keinen repräsentativen Inhalt aus, garantiert keine vollständige Themabedeckung und bewahrt auch nicht die ursprüngliche Struktur.

Graph-Ranking stellt dar, ordnet aber nicht

TextRank und LexRank erstellen ein Ähnlichkeitsgraphen zwischen Sätzen und wenden PageRank an, um die zentralsten Sätze zu finden – also jene, die den gesamten Dokumentinhalt am besten repräsentieren. Sie benötigen keine Abfrage, und seit zwei Jahrzehnten bilden sie den Standard für unüberwachtes extraktives Zusammenfassen. Ihre bekannte Schwäche ist die Redundanz: Ähnliche Sätze erhalten ähnliche Zentralität, wodurch die ausgewählten Sätze oft in unterschiedlichen Worten dieselben Inhalte wiederholen. Ein TextRank-Zusammenfassung eines Biologielehrbuchs könnte beispielsweise drei Sätze zur DNA-Replikation liefern, aber keinen zur Proteinsynthese – einfach weil die Replikation häufiger erwähnt wird.

Das beeinträchtigt die Vollständigkeit des Überblicks, selbst wenn die wichtigsten Themen meist auftauchen, und da die Methoden auf Sätzen basieren, ist die Nachvollziehbarkeit nur teilweise gewährleistet.

Klustering kommt am nächsten

Die auf Clustering basierende Zusammenfassung, bei der K-means, HDBSCAN oder ähnliche Verfahren auf Satzdarstellungen angewandt werden, gruppiert ähnliche Sätze in thematische Cluster und wählt aus jedem Cluster einen Vertreter aus. Dadurch wird Redundanz effektiv beseitigt: Jeder Cluster liefert einen einzigen Satz, und verschiedene Cluster behandeln unterschiedliche Themen.

Die fortschrittlichste aktuelle Methode in dieser Kategorie, „Graphs in Clusters“, kombiniert K-means mit TextRank. Zunächst erfolgt das Clustering zur Abdeckung verschiedener Themen, anschließend die Rangfolge innerhalb jedes Clusters nach Bedeutung. Sie übertrifft reine graphbasierte sowie reine clusterbasierte Methoden bei Benchmarks mit langen Dokumenten wie ArXiv und PubMed.

Es handelt sich um den nächsten Verwandten, unterscheidet sich aber in mehreren wichtigen Aspekten. Sein Ziel ist eine einzige, flache Textzusammenfassung, während hier N strukturierte Ausgaben anvisiert werden. Er passt K mit der Ellbogenmethode an, während hier K aus der Anfrage des Benutzers stammt. Er arbeitet mit Sätzen, während hier eine bestimmte Granularität der Blöcke erforderlich ist, um die Quellmetadaten beizubehalten. Seine Cluster stellen einen unsichtbaren Zwischenschritt dar, während sie hier die Endprodukte sind. Zudem kennt es kein Konzept einer verpflichtenden Quellenverfolgung.

Vergleich Seite an Seite

Gegenüber den drei Einschränkungen zeigt sich ein Muster. RAG behält die Quellen bei, benötigt jedoch eine Abfrage und kann keine Abdeckung garantieren. Selective Context und LLMLingua benötigen keine Abfrage, verlieren jedoch die Quellstruktur und können keine Abdeckung sicherstellen. RECOMP benötigt eine Abfrage. TextRank und LexRank funktionieren ohne Abfrage, liefern aber redundante Ergebnisse und eine schwache Nachvollziehbarkeit. Die Clustering-Zusammenfassung erfüllt die ersten beiden Einschränkungen, da sie keine Abfrage benötigt und eine Abdeckung gewährleistet, arbeitet jedoch auf Satzebene, was die Verbindung zur Quelle unterbricht.

Es gibt keine etablierte Methode zur Auswahl von Blöcken, die abfragefrei, abdeckungsgarantiert und quellrückverfolgbar ist.

Clustering umkehren

Die Lösung besteht darin, die übliche Verwendung von Clustering in der NLP umzukehren. In der Literatur ist K ein Hyperparameter. Forscher prüfen Werte wie K=5, K=10, K=50, zeichnen Silhouette-Werte oder Inertiekurven auf und wählen schließlich einen „besten“ Wert aus. Die Cluster sind mathematische Objekte, die dem Algorithmus dienen, und der Benutzer sieht sie niemals.

In diesem Ansatz ist K eine Produktbeschreibung. Ein Student, der 10 Quizblätter anfordert, setzt K auf 10. Fünf Zusammenfassungsseiten bedeuten K=5, und dreißig Flashcards bedeuten K=30. Jeder Cluster entspricht genau einem Ausgabeergebnis. Der Cluster ist keine Zwischenabstraktion; er ist das endgültige Ergebnis. Ein Quiz zur Mitose existiert, weil es im semantischen Raum des hochgeladenen Inhalts einen Cluster von mitosebezogenen Textabschnitten gibt.

Bestehende Methoden nutzen Clustering, um Text für Maschinen zu komprimieren. Diese Methode hingegen verwendet Clustering, um Inhalte für Menschen zu organisieren.

Im weiteren Verlauf ändert das alles. Traditionell wird K mathematisch abgestimmt, wodurch die Clustern verborgen bleiben und nach dem Clustern eine einfache Zusammenfassung erzeugt wird. Hier stammt K aus der Anfrage, jeder Cluster wird zu etwas, das der Benutzer erhält, und jeder Cluster löst einen Aufruf eines LLM aus, der eine Ausgabe liefert, die ihre Quelle angibt.

Der fünfstufige Prozess

1. Chunking. Dokumente werden mit Standard-Tools von LlamaIndex oder LangChain oder mit benutzerdefinierten Regeln aufgeteilt. Jeder Chunk behält seinen Text, die Quelldatei, die Seitenzahl, die Position sowie alle anderen Metadaten bei. Eine typische Größe liegt bei 500 bis 1000 Token, wobei benachbarte Chunks zu 10 bis 20 % überschneiden, was einen Kompromiss zwischen Beibehaltung ganzer Ideen und feiner Strukturierung der Clustern darstellt. Chunks können optional mit Zusammenfassungen, Schlüsselwörtern oder Entity-Tags angereichert werden, was das Clustern erleichtert, aber nicht erforderlich ist.

2. Einbetten. Jeder Chunk wird zu einem dichten Vektor. Das Modell hängt von der gewählten Methode ab: Sentence-Transformers ist eine schnelle, kostenlose Grundlage, OpenAI’s text-embedding-3-small ist in verschiedenen Sprachen leistungsstark, und Mistral Embed oder Cohere Embed sind konkurrenzfähige Optionen. Entscheidend ist, dass semantisch ähnliche Chunks unabhängig vom Wortschatz ähnliche Vektoren ergeben.

3. K-Means. Dies ist der zentrale Schritt. K-Means teilt den Vektorraum in genau K Gruppen auf, wobei K auf die Anzahl der gewünschten Ausgaben des Benutzers festgelegt wird:

from sklearn.cluster import KMeans
n_outputs = 10  # User wants 10 quiz sheets
kmeans = KMeans(n_clusters=n_outputs, random_state=42, n_init=10)
kmeans.fit(embeddings)

Drei Eigenschaften ergeben sich direkt daraus und erfüllen die drei Einschränkungen. Es ist keine Abfrage erforderlich, da K-means nach Ähnlichkeit zwischen den Blöcken gruppiert und nicht nach Relevanz gegenüber einem externen Signal. Eine thematische Abdeckung ist gewährleistet, da jeder Block genau in einem Cluster landet und jedes Thema in den Daten vertreten ist. Redundanzen verschwinden, da Blöcke, die dasselbe aussagen, ähnliche Embeddings haben, zusammenfallen und einen einzigen repräsentativen Wert liefern.

4. Auswahl des Repräsentanten. Für jeden Cluster wird der dem Mittelpunkt am nächsten liegende Block gewählt, der das Thema des Clusters am besten widerspiegelt:

import numpy as np
selected = []
for i in range(n_outputs):
    cluster_indices = np.where(kmeans.labels_ == i)[0]
    centroid = kmeans.cluster_centers_[i]
    distances = np.linalg.norm(
        embeddings[cluster_indices] - centroid, axis=1
    )
    best_local_idx = np.argmin(distances)
    best_global_idx = cluster_indices[best_local_idx]
    selected.append(chunks[best_global_idx])  # Full chunk with metadata

Der ausgewählte Abschnitt enthält alle seine ursprünglichen Metadaten, sodass nichts verloren geht und alles zitiert werden kann. Für umfangreichere Ergebnisse können anstelle eines Abschnitts die drei nächstgelegenen Abschnitte pro Mittelpunkt verwendet werden; das Prinzip bleibt unverändert.

5. Generation. Die ausgewählten Abschnitte jedes Clusters werden zusammen mit einem an den Ausgabetyp angepassten Prompt an das LLM gesendet, wobei die Quellmetadaten ebenfalls übermittelt werden, damit das Modell zitieren kann. Cluster 1 erzeugt Quiz 1 und zitiert dabei die Seiten 12 bis 14 des ersten PDFs. Cluster 2 erzeugt Quiz 2 und zitiert einen Video-Transkriptpunkt bei 14:30. Dieses Muster wiederholt sich bis zu Cluster K.

Wenn keine Anzahl angegeben ist

Nicht jeder Benutzer bittet um zehn Tests; einige möchten einfach nur „einen Test“ oder „eine Zusammenfassung“. Drei Alternativen funktionieren. Ein Token-Budget teilt den effektiven Kontext des Modells durch die durchschnittliche Größe der Blöcke: Bei einem 16k-Token-Modell und 800-Token-Blöcken liegt K bei etwa 20. Die Ellbogenmethode prüft mehrere K-Werte und wählt den Punkt, an dem die Inertie nicht mehr signifikant abnimmt. Eine grobe Regel von einem Cluster pro 5 bis 10 Seiten Quelltext funktioniert ebenfalls. In der Praxis ist das Token-Budget am zuverlässigsten, da es direkt auf das Ausmaß abgestimmt ist, das das Modell bewältigen kann.

Was die Methode garantiert

Es handelt sich dabei um mathematische Eigenschaften von K-Means, nicht um empirische Beobachtungen.

  • Abdeckung. Jeder Punkt wird einem Cluster zugeordnet, sodass kein Teil unberücksichtigt bleibt. Wenn ein Thema existiert, gehört es zu einem Cluster mit einem Vertreter. Im Gegensatz dazu kann die Top-K-Abfrage K Teile zu einem beliebten Thema zurückgeben und andere völlig übersehen.
  • Keine Redundanz. Ähnliche Teile werden zusammengefasst, und jede Gruppe wird nur durch einen Vertreter dargestellt. Zwei Teile, die dasselbe in unterschiedlichen Worten ausdrücken, teilen sich einen Cluster, wobei nur einer erhalten bleibt.
  • Anpassbare Granularität. Ein niedriger Wert für K ergibt breite Cluster für umfassende Themen, ein hoher Wert für K ergibt enge Cluster für spezifische Konzepte, und der Benutzer steuert dies über die Anfrage.
  • Erhalt der Quelle. Da mit Teilen und nicht mit Tokenen oder Sätzen gearbeitet wird, bleibt die vollständige Metadatenkette bei jedem ausgewählten Teil erhalten. Eine Kompression auf Tokenebene kann aus Gründen der Konzeption dies nicht bieten.
  • Geschwindigkeit. K-means mit 500 Embeddings von 384 Dimensionen benötigt weniger als eine Sekunde. Während der Auswahl findet keine Aufruf einer Sprachmodell-Engine statt, nur bei der endgültigen Generierung, sodass die zusätzliche Verzögerung vernachlässigbar ist.
  • Wo es Nachteile hat

    Kugelförmige Annahmen. K-means geht von annähernd runden Clustern aus, während Embeddings-Räume nicht immer so geordnet sind. Ein Thema mit komplexer, nicht-konvexer Form kann auf mehrere Clustern aufgeteilt werden. HDBSCAN oder Gaussian Mixture Models könnten helfen, garantieren jedoch nicht unbedingt genau K Clustern.

    Typisch, aber nicht unbedingt aussagekräftig. Der dem Mittelpunkt am nächsten liegende Teil ist der typischste. Die Durchführung von TextRank innerhalb jedes Clusters, wie es „Graphs in Clusters“ vornimmt, würde eine differenziertere Auswahl ermöglichen und stellt eine vielversprechende Verbesserung dar.

    Kleine Themen werden komprimiert. Wenn der Stoff zu 95 % aus Biologie und zu 5 % aus Chemie besteht, erhält die Chemie wahrscheinlich einen Cluster, während die Biologie K-1 erhält. Der Chemie-Cluster existiert zwar, ist aber proportional komprimiert. Ein gewichteter oder stratifizierter Ansatz könnte dieses Problem lösen.

    Die Qualität der Blöcke entscheidet alles. Wenn das Aufteilen in Blöcke ein Konzept in zwei Teile spaltet oder unverwandte Themen miteinander vermischt, trifft der Schaden das Clustering. Ein gutes Aufteilen in Blöcke mit semantischer Trennung, Überschneidungen und Erweiterung durch Metadaten ist keine Option.

    Vergleich in einem Durchgang

    RAG ist schnell und behält die Quellen bei, erfordert jedoch eine Abfrage und kann zu einem Thema K Blöcke zurückgeben. Selective Context und LLMLingua sind schnell und abfragenfrei, vernachlässigen jedoch die Quellstruktur und können keine vollständige Abdeckung gewährleisten. RECOMP ist leistungsstark, aber abfrageabhängig. TextRank und LexRank sind schnell und abfragenfrei, doch die Abdeckung ist aufgrund von Redundanzen nur teilweise, da die Nachvollziehbarkeit bei Sätzen endet. Graphs in Clusters ist abfragenfrei und bietet eine gute Abdeckung, arbeitet jedoch mit Sätzen und entfernt die Quellmetadaten. Auch die MapReduce-Zusammenfassung benötigt keine Abfrage, weist jedoch eine nur teilweise Abdeckung auf; Quellverweise verschwinden während der Zusammenfassungsschritte, und sie ist langsam, da mehrere Durchläufe mit großen Sprachmodellen erforderlich sind.

    Die hier beschriebene K-means-basierte Auswahl von Abschnitten ist die einzige Option, die ohne Abfrage läuft, durch ihre Konstruktion eine thematische Abdeckung garantiert, eine vollständige Nachvollziehbarkeit auf Abschnittsebene bewahrt, in weniger als einer Sekunde abgeschlossen ist und weder fein abgestimmte Modelle noch eine Vektordatenbank erfordert.

    Benennung des Problems

    Was die Sache schwierig macht, ist weniger die technische Komplexität als vielmehr das Fehlen eines Namens. Wenn man nach RAG sucht, erscheinen Tausende von Ergebnissen. Bei der Suche nach Prompt-Kompression taucht LLMLingua auf. Bei der Suche nach extraktiver Zusammenfassung werden Methoden wie TextRank, LexRank und BERT-basierte Ansätze genannt. Doch wenn man nach einer Möglichkeit sucht, aus einem großen Korpus ohne Abfrage die besten Abschnitte auszuwählen, um die thematische Abdeckung zu maximieren und gleichzeitig die Herkunft nachvollziehbar zu halten, erhält man fast nichts zurück.

    Eine passende Bezeichnung ist die query-freie semantische Kompression. Es handelt sich dabei weder um eine Suche, da es keine Abfrage gibt, noch um eine Zusammenfassung, da in dieser Phase kein neuer Text erzeugt wird. Es handelt sich auch nicht um Kompression von Prompts, da keine Token aus dem vorhandenen Text entfernt werden. Es handelt sich vielmehr um eine Auswahl mit garantiertem Abdeckungsumfang: Die Auswahl des kleinsten Satzes an Teilen, der den größtmöglichen Teil des Materials repräsentiert, während gleichzeitig der Bezug zu den Dokumenten erhalten bleibt.

    Das Problem tritt auf, wo immer ein System große vom Benutzer bereitgestellte Inhalte in strukturierte Ausgaben umwandelt, ohne eine explizite Suchabsicht zu haben. Beispiele hierfür sind Lernmaterialien aus Kursinhalten, Berichte aus großen Dokumentensammlungen, Zusammenfassungen von Sitzungen aus stundenlangen Transkripten, Zusammenfassungen von Überprüfungen aus großen Pull-Requests sowie rechtliche Analysen, bei denen die Abdeckung aller Klauseln wichtiger ist als die Beantwortung einer einzigen Frage.

    Der K-means-Ansatz ist eine Lösung – vermutlich die einfachste. Hybride Ansätze, die Clustering mit grafenbasiertem Ranking, Informationsdichteschätzungen oder einer leichten LLM-Verarbeitung zur Themenerkennung kombinieren, könnten besser abschneiden, und das Feld ist noch weitgehend unerschlossen.

    Alles in Code

    Der gesamte Auswahlprozess passt in weniger als 50 Zeilen:

    from sentence_transformers import SentenceTransformer
    from sklearn.cluster import KMeans
    import numpy as np
    def select_representative_chunks(chunks, n_outputs, model_name='all-MiniLM-L6-v2'):
        """
        Select the most representative chunks from a large corpus
        using K-means clustering. One cluster = one output.
    
        Args:
            chunks: list of dicts with 'text', 'source', 'page', etc.
            n_outputs: number of outputs the user wants (= K)
            model_name: embedding model to use
    
        Returns:
            list of selected chunks with cluster metadata
        """
        # Embed
        model = SentenceTransformer(model_name)
        embeddings = model.encode([c['text'] for c in chunks], show_progress_bar=True)
    
        # Cluster
        kmeans = KMeans(n_clusters=n_outputs, random_state=42, n_init=10)
        kmeans.fit(embeddings)
    
        # Select representatives
        selected = []
        for i in range(n_outputs):
            cluster_indices = np.where(kmeans.labels_ == i)[0]
            centroid = kmeans.cluster_centers_[i]
            distances = np.linalg.norm(embeddings[cluster_indices] - centroid, axis=1)
            best_local_idx = np.argmin(distances)
            best_global_idx = cluster_indices[best_local_idx]
    
            selected.append({
                'cluster': i,
                'chunk': chunks[best_global_idx],
                'distance_to_centroid': float(distances[best_local_idx]),
                'cluster_size': len(cluster_indices),
            })
    
        return selected
    

    In dem Auswahlschritt gibt es weder eine Vektordatenbank noch einen Abrufprozess, weder ein fein abgestimmtes Modell noch einen Aufruf eines LLM. Embeddings, Clustering und die Auswahl von Mittelpunkten reichen aus.

    Wo es in der Praxis eingesetzt wurde

    Der Prozess wurde innerhalb einer Lernanwendung entwickelt und getestet, die interaktive Lernmaterialien wie Quizze, Flashcards, Zusammenfassungen und Konzeptkarten aus allem erstellt, was ein Student hochlädt: Vorlesungsnotizen, Lehrbücher, Video-Transkripte und Folien. Sie umfasst außerdem Tools, die für Lernende mit Legasthenie, ADHS oder anderen kognitiven Schwierigkeiten angepasst sind, sowie Elemente der Gamifizierung. Das Projekt befindet sich noch in der aktiven Forschung und Entwicklung, ist derzeit auf Französisch verfügbar und eine englische Version ist geplant.

    In dieser Konfiguration übernimmt die K-means-Schicht die Inhaltsauswahl. Das Clustern von 500 Abschnitten dauert weniger als eine Sekunde, skaliert gut und gewährleistet eine thematische Abdeckung bei sehr unterschiedlichen Quellen – von dichten Biologielehrbüchern bis zu verstreuten Vorlesungsaufzeichnungen.

    Warum die Idee absichtlich einfach ist

    Die Auswahl repräsentativer Abschnitte aus einem großen Korpus – ohne Suchanfrage, mit thematischer Abdeckung und Quellenverfolgbarkeit – ist ein häufigeres Anliegen, als die Literatur nahelegt. Jeder, der LLM-Tools für Bildung, Berichterstellung, Meeting-Analyse oder Rechtsprüfung entwickelt, ist wahrscheinlich bereits auf eine Variante davon gestoßen.

    Der Ansatz ist absichtlich schlicht. K-means existiert bereits seit Jahrzehnten und Satzembeddings sind Standardwerkzeuge. Der Beitrag liegt in der Strukturierung: Die Absicht des Benutzers wird als K definiert, jedes Cluster gilt als Ergebnis und die Verbindung von Abschnitt zu Quelle bleibt im gesamten Prozess erhalten.

    Es besteht weiterhin Verbesserungspotenzial. Das Clustering könnte mit grafenbasiertem Ranking, einer Skalierung nach Informationsdichte oder leichtgewichtigen LLM-Aufrufen zur Themenerkennung kombiniert werden. Die Auswahl des Mittelpunkts könnte durch etwas Subtileres ersetzt werden, wie zum Beispiel das Ranking innerhalb der Cluster, eine nach Diversität gewichtete Auswahl oder ein kurzer LLM-Aufruf, um den informativsten Teil auszuwählen. Die Idee soll genutzt, angepasst und weiterentwickelt werden.