adesso Blog

Im dritten Teil meines Blog-Beitrags werde ich anhand eines Beispiels auf High-Level-Ebene die verschiedenen Schritte in einer Transformationspipeline erläutern und die Zwischenergebnisse zeigen.

Unser Beispiel

Als Beispiel habe ich das Dokument in Abbildung 1 gewählt. Es ist ein öffentlich zugängliches Sozialgerichtsurteil. Es besteht insgesamt aus 7 Seiten.


Abbildung 1: Testdokument für Zusammenfassung

Die folgende Tabelle vergleicht die Ergebnisse der Tokenzählung für die Seiten unseres Beispieldokuments für verschiedene Bibliotheken. Auf der linken Seite ist die Ausgabe des OpenAI-Tokenizers mit und ohne Newlines dargestellt. Auf der rechten Seite ist die Ausgabe des Tokenizers von Aleph Alpha mit und ohne Newlines dargestellt.

Vergleich Tokenizer-Output von OpenAI Tiktoken versus den von Aleph Alpha


Abbildung 2: Vergleich Tokenizer-Output von OpenAI Tiktoken versus den von Aleph Alpha

Auffallend sind zunächst die unterschiedlichen Tokensummen (auch die Ausprägung der jeweiligen Embedding Outputs ist signifikant unterschiedlich). Bei Aleph Alpha sind sie tendenziell höher als bei OpenAI (Tiktoken). Auch ein Text-Cleansing ändert bei der OpenAI Library nicht viel, bei der Aleph Alpha Library ist es signifikant.


Abbildung 3: Unterschiedliche Tokensummen

Dies liegt daran, dass die OpenAI Library multiple Newlines mit einem Token kodiert und nicht nach der tatsächlichen Häufigkeit. Bei der Aleph Alpha Library ist es genau umgekehrt. Daraus lässt sich zunächst nur ableiten, dass bei Aleph Alpha expliziter gearbeitet werden muss.

Datenvorverarbeitung

Im Folgenden möchte ich ganz grob durch die Datenvorverarbeitung für die automatische Zusammenfassung gehen. Wie bereits im zweiten Teil dieses Blog-Beitrags beschrieben, möchte ich den gesamten Text in einzelne Textchunks aufteilen. Zuerst werde ich den Text bereinigen (hauptsächlich Newlines entfernen, aber es könnte noch ein bisschen mehr sein) und den Text in Sätze aufteilen. Wir sehen bereits in der folgenden Abbildung, dass mein Code für das Splitten in einzelne Sätze fehleranfällig ist, da er nach jedem Punkt schneidet (siehe rote Linien rechts unten). Solche Fehler werden sich in der weiteren Datenverarbeitung ausbreiten und sollten unbedingt in einer vorherigen EDA (Explorative Data Analysis) identifiziert werden, damit Optimierungen nicht nur empfohlen, sondern explizit für bestimmte Probleme adressiert und evaluiert werden können.


Abbildung 4: Vorgehen beim Textsplitting

Als Nächstes möchte ich die endgültigen Textchunks zusammenstellen. Dazu nehme ich in Anlehnung an Isaac Tham die Angaben in fünf „Sätzen“ mit jeweils einem Satz-Overlap, um etwas Kontext herzustellen (siehe Lines 84 und 85). Wie ich das dann im gesamten Text mache, ist in den Lines 91 ff. dargestellt (ziemlich trivial).


Abbildung 5: Textchunking-Vorgehen

Für dieses Beispieldokument bekommen wir mit den vorgegebenen Parametern 16 Textchunks (siehe folgende linke Abbildung). Diese 16 Textchunks embedde ich anschließend (siehe folgende rechte Abbildung Die Embedding Size bei Aleph Alpha ist 5.120.


Abbildung 6: Textchunking-Vorgehen

Clustering

Für das Clustering verwende ich relativ stumpf KNN und lasse mir kurz helfen, was am besten k mit einer Silhouettenanalyse ist. Wie man das besser macht, werde ich in einem separaten Blog-Beitrag ausführlicher behandeln. Die Silhouettenanalyse ergibt k = 2.


Abbildung 7: Optimale Anzahl von Clustern

Anschließend werden Zusammenfassungen für jeden Textchunk erstellt, die in das Endergebnis einfließen (siehe Abbildung 6). In Abbildung 6 sehen wir die zugeordneten Cluster pro Textchunk (Spalte 2) und die Zwischenzusammenfassungen (Spalte 3). Darunter ist beispielhaft die Transformation für Zeile 5 dargestellt.


Abbildung 8: Optimale Anzahl von Clustern

Zusammenfassung erstellen

Mit diesen Vorarbeiten können wir nun im finalen Schritt die eigentliche Zusammenfassung erstellen. Folgender Prompt steckt hinter der Ergebnisausgabe von Abbildung 9:

### Instruction: Fasse bitte in einem Satz den Input zusammen.
### Input:{{document}}
### Response:

Dies ist ein relativ einfacher, nicht optimierter Prompt, da hier der Transformationspfad im Vordergrund steht. Mit diesem Prompt erhalte ich für meine k = 2 Cluster, also Textstücke und Zwischenzusammenfassungen, dann zwei Zusammenfassungen, die in der Konsole in Abbildung 9 zu sehen sind.


Abbildung 9: Finale Zusammenfassung

Im ersten Blog-Beitrag dieser Reihe hatten wir uns mit dem Phänomen „Lost in the Middle“ beschäftigt (siehe Blog, Teil 1). Aus Interesse wollte ich dies noch einmal mit der Explain-Funktion von Aleph Alpha untersuchen (siehe folgende Abbildung). Wir sehen auch hier, dass sich die endgültige Zusammenfassung für Cluster 1 hauptsächlich aus dem ersten Teil der eingegebenen Texte speist.


Abbildung 10: Nochmal auf „Lost in the Middle“ geschaut

In der folgenden Abbildung habe ich eine weitere Eingabeaufforderung verwendet, um eine geführte Zusammenfassung zu erstellen. Die Leitfragen und die Ergebnisse werden in Abbildung 11 ausgegeben (siehe Konsole).


Abbildung 11: Guided Summary

Der gesamte Code kann hier heruntergeladen und ausprobiert werden: https://github.com/LilianDK/summarization

Das Beispieldokument befindet sich ebenfalls im Repo wie die verwendeten Prompts (siehe folgende Abbildung in der Mitte). Es muss nur ein eigener Token verwendet werden und schon könnt ihr selbst ein wenig herumprobieren.


Abbildung 13: Hauptfiles

Zusammenfassung und Ausblick

In dieser Blog-Reihe (übrigens keine maschinelle Zusammenfassung) habe ich versucht, den Weg der Transformation mit all den Problemen dazwischen bei einer maschinellen Zusammenfassung darzustellen. Dabei bin ich recht flach geblieben, aber wir werden die einzelnen Schritte, die wir nicht näher betrachtet haben, in den Folge-Blogs vertiefen und auch mit etwas repräsentativeren Untersuchungen diskutieren. Bis dahin empfehle ich die Lektüre von „An Empirical Survey on Long Document Summarization – Datasets, Models and Metrics!“, die 2022 von Huan Yee Koh, Jiaxin Ju, Ming Liu und Shirui Pan verfasst wurde. Diese Publikation ist meiner Meinung nach sehr sauber und umfassend. Sie stellt die richtigen Fragen und geht ihnen mit wissenschaftlicher Sorgfalt nach.

Ihr möchtet gern mehr über spannende Themen aus der adesso-Welt erfahren? Dann werft auch einen Blick in unsere bisher erschienenen Blog-Beiträge.

Auch interessant:

Bild Lilian  Do Khac

Autorin Lilian Do Khac

Lilian Do Khac beschäftigt sich mit der Konzeption und Implementierung von KI-Lösungen für die datengetriebene Entscheidungsunterstützung. Trustworthy-AI-Anforderungen spielen dabei eine signifikante Rolle. In diesem Bereich ist sie nicht nur aus IT-Implementierungssicht unterwegs, sondern auch als Wissenschaftlerin.

asdf

Unsere Blog-Beiträge im Überblick

In unserem Tech-Blog nehmen wir Sie mit auf eine spannende Reise durch die adesso-Welt. Weitere interessante Themen finden Sie in unseren bisherigen Blog-Beiträgen.

Zu allen Blog-Beiträgen

asdf

Unser Newsletter zum adesso Blog

Sie möchten regelmäßig unser adesso Blogging Update erhalten? Dann abonnieren Sie doch einfach unseren Newsletter und Sie erhalten die aktuellsten Beiträge unseres Tech-Blogs bequem per E-Mail.

Jetzt anmelden


Diese Seite speichern. Diese Seite entfernen.