Ein Praxistest zum Datenabgleich mithilfe von ChatGPT
Inhalt
1 Einführung
2 Aufgabenbeschreibung
3 Versuchsprotokoll
4 Abschlussüberprüfung
5 Reflexion
1 Einführung
Im Rahmen des Projektes History as a visual concept: Peter of Poitiers’ Compendium historiae erstellen Wissenschaftler*innen verschiedener europäischer Universitäten die erste digitale Edition des graphischen Werks Compendium Historiae in Genealogia Christi. In dem Compendium entwickelte der Pariser Gelehrte Petrus von Poitiers im späten zwölften Jahrhundert in Form einer lineare Synopse eine Visualisierung der Heilsgeschichte, um seinen Studenten deren komplexen Zusammenhänge näherzubringen. Ein Autortext liegt uns heute nicht mehr vor, das Werk ist aber in über 330 Abschriften überliefert. Diese Codizes und Rollen befinden sich in Bibliotheken und Archiven innerhalb Europas und der USA. Im März 2025 habe ich bei der Kuration der Transkriptionsdaten zu einer der Handschriften geholfen.
Die Handschrift, an deren Erschließung ich mitgearbeitet habe, liegt in der Stadtbibliothek Auxerre, wird als Auxerre, Bibliothèque municipale, Ms. 145 identifiziert und ist auf der digitalen Plattform mit der internen Projektsigle Ax versehen. Meine Aufgabe bestand darin, zu untersuchen, inwieweit sich die Datenkuration (siehe Kapitel 2) mithilfe eines auf einem großen Sprachmodell basierenden Chatbots automatisieren lässt. Der bei dem Test entstandene Chatverlauf steht als Archiv auf GitHub zur freien Verfügung. Meine Erfahrungen zur Rolle der Kenntnis der Ausgangsdaten und eines darauf aufbauenden Promptings bei der Arbeit mit Chatbots möchte ich im Folgenden in Form eines Versuchsprotokolls mit anschließender Reflexion darstellen. Dabei werde ich vor allem der Frage nachgehen, wie man den Verhaltensspielraum von Chatbots so beschränken kann, dass sie Probleme melden, anstatt sie auf unkontrollierte Art und Weise aufzulösen.
Bevor ich zu meinem Versuchsprotokoll komme, möchte ich aber die Datenkuration näher beschreiben, für die ich einen Chatbot genutzt habe. Dafür werde ich zuerst die graphische Visualisierung vorstellen, die Petrus von Poitiers im Compendium Historiae entwickelt hat. Dann werde ich zeigen, wie die Abschriften des Werkes auf der digitalen Plattform präsentiert und wie die Präsentationen auf der Datenebene ermöglicht werden. Abschließend werde ich erläutern, welche Schritte der Datenkuration im Hinblick auf die Handschrift Ax von mir durchgeführt werden sollten und warum ich versucht habe, diese Aufgabe mithilfe des Chatbots ChatGPT zu automatisieren.
2 Aufgabenbeschreibung
Das Compendium Historiae und seine digitale Präsentation
Wenn man sich die von Petrus von Poitiers im Compendium Historiae entwickelte Visualisierung in der in Auxerre liegenden Handschrift anschaut [siehe Abbildung 1], kann man sehen, dass sie in ihrer Struktur einem Stammbaum ähnelt. Sie visualisiert die Bibelgeschichte so, dass sowohl gleichzeitige als auch aufeinanderfolgende Beziehungen zwischen Personen und Ereignissen auf einmal dargestellt werden können. Die Abfolge der Generationen von Adam bis Christus bildet dabei eine zentrale Achse, die aus kreisförmigen Knoten besteht, in denen die Namen der jeweiligen biblischen Personen stehen. Die Personen in den Knoten sind wiederum durch Linien miteinander verbunden, wodurch ihre genealogischen Beziehungen ausgedrückt werden. Außerdem gibt es noch Textabschnitte, in denen die Bibelgeschichte erzählt wird und die den Knoten und damit den Personen durch räumliche Nähe zugeordnet sind. Um in diesem Blogbeitrag nicht zu umfassend zu werden, klammere ich die digitale Erschließung der Knoten und Verbindungslinien aus und konzentriere mich auf die Erschließung der erzählenden Textabschnitte.
Im Rahmen des oben beschriebenen Projektes History as a visual concept wird eine digitale Plattform erstellt, auf der die verschiedenen Abschriften des Compendium Historiae präsentiert werden. In Abbildung 2 kann man rechts einen Ausschnitt des Faksimiles und links einen Teil der Transkription der Handschrift mit der Sigle C2 sehen. Die Erschließung dieser Handschrift war bereits abgeschlossen, als ich mit der Kuration der Daten zu der Handschrift Axbegonnen habe.
In dem Faksimileausschnitt in der obigen Abbildung kann man einen schwarzen Rahmen erkennen. Solche Rahmen gehören nicht zur originalen Handschrift, sondern erscheinen nur, wenn man am Computer per Mouseover mit dem Faksimile interagiert. In der oben hervorgehobenen Zone befindet sich der Textabschnitt über die biblische Person Lot. Die entsprechende Transkription über Lot kann man oben links in der scrollbaren Transkriptionsliste erkennen. Da auf der Datenebene die Textabschnitte im Faksimile mit ihren jeweiligen Transkriptionen verbunden sind, führt auf der Präsentationsebene ein Mausklick auf einen Textabschnitt dazu, dass in der Transkriptionsliste zu der richtigen Transkription gesprungen wird.
Datenaufbau und Verknüpfung zwischen Zonen und Transkriptionen
Die Datenebene zu den verschiedenen Handschriften besteht aus TEI/XML-Dokumenten und im digitalen Erschließungsprozess wird für jede der 330 Abschriften von Compendium Historiae ein solches Dokument erstellt. Im Folgenden werde ich zuerst den grundsätzlichen Aufbau von TEI/XML-Dokumenten zeigen und dann einen genaueren Blick in den facsimile– und text-Bereich werfen.
In der Abbildung 3 kann man sehen, dass sich die TEI/XML-Dokumente in drei Bereiche einteilen lassen: den teiHeader-Bereich, den facsimile-Bereich sowie den text-Bereich. In dem teiHeader-Bereich befinden sich die Metadaten zu der jeweiligen Handschrift. Der facsimile– und der text-Bereich sind jeweils in Teilbereiche aufgeteilt, die die verschiedenen Seiten einer Handschrift repräsentieren und Informationen zu den oben erwähnten Zonen und Transkriptionen enthalten.

In den Seitenelementen des facsimile-Bereichs werden die Zonen als zone-Elemente angeleg [siehe Abbildung 4]. Der Ort der Zone im digitalen Faksimile wird über die vier Pixelwerte in den Attributen lrx, lry, ulx und uly angegeben. Diese Werte bestimmen die Punkte der vier Ecken der rechteckigen Zone. In den Seiten des text-Bereichs werden div-Elemente als Container für die einzelnen Transkriptionen angelegt [siehe Abbildung 5]. Die zueinander gehörenden Zonen und Transkriptionen werden durch gleiche IDs miteinander verbunden, die sprechend sind und sich auf biblische Personen und Personengruppen beziehen.
Datenabgleich für die digitale Erschließung von der Handschrift Ax
Als ich meinen Praxistest mit ChatGPT begonnen habe, war das TEI/XML-Dokument zu der Handschrift Ax bereits erstellt und mit Informationen angereichert worden. Die Arbeit in dem facsimile-Bereich war schon vollständig abgeschlossen. Die Zonen waren dort angelegt und enthielten die passenden Pixelwerte und IDs. Daher ich konnte mich bei meiner Datenkuration vollständig auf den text-Bereich konzentrieren, der bereits in Seitenbereiche unterteilt worden war, in denen sich auch schon die oben erwähnten mit IDs versehenen Transkriptions-Container befanden. Die Container waren aber noch leer und mussten mit den richtigen Transkriptionen befüllt werden. In der Abbildung 6 zeigt das anfängliche pb-Element durch den Wert p. 66, dass ab dieser Stelle die Seite 66 beginnt. Die eingerückten div-Elemente sind die entsprechenden leeren Container für die Transkriptionen von dieser Seite.

Beispielsweise in den untersten Container (siehe Abbildung 6), der die ID t-abraham trägt, gehört der Textabschnitt über die biblische Figur Abraham. Die Transkriptionen waren im Rahmen einer Übung zur Handschriftenkunde an der Universität Wuppertal angefertigt worden und lagen mir gesammelt in einem Word-Dokument vor. Meine Aufgabe war es nun also zu verstehen, auf welche biblischen Personen sich die Transkriptionen beziehen, sie dann den sprechenden IDs zuzuordnen und in die richtigen Container einzufügen. Durch meinen Praxistest wollte ich herausfinden, ob sich die Zuordnung auch automatisieren ließe. In der Abbildung 7 sieht man den Text über Abraham. Die runden Klammern, Pipe-Symbole und farbigen Markierungen repräsentieren Abkürzungsauflösungen, Zeilenumbrüche und besondere Schreibweisen.
Gründe für die Automatisierung mit ChatGPT
Eine einfache – aber nicht funktionierende – Automatisierungslösung wäre ein Programm gewesen, das die Transkriptionen ihrer Reihenfolge nach mit den Containern zusammenführt. Es würde die erste Transkription in den ersten Container einfügen, dann die zweite in den zweiten und so weiter bis zum Schluss. Da die Reihenfolge der mir vorliegenden Transkriptionen allerdings gar nicht mit der Reihenfolge der Container im TEI/XML-Dokument korrespondierte, war diese Lösung schon im Voraus ausgeschlossen.
Eine andere einfache – aber ebenfalls nicht funktionierende – Lösung wäre ein Programm gewesen, das die Container und Transkriptionen auf der Grundlage eines Vergleichs von Zeichenketten einander zuordnet. Ein solches Programm hätte beispielsweise aus dem Container mit der ID t-abraham den String “abraham” ausgelesen und nach der Transkription gesucht, in dem der gleiche String auftaucht. Auch dieses Verfahren hätte aber aus verschiedenen Gründen nicht funktioniert. Ein Problem wäre etwa gewesen, dass das Programm unter anderem mehrere Transkriptionen mit dem String “abraham” gefunden hätte und sich dann nicht hätte entscheiden können, welche Transkription eigentlich von der Person Abraham erzählt und damit die richtige ist. Die Abbildung 8 zeigt einen Textabschnitt, in dem der String “abraham” zwar vorkommt, der aber von einer Personengruppe erzählt, die nach Abraham benannt wurde. Diese Transkription musste in den Container mit der ID t-heber eingefügt werden, nicht in denjenigen mit der ID t-abraham.

Weil die Automatisierung mit deterministischen Programmen nicht funktioniert hätte, wollte ich ein Programm mit künstlicher Intelligenz austesten. Das Programm sollte die Transkriptionen lesen und dann erkennen können, von welchen biblischen Figuren sie handeln. Auf dieser Grundlage könnte es die Transkriptionen den passenden IDs zuordnen und in die richtigen Container einfügen. Mit den verschiedenen ChatBots, die auf großen Sprachmodellen basieren und im Internet zur freien Verfügung stehen, scheint es Programme zu geben, die die von mir gesuchten Kompetenzen besitzen.
Ich habe den Chatbot ChatGPT von dem Softwareunternehmen OpenAI genutzt, da ich ihn bereits regelmäßig verwendete und ein Plus-Abbonement besaß, durch das ich ein höheres Nutzungslimit hatte und auf neuere Modelle zugreifen konnte. Den Test habe ich schließlich mit dem Modell o3-mini durchgeführt. ChatGPT selbst hatte mir dieses Modell vorgeschlagen, nachdem ich ihm die Aufgabe grob skizziert hatte. Eine systematische Überprüfung, ob nicht ein anderes Modell besser geeignet gewesen wären, habe ich nicht durchgeführt. Das Modell o3-mini sollte besonders hilfreich bei technischen Aufgaben wie das Programmieren von Code sein. Im vorliegenden Versuch bestand die Hauptaufgabe des Chatbots jedoch darin, den Inhalt von Transkriptionen zu analysieren. Ob das damals neueste Modell GPT-4.5, das von OpenAI am 28. Februar 2025 als Research Preview veröffentlicht worden war, für diese Aufgabe besser geeignet gewesen wäre, habe ich nicht untersucht.
3 Versuchsprotokoll
1. Prompt: Reproduktion von ChatGPTs Verhalten
Für die Zusammenführung von Transkriptionen und Containern sollte ChatGPT die gleichen Arbeitsschritte wiederholt auf verschiedene Daten anwenden. Da sein Verhalten auf Wahrscheinlichkeit beruht, gibt es aber bei mehrfacher Eingabe des gleichen Prompts nie die gleichen Antworten. Das Ziel meines Promptings konnte daher nicht sein, das ChatGPT seine Arbeitsweise immer wieder absolut reproduziert. Stattdessen wollte ich seinen Verhaltensspielraum so stark eingrenzen, dass es das richtige Verhalten zumindest annähernd reproduziert und die richtigen Zusammenführungen möglichst wahrscheinlich werden.
In meinem ersten Prompt habe ich ChatGPT daher zuallererst eine professionelle Rolle zugeschrieben und einen wissenschaftlichen Kontext erzeugt. Damit wollte ich den ChatBot zu einer vollständigen und exakten Arbeit motivieren. Ich habe geschrieben, dass er ein*e Editionswissenschaftler*in ist und dass die genaue Ausführung meiner Anweisungen sehr wichtig sei. Außerdem habe ich ihm die Ausgangslage erklärt: Es gibt Transkriptionen und leere Containerelemente mit IDs. Als Ziel habe ich definiert, dass die Transkriptionen und leeren Containerelemente auf der Grundlage der IDs zusammengeführt werden sollen. Da ich kein Vertrauen darin hatte, dass ChatGPT von sich aus einen guten Lösungsweg findet und ihn dann mehrfach wiederholt, habe ich noch eine längere Arbeitsanweisung in meinen Prompt geschrieben. Dabei habe ich versucht, die Anweisung so exakt und formelhaft wie möglich zu formulieren, um den Interpretationsspielraum so eng wie möglich zu halten und ChatGPT dadurch besser zu steuern. Das folgende Zitat zeigt einen Ausschnitt aus meinem ersten Prompt mit der Daten- und Zielbeschreibung sowie der Arbeitsanweisung:
“Im folgenden siehst du zwei Dokumente. In dem Dokument1 siehst du Transkriptionen von verschiedenen Textabschnitten, eines historischen Dokuments. Dabei enthält ein div-Tag jeweils ein Textabschnitt. Außerdem sind die Transkriptionen verschiedenen Seiten zugeordnet, die durch <pb n=”[Seitenzahl]/”> angegeben werden. Die Seitenzahl steht dabei immer über der betreffenden Menge an Transkriptionen. Behalte am Ende, wenn du den vollständigen Text herausgibst, diese Ordnung bei. Zähle bitte die div-Tags in Dokument1 und merke dir die Zahl. Die div-Tags in Dokument1 haben, wie du siehst, noch keine Attribute. Deine Aufgabe ist es, die div-Tags in Dokument1 mit Attributen zu versehen. Die Attribute, die du in das Dokument1 integrieren sollst, findest du in Dokument2. In Dokument2 findest du ebenfalls div-Tags, die sich auf Textabschnitte des gleichen historischen Dokuments beziehen, wie Dokument1. Zähle bitte die div-Tags in Dokument2 und merke dir die Zahl. Sie muss mit der Anzahl an div-Tags in dem Dokument1 übereinstimmen. Falls das nicht der Fall ist, breche deine Aufgabe hier ab und melde das Problem. Falls das der Fall ist, mache weiter. Wenn du die Attribute aus Dokument1 in Dokument2 [sic!] integrierst, musst du folgendermaßen vorgehen. Du findest in Dokument2 die Attribute xml:id und ssid. Diese Attribute haben jeweils den Wert t-[Thema]. Du solltest also im Dokument2 die Themen identifizieren, auf die sich sich beziehen, und dir diese Themen merken. Dann schaust du in das Dokument1 und liest dir die transkribierten Textabschnitte durch. Wenn du das gemacht hast, dann überlegst du dir, welches Thema zu welchem Textabschnitt passt. Es passt immer nur ein Thema zu einem Textabschnitt. Normalerweise sollte es für jeden Textabschnitt ein Thema geben. Wenn du für einen Textabschnitt nicht direkt ein Thema findest, dann denke nocheinmal darüber nach, ob nicht doch ein Thema passen könnte. Wenn du dann die Themen aus Dokument2 und die transkribierten Textabschnitte aus Dokument1 miteinander gematched hast, dann beginnt die Übertragungsarbeit. Du überträgst dann bitte die Attribute und Werte aus den div-Tags au dem Dokument2 in die div-Tags mit den passenden transkribierten Textabschnitte aus dem Dokument1.”
Wie in dem Ausschnitt erkennbar, habe ich in meinem Chat die Transkriptionen Dokument1 und die Container-Elemente Dokument2 genannt. Diese beiden Namen sollten mir als Variablen dienen. Rückblickend hätte ich besser die sprechenderen Variablen Transkriptionen und Container nutzen können. Dadurch hätte ich auch den Zahlendreher vermieden, der mir in dem Satz “Wenn du die Attribute aus Dokument1 und Dokument2 integrierst […]” unterlaufen ist. Dieser Fehler wurde weder von ChatGPT noch von mir im Verlauf der Nutzung dieses Promptes bemerkt.
Um die Arbeit von ChatGPT übersichtlicher und für mich besser beobachtbar zu machen, bin ich außerdem Stück für Stück vorgegangen und habe die Gesamtdaten in kleinere Datenpakete aufgeteilt. Ich habe ChatGPT immer nur diejenigen Container und Transkriptionen auf einmal zusammenführen lassen, die zwei Seiten der Handschrift Axentsprachen. ChatGPT las dann immer zuerst die Container-IDs und die Transkriptionen und erkannte jeweils, auf welche biblische Figur sich die Texte bezogen. Auf dieser Grundlage machte es seine Zuordnungen und führte am Ende die Container und Transkriptionen zusammen.
Mein erster Eindruck war, dass mein Prompt gut funktionierte. ChatGPT führte meine Arbeitsanweisungen Schritt für Schritt aus und auch bei mehrmaliger Wiederholung des gleichen Promptes waren die Abweichungen in seinen Antworten minimal. Die für mich beobachtbaren Variationen betrafen vielmehr den Stil, wie er seine Zwischenergebnisse präsentierte. Dies schien aber keinen Einfluss auf die Endergebnisse zu haben, die das Sprachmodell immer im korrekten TEI/XML-Format erzeugte, so wie ich es in meinem Prompt verlangt hatte.
Bei dem Schritt der Zuordnung von IDs und Transkriptionen schien meine Arbeitsanweisung eine Leerstelle zu haben und den ChatBot zur Entwicklung eigener Arbeitsweisen anzuregen. Er hat hier von sich aus damit begonnen, für seine Zuordnungen eine Liste [siehe Abbildung 9] zu erstellen. Ich habe die Idee mit der Liste aber sehr gut gefunden und keinen Grund darin gesehen, dem ChatBot dieses Verhalten auszureden. Im Nachhinein wundert es mich, dass ChatGPT die Listen wirklich konsequent erstellt hat, obwohl ich nie diesbezügliche Anweisungen gegeben habe.
ChatGPTs Abstürze und Unvollständigkeiten
Obwohl ich ChatGPT bei der Rollenzuweisung explizit um Vollständigkeit gebeten habe, hat es immer wieder unvollständige Endergebnisse erzeugt. Das ist vor allem dann passiert, wenn ich mit dem gleichen Prompt mehrere Datenpakete in einem einzigen Chatverlauf abarbeiten wollte und er daher immer länger und sich wiederholender wurde. Irgendwann hat ChatGPT dann damit begonnen, im letzten Arbeitsschritt seine Ergebnisse abzukürzen. Es hat hier entweder nur einen kleinen Anteil der zusammengeführten Container und Transkriptionen erzeugt oder die letzteren durch Auslassungspunkte abgekürzt [siehe Abbildung 10].

Einmal habe ich ChatGPT gefragt, warum es seine Aufgabe abgekürzt hat. Als Antwort habe ich zurückbekommen, dass es mir erst einmal Beispiele präsentieren wollte. Als ich ihn aber darum gebeten habe, die Aufgabe vollständig zu erledigen, konnte es mir meine Bitte nicht erfüllen. Scheinbar konnte der Chatbot nicht mehr auf die Zwischenergebnisse zurückgreifen. Ob dies auf eine interne Kontextkomprimierung, eine Begrenzung des Kontextfensters oder einen technischen Fehler zurückzuführen war, konnte ich im Rahmen des Versuchs nicht feststellen. Neben der unvollständigen Erfüllung der Arbeitsanweisung ist der Chatbot außerdem gelegentlich abgestürzt. In beiden Fällen musste ich die Aufgabe in einem neuen Chatverlauf von vorne beginnen.
ChatGPTs falsche Auflösung von Inkonsistenzen
Während der Kuration der ersten Datenpakete habe ich neben der oben beschriebenen Unvollständigkeit und den Abstürzen zunächst keine weiteren Probleme bemerkt. Ich hatte geplant, erst einmal alle Container und Transkriptionen abzuarbeiten und die Ergebnisse später zu überprüfen. Als ich ChatGPT aber das Datenpaket für die siebte und achte Seite von der Handschrift Ax zur Bearbeitung gegeben habe, änderten sich meine Pläne.
Ich hatte im Voraus gezählt, dass die Anzahl von Transkriptionen und IDs in dem Datenpaket nicht übereinstimmte und es eine Transkription weniger als IDs gab. Daher rechnete ich damit, dass mir ChatGPT eine Inkonsistenz in den Daten melden würde. Stattdessen hat es aber die eine ID, die notwendigerweise übrigbleiben musste, kommentarlos verschwinden lassen. Weil ich in meinen Erwartungen enttäuscht wurde, habe ich sofort damit angefangen, die bisherigen Ergebnisse zu überprüfen. Dabei habe ich schnell bemerkt, dass ChatGPT auch hier nicht immer alles richtig gemacht und beispielsweise IDs doppelt verwendet hat.
Eigentlich hätte jede ID immer nur zu einer einzigen Transkription passen sollen, in meinem ersten Prompt hatte ich das aber gar nicht explizit geschrieben. Ich war davon ausgegangen, dass die Transkriptionen und IDs zu 100% zueinander passen und dass ChatGPT deshalb gar keine Gründe dafür hätte, eine ID doppelt zu gebrauchen. Dass der Chatbot dies nun doch gemacht hat, war für mich ein Hinweis darauf, dass es auch in den ersten Datenpaketen Inkonsistenzen gegeben haben muss. Als ich die Datenpakete jetzt kritisch überprüfte, bemerkte ich, dass es zwar immer die gleiche Anzahl an Transkriptionen und IDs gab, sie aber inhaltlich nicht zu 100% zueinander passen.
ChatGPT hatte vermutlich manche IDs doppelt verwendet und andere wiederum kommentarlos zum Verschwinden gebracht, um mit den Inkonsistenzen in den Daten umzugehen. Diese Lösungsversuche habe ich selbst auch dadurch ermöglicht, dass ich in meinem ersten Prompt keine Anweisungen zum Umgang mit Problemen geschrieben hatte.
2. Prompt: Probleme melden statt auflösen
Da ich die Inkonsistenzen in den Daten nicht selbst beheben konnte, habe ich mich dazu entschieden, ChatGPT mit ihnen zu konfrontieren. Mein neues Ziel war es, den Chatbot zu einem kritischen Umgang mit den Problemen zu bringen. Es sollte Inkonsistenzen erkennen und mir melden, sodass ich sie notieren und an die anderen Editor*innen im Projekt weitergeben könnte. Auf keinen Fall sollte sich ChatGPT weiterhin eigene Lösungsversuche ausdenken und dann auch noch unkommentiert anwenden.
Um mein Ziel zu erreichen, habe ich nochmal ganz von vorne angefangen und einen neuen Prompt geschrieben. In seiner Form war er deutlich strukturierter als der erste. Wie man in folgendem Zitat sehen kann, habe ich die Arbeitsanweisung in vier klar voneinander getrennte Schritte eingeteilt. Diese Strukturierung hatte den Effekt, dass ChatGPT seine Arbeit konsequent nach jedem Zwischenschritt unterbrochen und gefragt hat, ob es fortfahren soll. Solche Unterbrechungen haben den Arbeitsprozess zwar verlangsamt, dafür konnte ich die Arbeit des Chatbots nun aber besser übersehen und kontrollieren:
“Du bist Teil eines editionswissenschaftlichen Projekts. Die Aufgaben, die ich dir geben werde, sind für das Gelingen diese Projektes sehr relevant und müssen daher sorgfältig ausgeführt werden. Achte daher bitte darauf, dass du meine Anweisungen befolgst, sehr exakt arbeitest und Schritt für Schritt vorgehst. Präsentiere nach jedem Schritt das Ergebnis und frage, ob du fortfahren sollst.
1. Lese das Dokument2. Erstelle eine Liste, die alle Attribute und Werte je <div>-Tag auflistet. Jedes <div>-Tag behandelt ein Thema. Identifiziere dieses Thema, indem du den Wert des Attributes xml:id analysiert. Die Werte der xml:id je <div>-Tag sind “t-[Thema]”. Merke dir, welche Themen die einzelnen <div>-Tags behandeln. Merke dir auch, welche <div>-Tags ein <note>-Tag enthalten. Erfinde keine eigenen Themen dazu.
2. Lese das Dokument1. Merke dir, welches <div>-Tag durch die <pb>-Tags welcher Seite zugeordnet ist. Jedes <div>-Tag in Dokument1 enthält einen Textabschnitt. Lese dir die Textabschnitte inhaltlich durch. Überlege dir, welches Thema aus dem Dokument1 zu welchem Textabschnitt passt. Dabei ist es möglich, dass es Textabschnitte gibt, die das ihnen zuzuordnende Thema nur indirekt erwähnen. Zu jedem Textabschnitt passt nur ein einziges Thema und zu jedem Thema passt nur ein einziger Textabschnitt. Wenn du zu einem Textabschnitt kein passendes Thema findest, denke noch einmal tiefergehend darüber nach, ob nicht doch ein Thema passen könnte. Wenn du für einen Textabschnitt kein Thema findest oder für zwei Textabschnitte das gleiche Thema findest, dann breche die Aufgabe ab und melde das Problem. Wenn du pro Textabschnitt genau ein Thema gefunden hast, fahre fort.
3. Übertrage die Textabschnitte in die thematisch passenden <div>-Tags aus dem Dokument1. Achte darauf, in den <div>-Tags alle Attribute, Werte und falls vorhanden auch <note>-Tags erhalten bleiben. Achte auch darauf, das die Textabschnitte absolut erhalten bleiben, keine <sic>-Tags verloren gehen und du Textabschnitte nicht mit […] abkürzt.
4. Erstelle pro Seite ein neues XML-Dokument mit den angereicherten <div>-Tags und den zugehörigen vollständigen Textabschnitten.”
Neben der expliziten Strukturierung des Promptes habe ich in der Anweisung zu dem Schritt der Zuordnung von Transkriptionen und IDs außerdem grundsätzliche Änderungen vorgenommen, da gerade hier die Inkonsistenzen in den Daten wirksam werden würden. In meinem ersten Prompt hatte ich ChatGPT noch zu gewagten Zuordnungen motivieren wollen. Wenn es für eine ID nicht sofort eine passende Transkription fand, sollte es nochmal prüfen, ob nicht doch eine der Transkriptionen passen könnte. Ich hatte gedacht, dass der Chatbot sonst zu vorsichtig vorgehen und viele eindeutige Zuordnungen nicht machen würde. Da ich aber gegenteilige Erfahrungen gemacht habe, wollte ich in meinem zweiten Prompt den Chatbot zu mehr Vorsicht motivieren. Wenn er bei der Zuordnung Schwierigkeiten hatte, sollte er seine Arbeit jetzt sofort unterbrechen.
Mein neuer Prompt hatte den Effekt, dass ChatGPT schon in den ersten Datenpaketen Inkonsistenzen bemerkte und mir auch Problemmeldungen machte [siehe Abbildung 11], anstatt sich regelwidrige Lösungen auszudenken. Solche Meldungen hatte ich bei meinem ersten Prompt gar nicht bekommen und mein neuer Ansatz schien mir daher erfolgreich. Das bedeutete aber leider nicht, dass ich den Chatbot nun unbeobachtet weiterarbeiten lassen konnte. Er nutzte bei seiner Arbeit immer noch von mir offen gelassene Verhaltensspielräume, um die nicht absolut konsistent gesetzten Regeln brechen zu können.
ChatGPTs Unzuverlässigkeit und Regelbrüche
Trotz einiger Erfolgsmomente hat ChatGPT bei dem Zuordnungsschritt immer noch unzuverlässig gearbeitet und ich musste ihn nach wie vor überwachen. Es gab immer noch Datenpakete, bei denen der Chatbot unsichere Zuordnungen gemacht oder das explizite Verbot des doppelten ID-Gebrauchs verletzt hat. In solchen Fällen schien er das Ziel, IDs und Transkriptionen vollständig einander zuzuordnen, stärker als meine Arbeitsanweisungen zu gewichten.
Wenn ChatGPT bei der Kuration eines Datenpaketes erst einmal Regeln gebrochen hatte, konnte ich auch mit Hinweisen und Korrekturversuchen keine sauberen Ergebnisse mehr erzielen. Wenn ich dann aber einen neuen Chatverlauf gestartet und dem Chatbot dasselbe Datenpaket erneut gegeben habe, gab es eine Wahrscheinlichkeit, dass er mir nun diejenigen Inkonsistenzen meldete, die er zuvor noch eigenständig aufgelöst hatte. Der Chatbot schien in einem Interessenskonflikt zwischen dem Ziel der Vollständigkeit und dem Melden von Problemen zu sein. Bei vielen Datenpaketen hat er sich mal für den falschen und mal für den richtigen Weg – der Problemmeldung – entschieden. Eigentlich hätte ich nun versuchen müssen, meinen Prompt so zu verändern, dass der richtige Weg viel wahrscheinlicher werden würde. Ich hätte betonen müssen, dass die Problemmeldung wichtiger ist als die vollständige Zuordnung. Diese Idee ist mir während meines Praxistests aber nicht gekommen und ich habe es hingenommen, dass ich die Zwischenergebnisse immer kontrolliere, den Prompt bei Bedarf wiederhole und dann hoffe, dass sich ChatGPT beim zweiten Anlauf besser verhält.
Abschließend möchte ich noch zwei Beispielsituationen vorstellen. Sie zeigen, wie ChatGPT Regeln gebrochen oder von mir offen gelassene Verhaltensspielräume ausgenutzt hat, um das Ziel der vollständigen Zuordnung zu erreichen. Einmal hat das Sprachmodell die ID t-mathias doppelt verwendet, um damit eine ungleiche Anzahl an Transkriptionen und IDs auszugleichen. Die Begründung für die falsche Zuordnung war für mich so unverständlich, dass ich sie hier nicht rekonstruieren kann [siehe Abbildung 12].
In der anderen Situation wären bei dem Zuordnungs-Schritt eigentlich die ID t-jhesus3 sowie eine der Transkriptionen übriggeblieben. ChatGPT hat die Problem aber dadurch aufgelöst, dass es die beiden Elemente einfach einander zugeordnet hat. Auf meinen vage formulierten Hinweis hin, ob es die Zuordnung nicht nochmal überdenken könnte, hat es die Möglichkeit genutzt und sie stattdessen gerechtfertigt [siehe Abbildung 13].
Die Rechtfertigung von ChatGPT beinhaltete, dass in der Transkription von einem Priester namens Esra erzählt wird, der ein geistiger Erneuerer ist, sowie dass die Jesus-ID als Symbol für geistige Erneuerer verstanden werden kann und dass es daher symbolisch zu der Transkription passen würde. Der letzte Schritt in der Rechtfertigung war problematisch und ich könnte ihn selbst ermöglicht haben. Ich hatte in meinem Prompt explizit geschrieben, dass IDs und Transkriptionen auch indirekt zueinander passen könnten. Hierunter konnte auch die vom Chatbot formulierte symbolische Beziehung fallen.
Im Nachhinein fällt es mir schwer zu rekonstruieren, was ich mit der uneindeutigen Formulierung von einer indirekten Beziehung bewirken wollte. Die Rechtfertigung von ChatGPT zeigt aber, dass es Leerstellen im Prompt kreativ ausfüllen kann – und es auch tut. Diese Neigung ist bei der Datenkuration ziemlich problematisch.
4 Abschlussüberprüfung
Nach dem eigentlichen Praxistest habe ich geprüft, ob die Transkriptionen in den Endergebnissen vollständig erhalten geblieben und keine Informationen verloren gegangen sind. Hierfür habe ich hauptsächlich das Kollationsprogramm LERA benutzt und die Texte vor und nach der Arbeit mit dem Chatbot dort eingefügt. Das Programm hat die Texte dann automatisch miteinander verglichen und mir die Varianten zwischen ihnen angezeigt. Dadurch konnte ich sehen, dass ChatGPT einmal das lateinische Wort et in das deutsche Wort und übersetzt hat, obwohl gar keine Übersetzung erfolgen sollte. Außerdem hat es vereinzelt die runden Klammern und Pipe-Symbole verschwinden lassen, mit denen in den Transkriptionen Abkürzungs-Auflösungen und Seitenumbrüche markiert worden sind. Die Informationsverluste waren aber sehr schnell zu beheben und ich konnte die Endergebnisse schließlich in ihre endgültige TEI/XML-konforme Form bringen [siehe Abbildung 14]. Eine genaue Statistik, die die Menge an Fehlern in Relation zu der Menge an Transkriptionen setzt und dadurch das Berechnen einer Fehlerquote ermöglichen würde, kann ich leider nicht rekonstruieren. Ich würde aber schätzen, dass es ungefähr zehn Fehler in über 150 Transkriptionen gewesen sind.
Zum Schluss habe ich die bisherigen leeren Container aus dem TEI/XML-Dokument gelöscht und an ihre Stelle die formatierten Endergebnisse eingefügt. Dann habe ich alles zur Weiterverarbeitung an die Mitarbeiter*innen des Editionsprojektes geschickt. Sie haben mir noch zwei Fehler zurückgemeldet, die ich selbst übersehen hatte. ChatGPT hatte bei der ID t-saul-1 die Ziffer 1 entfernt und im Gegensatz dazu bei einer anderen ID die Ziffer 1 hinzugefügt. Solche Veränderungen sind bedeutsam und auch für den Computer, der am Ende das TEI/XML-Dokument liest, ist die ID t-saul eine andere wie die ID t-saul-1.
5 Reflexion
Im Laufe meines Versuchs, mithilfe von ChatGPT Transkriptionsdaten zu kuratieren, habe ich den Eindruck gewonnen, dass dieser Chatbot besser kontrollierbar sein müsste, um bei solchen Arbeiten nützlich sein zu können Ich hatte nicht vor, mit dem Chatbot zu chatten und dabei beispielsweise irgendwelche Ideen zu entwickeln – hierbei könnte seine schwere Kontrollierbarkeit sogar förderlich sein. Stattdessen wollte ich ihn zu einem persönlichen Assistenten machen, dem ich Arbeitsaufträge erteilen kann, bei denen er auf eine exakte und kritische Arbeitsweise ankommt, und seine permanenten Regelverstöße waren dabei ein für mich unlösbares Problem.
Eine wesentliche Schwierigkeit bei der Arbeit mit ChatGPT waren die Inkonsistenzen in den Ausgangsdaten, bei denen der Chatbot dazu neigte, sie stillschweigend aufzulösen. Es ist aber kaum vermeidbar, dass in digitalen Editionsprozessen solche Inkonsistenzen auftauchen. Statt davon auszugehen, dass Fehler in den Ausgangsdaten notwendigerweise auch zu einem fehlerhaften Output führen, wäre es interessant, Chatbots zu verlässlichen Problemmeldungen zu bringen und damit zu kritischen Hilfskräften zu machen. Hierfür könnten verschiedene Lösungsansätze ausprobiert werden:
- Bei einem supervisierten Training das Modell zu Problemmeldungen konditionieren
- Mehrere Chatbots sich so gegenseitig kontrollieren lassen, dass ein Mehr-Augen-Prinzip simuliert wird
- Beim Prompting die Problemmeldung weniger als Scheitern und mehr als positive Alternative zur ID-Vergabe framen
Ob ChatGPT an sich verlässlich sein kann und wie der Prompt aussieht, der dieses Verhalten bewirkt, bleibt für mich offen. Für einen guten Prompt müsste man aber sicherlich die Daten so gut kennen, dass man mögliche Inkonsistenzen antizipieren und den Umgang damit im Prompt explizieren kann. Mein eigener Prompt enthielt bezüglich der Inkonsistenzen Leerstellen, mit denen ich dem Chatbot Verhaltensspielräume geöffnet habe. So konnte er Regelverstöße begehen und sogar rechtfertigen. Um Chatbots für die Mitarbeit in editorischen Kontexten wirklich fruchtbar zu machen, würde ich in Zukunft demnach mehr Zeit in die Datenanalyse sowie die Promptentwicklung investieren. Ich würde systematisch nach inkonsistenten Daten suchen, diese dem Chatbot versuchsweise zur Verarbeitung geben und dabei verschiedene Prompts ausprobieren und evaluieren.
Außerdem würde ich bei einem nächsten Versuch eher Programmschnittstellen zu Sprachmodellen nutzen, anstatt mit Chatbots zu arbeiten. Eine solche Schnittstelle könnte beispielsweise direkt in ein Python-Skript integriert werden. Hierbei könnten Arbeitsschritte, die keine künstliche Intelligenz erfordern, von deterministischen Codeblöcken übernommen werden. Während diese bei identischen Eingaben stets dieselben Ergebnisse liefern, könnte das Sprachmodell auf jene Aufgaben beschränkt werden, die tatsächlich Interpretations- oder Schlussfolgerungsleistungen erfordern. Außerdem bieten einem die Schnittstellen zu den Sprachmodellen oft Einstellungsmöglichkeiten, die bei Chatbots nicht gegeben sind, sodass man beispielsweise mittels der Temperature-Einstellung den Grad der Kreativität des Sprachmodelles besser steuern kann.














