diff --git a/add_pdfs.py b/add_pdfs.py index a6ca9fe..a1689bf 100644 --- a/add_pdfs.py +++ b/add_pdfs.py @@ -13,7 +13,7 @@ from local_rag import CHUNK_OVERLAP, CHUNK_SIZE, PDF_LOADER, PROCESSED_DIR, Loca # Folder to scan for PDFs (recursively). DATA_ROOT = Path("/Users/Philipp/Desktop/workspace/python/gpt_publikationen/data_vs") -# The chat (server.py) currently loads ./vectorstore_docling_hdr; pass --index to build that one. +# The chat (server.py) currently loads ./vectorstore_pypdf_2000; pass --index to build that one. VECTORSTORE_PATH = "./vectorstore" # If True: delete the existing vector store folder, then index all PDFs from scratch. diff --git a/eval/judge_cache.json b/eval/judge_cache.json new file mode 100644 index 0000000..af280e2 --- /dev/null +++ b/eval/judge_cache.json @@ -0,0 +1,436 @@ +{ + "266bb27d6f8e7d4cb64e17edd5b468052676977996eabb62130ff4a8838c6119": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 sagt ausdrücklich, dass Kafkas Familie seiner literarischen Produktion auch nach seinem Tod gleichgültig gegenüberstand." + }, + "cb5c8c54437ec284091f811706a844a4402d20d7c90138b50dd7b16ef58e8716": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 sagt ausdrücklich, dass die Aussagen des Prokuristen Gregors Selbstbild widersprechen und Zweifel an seinen Verkaufserfolgen wecken." + }, + "3260dadc5e841fbc17a2e47e2a6d8764273d7cdef4d6514974d92d49682de331": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 benennt ausdrücklich den Widerspruch zwischen Gregors Selbstbild und der Beurteilung seiner beruflichen Leistungen durch den Prokuristen, der Gregors Verkaufserfolge infrage stellt." + }, + "4f52d4c66284fdd8f3f74367c8ee14b8cc6481b3517065169703a2b85dba8366": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 nennt ausdrücklich Band 2 der Griechischen Kulturgeschichte und führt dort den Abschnitt „Die Verwandlungen“ auf." + }, + "f88f9cbe0ca34958369abaaf6c9f91bd4007b5cd95e4f02e95eac34bfc6384cd": { + "auszuege": [ + 1, + 2, + 3, + 4, + 5 + ], + "begruendung": "Die Auszüge beschreiben Gestik und Mimik als vieldeutige Ausdrucksformen, die innere Zustände knapp verkörpern und von Figuren beobachtet und gedeutet werden." + }, + "2c9539570f327b896aa3e2f8fbee72bef509855a4782ddc89ba56fd53361243e": { + "auszuege": [ + 1, + 2, + 3, + 4, + 5 + ], + "begruendung": "Die Auszüge beschreiben Bildgestaltung bei Kafka sowohl als erzählerische Bilder und Bildkontraste beziehungsweise übertragene Rede als auch als realitätsnah oder abstrakt verselbständigte Bilder." + }, + "77a3c046481e87973308209885702008a6ab481d64542c9e0f193fce171c92fe": { + "auszuege": [], + "begruendung": "Keiner der Auszüge deutet die drei Untermieter ausdrücklich aus biblischer Perspektive; der biblische Apfelbezug in [2] betrifft eine andere Szene." + }, + "39d4c0563db533f83edd35029645a41f76ab1de721fa76786edb9556e81ee9b5": { + "auszuege": [ + 1, + 2, + 3, + 5 + ], + "begruendung": "Die Auszüge 1, 2, 3 und 5 verknüpfen Gregors körperlichen Ekel beziehungsweise seine abstoßende Gestalt ausdrücklich mit Demütigung und Selbsterniedrigung; Auszug 4 behandelt Ekel, stellt diesen Zusammenhang aber nicht her." + }, + "126ef040bb8581c5e607ca7cac042065dfb1a9da496094159c301abfc31f593b": { + "auszuege": [ + 1, + 2, + 3 + ], + "begruendung": "Die Auszüge 1 und 2 deuten die Dame als unerreichbares Ideal und als demütigenden Kontrast zu Gregors Gestalt; Auszug 3 beschreibt das Bild als menschliches Kulturgut und deutet seine Verbindung von Mensch und Tier." + }, + "808472b80a58cd99d9df561e249c312479b70ed68f451773ef1b7e295904c3c4": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 sagt ausdrücklich, dass Gregors Tod ihm als „letzte Sohnespflicht“ bleibt." + }, + "255a2a69fcdd9f654e5ce441265be10271bb78487ec7f5a3a4fe689ea8142585": { + "auszuege": [ + 1 + ], + "begruendung": "Nur Auszug 1 nennt ausdrücklich den Ort: Die Eltern erfahren die Nachricht aufrecht sitzend im Ehebett." + }, + "a66116aaae6acda6de49ac1a5fe1dff05c0a55ecc065fe37108edf8735dfacfd": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 gibt Binders Erklärung ausdrücklich wieder: Kafka leite sich von „kajke“, einer niederdeutschen Koseform von Jakob, ab." + }, + "7e5e1db0e6c948606950b538c571ed3f72a5093111f05668c50ae152a140a717": { + "auszuege": [ + 2, + 3, + 4, + 5 + ], + "begruendung": "Diese Auszüge belegen Tschechisch als Kafkas Umgangssprache und nennen konkrete mündliche Kommunikation, wobei Auszug 5 seine aktive Verwendung vorsichtiger formuliert." + }, + "15f73e21f5ffb5b5a2bbd9cca715d24293df1db936d31d20146d3c1f4f25800d": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 nennt Kafkas Nichten ausdrücklich Marianne und Vera." + }, + "9f704dd38b3e3fd77fd4e0e2085657e106bbefe1dd1a7d5c14fde9f045108f06": { + "auszuege": [ + 1, + 2, + 4 + ], + "begruendung": "[1] und [2] sagen ausdrücklich, dass Kafka mit seinen Nichten Tschechisch sprach; [4] stützt dies mit einem tschechischen Beispiel an seine Nichte Vera." + }, + "625b0f0b60e802ecb1e84344bbc88f768316274f4dda29d485580a54c2fdc898": { + "auszuege": [ + 1, + 2, + 4, + 5 + ], + "begruendung": "Die Auszüge beschreiben die lautliche und buchstabenmäßige Entsprechung von Kafka und Samsa, insbesondere gleiche Vokalfolge beziehungsweise Buchstabenpositionen und einen Konsonantentausch; [4] ergänzt Kafkas Vorbehalt, Samsa sei kein vollständiges Kryptogramm für Kafka." + }, + "d3f1476111efdf1d888ee6c5181cec65882fb25ff58e3db80519a5aa01d799f5": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 sagt ausdrücklich, dass das tschechische Wort „Kafka“ auf Deutsch „Dohle“ bedeutet." + }, + "d4f3f3d74e6d3788c1b5695830048571cd4c539ba947fc95157b01742fe05ef5": { + "auszuege": [ + 1, + 2, + 3, + 4 + ], + "begruendung": "Die Auszüge 1 bis 4 bezeichnen das Geschäft des Vaters als Galanteriewaren- beziehungsweise Kurzwarenhandlung, während Auszug 5 das Thema nicht beantwortet." + }, + "53173d0b42df1056dcb885343e9a07e5c4ad816ce77fefca3a68ecba2fccaf65": { + "auszuege": [ + 1, + 2, + 3, + 4, + 5 + ], + "begruendung": "Alle Auszüge verorten Hermann Kafka in einem ärmlichen tschechisch-jüdischen ländlichen Milieu und nennen seine Herkunft als Sohn eines Fleischhauers beziehungsweise als wandernder Hausierer." + }, + "de91e131ad6f54c06ae5d749d9da10a685c4e318563af2e5693c30f22df2c101": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 sagt ausdrücklich, dass Bachmann die Namengebung von Thomas Mann, Franz Kafka und James Joyce vergleicht." + }, + "db6101aa6299e9a1b46b4a98aeee50e749967e497476b8b547681f79050a03e0": { + "auszuege": [ + 1, + 2 + ], + "begruendung": "[1] erläutert unmittelbar das ständige Schweben und Zurücknehmen von Aussagen, [2] nennt ergänzend Summierung und Verfremdung als notwendige Verfahren zur Darstellung der Totalität." + }, + "2608dc0fae4f66648a0de419ff613a714bd5d730b1218598c206fe6a1c5c1669": { + "auszuege": [ + 1, + 2, + 5 + ], + "begruendung": "Die Auszüge 1, 2 und 5 nennen ausdrücklich den Band 22/23 der Reihe „Der jüngste Tag“." + }, + "da142c5a92236cebf507cbc3dbca18b33cae1002981ab03b8154914911edb6f2": { + "auszuege": [ + 1, + 2 + ], + "begruendung": "Beide Auszüge sagen ausdrücklich, dass „Die Verwandlung“ seit Anfang 1913 abgeschlossen vorlag und erst 1915 veröffentlicht wurde." + }, + "e88e68366655c39d57b75d83b7273c413d5400676ac3269765d824c9cd4bdce6": { + "auszuege": [ + 1, + 3, + 5 + ], + "begruendung": "Die Auszüge 1, 3 und 5 beschreiben Kafkas Helden als kleinbürgerlich geprägte, machtlose oder schwache Menschen, die an ihrem konflikthaften Verhältnis zur Gesellschaft scheitern." + }, + "ff82906a55326c84ea32faa8d65afe5c1772a2ae14d504ca8c542e3dd4770720": { + "auszuege": [ + 2, + 4 + ], + "begruendung": "Beide Auszüge legen nahe, den Rigorismus zu korrigieren, indem man gesellschaftliche Lebensumstände und ihren Einfluss auf individuelles Versagen berücksichtigt, statt allein den Einzelnen zu verurteilen." + }, + "f9fad44780948b61fa5731834bef581d96af1e4ba3bb78a527ebca31fda6a397": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 ordnet ausdrücklich Kafkas Erzählung „Die Verwandlung“ der Gattung der Großstadterzählung beziehungsweise -novelle zu." + }, + "26131d6cb95d12f987f2780f651214ca4bc05eab1b94fb8c2a41a07fe6013e9b": { + "auszuege": [ + 1, + 2, + 3, + 4 + ], + "begruendung": "Diese Auszüge nennen Gregor Samsa ausdrücklich als Protagonisten oder Helden der Erzählung." + }, + "61843a26b7146112bedf6782cbb7c290f714a1bbb2ad24250667650c94301acf": { + "auszuege": [ + 1, + 2, + 3, + 4, + 5 + ], + "begruendung": "Alle Auszüge bezeichnen Gregors Gestalt ausdrücklich als Insekt beziehungsweise ungeheueres Ungeziefer; keiner legt eine eindeutige Tierart fest." + }, + "af0bdc4808d5bb162b7e212e495f0cc48a1b528aaf9b369a99a96854e218f011": { + "auszuege": [], + "begruendung": "Keiner der Auszüge schildert, wie Gregor von seiner Familie aufgefunden wird; Auszug 3 erwähnt nur seinen Tod und das Verhalten der Familie danach." + }, + "752052072e6ca9d584f02899bc658f34b121a46bcd15b44f486ce65ae49e15f4": { + "auszuege": [ + 1, + 2 + ], + "begruendung": "[1] schildert die Umkehr vom versorgenden Familienmitglied zum Ausgeschlossenen, [2] Gregors Wandel von Rücksichtnahme zu Gleichgültigkeit und Angriffslust gegenüber seiner Familie." + }, + "f312aa1204eeab8dc336aca210ef6a696c84e754f5cab2b05f0ad543f93adc56": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 sagt ausdrücklich, dass Kafkas Familie seiner literarischen Produktion auch nach seinem Tod gleichgültig gegenüberstand." + }, + "88380bd4d7e5900780d52288e15ff00419629a51db94bb03e919cb0602ea915a": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 sagt ausdrücklich, dass die Beurteilung des Vorgesetzten Gregors Selbstbild widerspricht und Zweifel an seinen Verkaufserfolgen weckt." + }, + "8473d77f22a6ef34d98563dc93be81d01a132d78154bd9c6f0b6848618b7c0dd": { + "auszuege": [ + 1, + 4 + ], + "begruendung": "Beide Auszüge benennen den Widerspruch zwischen Gregors Selbstbild und der Einschätzung des Prokuristen, der Gregors wenige Abschlüsse kritisiert und dessen fachliche Kompetenz von Gregor selbst als maßgeblich anerkannt wird." + }, + "6bd0fc3a3eb2bf0398c469f36751b45f378e4021e71c3ce1ddd154046efec73d": { + "auszuege": [ + 1, + 2 + ], + "begruendung": "Auszug 1 nennt den zweiten Band ausdrücklich, und Auszug 2 bestätigt Band 2 mit dem Anhang „Die Verwandlungen“." + }, + "889f4f9fe48e953aca88e5044f62f4f13118ba4621f79ed06c0b6e5d4ba33897": { + "auszuege": [ + 1, + 2, + 3, + 4, + 5 + ], + "begruendung": "Alle Auszüge beschreiben konkrete Formen oder Funktionen von Gestik und Mimik bei Kafka, etwa ihre erzählerische Ökonomie, Deutung aus der Perspektive der Figuren, szenische Wirkung und Vieldeutigkeit." + }, + "6db1ac7381c30cb3d867141c0dde839362190535503d8563368ba80709860eaa": { + "auszuege": [ + 1, + 2, + 3, + 5 + ], + "begruendung": "Diese Auszüge beschreiben konkrete Merkmale und Funktionen von Kafkas Bildformen, etwa ihr Verhältnis zu realistischer Darstellung, ihre symbolische Bedeutung, ein erweitertes Bildverständnis und werkübergreifende Bildgeflechte; Auszug 4 bleibt allgemein." + }, + "1a57746f66670fccec00b100b37f48c9f0b7c66f6d0359155d5c97ad9b840fa8": { + "auszuege": [], + "begruendung": "Keiner der Auszüge deutet die drei Untermieter ausdrücklich aus einer biblischen Perspektive; ihre Dreizahl allein reicht für eine zutreffende Antwort nicht aus." + }, + "2352e0d76305783f7d968a3e9d1f38ce4e6543dff09f6cdaafdf74ece8e92669": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 verknüpft ausdrücklich körperlichen Ekel mit Demütigung und Selbstdemütigung und erläutert den Zusammenhang am Kontrast zwischen der Dame im Pelz und Gregors entstelltem Körper." + }, + "23b0c1227ca6ce0812b58c5d8756f7a47b5a832ecdaf8cc3a8756dec65d95f5c": { + "auszuege": [ + 1, + 5 + ], + "begruendung": "[1] deutet die Dame als unerreichbare Verkörperung eleganter Weltläufigkeit im Kontrast zu Gregor, [5] als Sinnbild libidinöser Verlockung." + }, + "1d5bc038e540afd590b202a9498f520819ef6408aa3cc085f4cf8b975c5380f4": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 sagt ausdrücklich, Gregors Tod könne als seine „letzte Sohnespflicht“ gelten." + }, + "ce529a5ad8384f681e8da68608ed35ef65227f1155696a8c0c2f8f7d75d89d3d": { + "auszuege": [ + 2 + ], + "begruendung": "Nur Auszug 2 nennt ausdrücklich den Ort: Die Eltern erfahren die Nachricht im aufrecht sitzenden Zustand im Ehebett." + }, + "43093f44348571f34bf5e13d6c84ba200ec558410fdefe8f5be5a9cab446ada8": { + "auszuege": [ + 1, + 2 + ], + "begruendung": "Beide Auszüge nennen Binders Erklärung des Familiennamens Kafka aus „kajke“, einer niederdeutschen Diminutivform des Namens Jakob." + }, + "5a6c5baf12785c2293824698ed705734fcd564e7d0fd160c0fa21d31896bfda6": { + "auszuege": [ + 1, + 5 + ], + "begruendung": "[1] sagt ausdrücklich, Kafka habe fast fehlerlos Tschechisch gesprochen, und [5] beschreibt seine Kommunikation auf Tschechisch im häuslichen Umfeld." + }, + "887a03aff9884d2080db6ee9faddf57927068db65b8c847346a0a44c544fd650": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 nennt Kafkas Nichten ausdrücklich Marianne und Vera." + }, + "95de9bbc505fbb913878bf7072618417b459cb1df9550b476e6e21f37f18ddee": { + "auszuege": [ + 1, + 2, + 5 + ], + "begruendung": "Die Auszüge 1 und 2 sagen ausdrücklich, dass Kafka mit seinen Nichten Tschechisch sprach; Auszug 5 bestätigt dies für die Kinder der Familien Valli und Ottla." + }, + "d64b726dd60280ed45abc0f8dcbedb2ee83c17677ce71556a65e80b82dec1747": { + "auszuege": [ + 1, + 2, + 3, + 5 + ], + "begruendung": "Diese Auszüge beschreiben eine formale Abstimmung der Namen durch gleiche Buchstabenzahl sowie entsprechende Buchstabenpositionen, Vokalgleichklang oder Konsonantentausch." + }, + "327dedb20feb52be2449f752db0e345aeb4c63d4df85c2bb9c7f0705442e3627": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 sagt ausdrücklich, dass „Kafka“ ein tschechisches Wort ist und auf Deutsch „Dohle“ bedeutet." + }, + "94b863088e7f75c795ae3df7fe3bd9c64a02ff968173199857b60abfb41425e8": { + "auszuege": [ + 1, + 2, + 3 + ], + "begruendung": "Die Auszüge 1 und 2 nennen ausdrücklich ein Galanteriewarengeschäft beziehungsweise einen Galanteriewarenladen, und Auszug 3 bezeichnet den Vater als Galanteriewarenhändler." + }, + "5e5512ba26a215132af3d9b71ed863bec808cf1ead7c2a5d7c2ab0abfc3cf76b": { + "auszuege": [ + 1, + 2, + 3, + 4 + ], + "begruendung": "Die Auszüge 1–4 verorten Hermann Kafka in ärmlichen tschechisch-jüdischen Verhältnissen beziehungsweise im Provinzproletariat und nennen ihn als Sohn eines Fleischhauers oder wandernden Hausierer, während Auszug 5 nur seinen späteren Status als jüdischer Mittelständler beschreibt." + }, + "a255cba7a525c368c59fae8c9c2668787cddeeb1a1640ae7057067fb7b381668": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 nennt ausdrücklich Thomas Mann, Franz Kafka und James Joyce als die Schriftsteller, deren Namengebung Bachmann vergleicht." + }, + "e633b9b62814f3540764c63478cd250d98a36e6c678c11ed710516b35022f5ca": { + "auszuege": [ + 1, + 4 + ], + "begruendung": "Auszug 1 erläutert unmittelbar, dass die Form durch das ständige Korrigieren begrenzter Sprach- und Bildformen auf das Universelle ein Schweben und eine Entgrenzung erzeugt; Auszug 4 nennt dazu Summierung und Verfremdung als notwendige Voraussetzungen von Kafkas künstlerischer Methode." + }, + "cdf6b6d768b853344281dfe999aeed405dc8c214a32ca09fe50a33d6608cca42": { + "auszuege": [ + 1, + 4, + 5 + ], + "begruendung": "Diese Auszüge nennen ausdrücklich Band 22/23 beziehungsweise Nr. 22/23 der Reihe „Der jüngste Tag“." + }, + "95f5730a4c379018998c7c04fd5e1ead5ebe8f380fef47e199fbee01d1474c10": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 sagt ausdrücklich, dass „Die Verwandlung“ seit Anfang 1913 abgeschlossen vorlag und erst 1915 veröffentlicht wurde." + }, + "eb6617010f4a314856cdabc02189fe8fa74728ebc18fb06528e1a50099150d64": { + "auszuege": [ + 1, + 2, + 3, + 4, + 5 + ], + "begruendung": "Alle Auszüge charakterisieren Kafkas Helden als Menschen, die sich in einer entfremdeten bürgerlichen Gesellschaft einsam, hilflos oder unterworfen erleben und an deren Lebensbedingungen scheitern." + }, + "1ce9a81e5898beb700ba0b34aef0dc3c2bf56229d344f07d3f9d5c56af312c0e": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 nennt ausdrücklich einen Ansatz zur Korrektur: Bei der Beurteilung von Schuld auch die Umwelt zu berücksichtigen und eine Besserung sowie Wiedereingliederung zu ermöglichen." + }, + "b8a61ffae0862f59279d9a176326b37134d2f1495678d4d128181984984d35c1": { + "auszuege": [ + 1 + ], + "begruendung": "Auszug 1 ordnet „Die Verwandlung“ ausdrücklich der Gattung der Großstadterzählung beziehungsweise Großstadtnovelle zu." + }, + "7935b921838a7c54dc36f66233534e4bb46ad6355e16cd4341e21d2a4cbb188d": { + "auszuege": [ + 1, + 2, + 3, + 5 + ], + "begruendung": "Die Auszüge 1, 2 und 5 nennen Gregor Samsa ausdrücklich als Protagonisten beziehungsweise Helden, und Auszug 3 bezeichnet den Helden als Samsa; Auszug 4 nennt keinen konkreten Protagonisten." + }, + "82235540a0f6fb8351ba94d4d1ce2a045a8b0ac4eec393cac7b55ea88e60cf7e": { + "auszuege": [ + 1, + 2, + 3, + 4, + 5 + ], + "begruendung": "Alle Auszüge nennen Gregors Verwandlung in Ungeziefer; Auszug 1 bezeichnet ihn außerdem als Käfer." + }, + "27b3e2adc6e4905ff899ef4f7972ea5031778e97c1dff23ff1f0d0eba2f3bec9": { + "auszuege": [], + "begruendung": "Keiner der Auszüge schildert, in welchem Zustand oder unter welchen Umständen die Familie Gregor am Ende auffindet; Auszug 5 erwähnt nur, dass die Bedienstete seinen Tod meldet." + }, + "75cd420d947ce5c46821e8709337faf8523821b41b24f0f3d3dec223aff5351c": { + "auszuege": [ + 1, + 2, + 3, + 5 + ], + "begruendung": "Diese Auszüge beschreiben die zunehmende Entfremdung und Umkehrung der Beziehungen: Gregor wird zunächst rücksichtsloser und gleichgültiger, während seine Familie ihn zunehmend ausgrenzt und einschließt." + } +} \ No newline at end of file diff --git a/eval/kafka_human_judge_docling_2000_hdr.txt b/eval/kafka_human_judge_docling_2000_hdr.txt new file mode 100644 index 0000000..f62981e --- /dev/null +++ b/eval/kafka_human_judge_docling_2000_hdr.txt @@ -0,0 +1,126 @@ +==================================================================== +Retrieval-Auswertung — 2026-10-08 09:00 +==================================================================== + +Konfiguration + Vektorspeicher ./vectorstore_docling_2000_hdr + Embedding-Modell BAAI/bge-m3 + Chunk-Größe 2000 (Overlap 400) + Loader docling, Kopfzeilen an + Query-Zusatztext aus + Suche hybrid, Reranker BAAI/bge-reranker-v2-m3 + Seitentoleranz ±1 + Fragen 30 + +Ergebnis + Recall@5 0.70 (21 von 30) + Recall@10 0.70 (21 von 30) + Recall@20 0.77 (23 von 30) + MRR 0.58 + +Nach Korpus + primär Recall@5 0.00 MRR 0.02 (4 Fragen) + sekundär Recall@5 0.81 MRR 0.67 (26 Fragen) + +Einzelne Fragen (Rang = Position des ersten korrekten Treffers) + Rang 1 sekundär Wie stand Kafkas Familie seiner literarischen Tätigkeit nach Kafkas Tod gegenüber? + Rang 1 sekundär In welchem Band von Jacob Burckhardts Griechischer Kulturgeschichte gibt es ein eigenes Kapitel über Metamorphosen? + Rang 1 sekundär In welchem Zusammenhang stehen körperlicher Ekel und Selbstdemütigung in "Die Verwandlung"? + Rang 1 sekundär Wie kann das Bild der eleganten Dame in Gregors Zimmer gedeutet werden? + Rang 1 sekundär Was kann als "letzte Sohnespflicht" Gregors gedeutet werden? + Rang 1 sekundär Wie erklärt Binder die Etymologie des Familiennamens Kafka? + Rang 1 sekundär Wie heißen die beiden Nichten von Kafka? + Rang 1 sekundär Welche Sprache spricht Kafka mit seinen Nichten? + Rang 1 sekundär Was bedeutet das tschechische Wort "Kafka" auf Deutsch? + Rang 1 sekundär Welche Namen vergleicht Ingeborg Bachmann in ihrem Essay hinsichtlich der Namensgebung? + Rang 1 sekundär Wie interpretiert Emrich das Besondere an der Kafkaschen Form? + Rang 1 sekundär In welchem Band der Reihe "Der jüngste Tag" wurde "Die Verwandlung" veröffentlicht? + Rang 1 sekundär Seit wann lag "Die Verwandlung" abgeschlossen vor, ohne veröffentlicht zu sein? + Rang 1 sekundär Wie könnte man Kafkas ethischen Rigorismus korrigieren? + Rang 1 sekundär Welche Erzählung von Franz Kafka ist der Gattung der Großstadterzählung beziehungsweise Großstadtnovelle zuzuordnen? + Rang 2 sekundär Was kann man zu Bildformen in Kafkas Werken sagen? + Rang 2 sekundär Wo erfahren die Eltern die Nachricht von Gregors Tod? + Rang 2 sekundär Welche Art von Laden führte Kafkas Vater? + Rang 3 sekundär Inwiefern sind die Namen Kafka und Samsa aufeinander abgestimmt? + Rang 3 sekundär Aus welchem sozialen Milieu stammte Kafkas Vater genau? + Rang 5 sekundär Was kann man zu Formen der Gestik und Mimik in Kafkas Werken sagen? + Rang 14 primär In welche Art von Tier verwandelt sich Gregor Samsa? + Rang 18 sekundär Sprach Kafka Tschechisch? + Rang – sekundär Was sagen die Aussagen seines Vorgesetzten über Gregors berufliche Leistung aus? + Rang – sekundär Inwiefern steht Gregors Selbstwahrnehmung seiner beruflichen Leistung im Widerspruch zu den Aussagen seines Vorgesetzten? + Rang – sekundär Wie können die drei Untermieter der Familie Kafka aus einer biblischen Perspektive gedeutet werden? + Rang – sekundär Welche Art von Helden in einer Gesellschaft zeichnet Kafka in seinen Geschichten? + Rang – primär Wer ist der Protagonist von "Die Verwandlung"? + Rang – primär Unter welchen Umständen wird Gregor am Ende der Erzählung von seiner Familie aufgefunden? + Rang – primär Wie verändert sich Gregors Verhältnis zu seiner Familie im Verlauf der Erzählung? + +7 Frage(n) ohne Treffer unter den ersten 20. +Prüfen: Steht die Fundstelle wirklich dort? Stimmt der Dateiname? +Ist das Dokument überhaupt im Index (rag.list_documents())? + +Antwort im Kontext (Prüfung durch gpt-6-luna, erste 5 Treffer) + Antwort@5 0.93 (28 von 30) + MRR (Antwort) 0.92 + Abgleich mit Seitenprüfung: beide ja 21, nur Modell ja 7, nur Seite ja 0 + + Einzelne Fragen (Treffer = erster Auszug, der die Frage beantwortet; Seite = Rang laut Fundstelle) + Treffer 1 | Seite 1 | Wie stand Kafkas Familie seiner literarischen Tätigkeit nach Kafkas Tod gegenüber? + Auszug 1 sagt ausdrücklich, dass Kafkas Familie seiner literarischen Produktion auch nach seinem Tod gleichgültig gegenüberstand. + Treffer 1 | Seite – | Was sagen die Aussagen seines Vorgesetzten über Gregors berufliche Leistung aus? + Auszug 1 sagt ausdrücklich, dass die Beurteilung des Vorgesetzten Gregors Selbstbild widerspricht und Zweifel an seinen Verkaufserfolgen weckt. + Treffer 1 | Seite – | Inwiefern steht Gregors Selbstwahrnehmung seiner beruflichen Leistung im Widerspruch zu den Aussagen seines Vorgesetzten? + Beide Auszüge benennen den Widerspruch zwischen Gregors Selbstbild und der Einschätzung des Prokuristen, der Gregors wenige Abschlüsse kritisiert und dessen fachliche Kompetenz von Gregor selbst als maßgeblich anerkannt wird. + Treffer 1 | Seite 1 | In welchem Band von Jacob Burckhardts Griechischer Kulturgeschichte gibt es ein eigenes Kapitel über Metamorphosen? + Auszug 1 nennt den zweiten Band ausdrücklich, und Auszug 2 bestätigt Band 2 mit dem Anhang „Die Verwandlungen“. + Treffer 1 | Seite 5 | Was kann man zu Formen der Gestik und Mimik in Kafkas Werken sagen? + Alle Auszüge beschreiben konkrete Formen oder Funktionen von Gestik und Mimik bei Kafka, etwa ihre erzählerische Ökonomie, Deutung aus der Perspektive der Figuren, szenische Wirkung und Vieldeutigkeit. + Treffer 1 | Seite 2 | Was kann man zu Bildformen in Kafkas Werken sagen? + Diese Auszüge beschreiben konkrete Merkmale und Funktionen von Kafkas Bildformen, etwa ihr Verhältnis zu realistischer Darstellung, ihre symbolische Bedeutung, ein erweitertes Bildverständnis und werkübergreifende Bildgeflechte; Auszug 4 bleibt allgemein. + Treffer 1 | Seite 1 | In welchem Zusammenhang stehen körperlicher Ekel und Selbstdemütigung in "Die Verwandlung"? + Auszug 1 verknüpft ausdrücklich körperlichen Ekel mit Demütigung und Selbstdemütigung und erläutert den Zusammenhang am Kontrast zwischen der Dame im Pelz und Gregors entstelltem Körper. + Treffer 1 | Seite 1 | Wie kann das Bild der eleganten Dame in Gregors Zimmer gedeutet werden? + [1] deutet die Dame als unerreichbare Verkörperung eleganter Weltläufigkeit im Kontrast zu Gregor, [5] als Sinnbild libidinöser Verlockung. + Treffer 1 | Seite 1 | Was kann als "letzte Sohnespflicht" Gregors gedeutet werden? + Auszug 1 sagt ausdrücklich, Gregors Tod könne als seine „letzte Sohnespflicht“ gelten. + Treffer 1 | Seite 1 | Wie erklärt Binder die Etymologie des Familiennamens Kafka? + Beide Auszüge nennen Binders Erklärung des Familiennamens Kafka aus „kajke“, einer niederdeutschen Diminutivform des Namens Jakob. + Treffer 1 | Seite – | Sprach Kafka Tschechisch? + [1] sagt ausdrücklich, Kafka habe fast fehlerlos Tschechisch gesprochen, und [5] beschreibt seine Kommunikation auf Tschechisch im häuslichen Umfeld. + Treffer 1 | Seite 1 | Wie heißen die beiden Nichten von Kafka? + Auszug 1 nennt Kafkas Nichten ausdrücklich Marianne und Vera. + Treffer 1 | Seite 1 | Welche Sprache spricht Kafka mit seinen Nichten? + Die Auszüge 1 und 2 sagen ausdrücklich, dass Kafka mit seinen Nichten Tschechisch sprach; Auszug 5 bestätigt dies für die Kinder der Familien Valli und Ottla. + Treffer 1 | Seite 3 | Inwiefern sind die Namen Kafka und Samsa aufeinander abgestimmt? + Diese Auszüge beschreiben eine formale Abstimmung der Namen durch gleiche Buchstabenzahl sowie entsprechende Buchstabenpositionen, Vokalgleichklang oder Konsonantentausch. + Treffer 1 | Seite 1 | Was bedeutet das tschechische Wort "Kafka" auf Deutsch? + Auszug 1 sagt ausdrücklich, dass „Kafka“ ein tschechisches Wort ist und auf Deutsch „Dohle“ bedeutet. + Treffer 1 | Seite 2 | Welche Art von Laden führte Kafkas Vater? + Die Auszüge 1 und 2 nennen ausdrücklich ein Galanteriewarengeschäft beziehungsweise einen Galanteriewarenladen, und Auszug 3 bezeichnet den Vater als Galanteriewarenhändler. + Treffer 1 | Seite 3 | Aus welchem sozialen Milieu stammte Kafkas Vater genau? + Die Auszüge 1–4 verorten Hermann Kafka in ärmlichen tschechisch-jüdischen Verhältnissen beziehungsweise im Provinzproletariat und nennen ihn als Sohn eines Fleischhauers oder wandernden Hausierer, während Auszug 5 nur seinen späteren Status als jüdischer Mittelständler beschreibt. + Treffer 1 | Seite 1 | Welche Namen vergleicht Ingeborg Bachmann in ihrem Essay hinsichtlich der Namensgebung? + Auszug 1 nennt ausdrücklich Thomas Mann, Franz Kafka und James Joyce als die Schriftsteller, deren Namengebung Bachmann vergleicht. + Treffer 1 | Seite 1 | Wie interpretiert Emrich das Besondere an der Kafkaschen Form? + Auszug 1 erläutert unmittelbar, dass die Form durch das ständige Korrigieren begrenzter Sprach- und Bildformen auf das Universelle ein Schweben und eine Entgrenzung erzeugt; Auszug 4 nennt dazu Summierung und Verfremdung als notwendige Voraussetzungen von Kafkas künstlerischer Methode. + Treffer 1 | Seite 1 | In welchem Band der Reihe "Der jüngste Tag" wurde "Die Verwandlung" veröffentlicht? + Diese Auszüge nennen ausdrücklich Band 22/23 beziehungsweise Nr. 22/23 der Reihe „Der jüngste Tag“. + Treffer 1 | Seite 1 | Seit wann lag "Die Verwandlung" abgeschlossen vor, ohne veröffentlicht zu sein? + Auszug 1 sagt ausdrücklich, dass „Die Verwandlung“ seit Anfang 1913 abgeschlossen vorlag und erst 1915 veröffentlicht wurde. + Treffer 1 | Seite – | Welche Art von Helden in einer Gesellschaft zeichnet Kafka in seinen Geschichten? + Alle Auszüge charakterisieren Kafkas Helden als Menschen, die sich in einer entfremdeten bürgerlichen Gesellschaft einsam, hilflos oder unterworfen erleben und an deren Lebensbedingungen scheitern. + Treffer 1 | Seite 1 | Wie könnte man Kafkas ethischen Rigorismus korrigieren? + Auszug 1 nennt ausdrücklich einen Ansatz zur Korrektur: Bei der Beurteilung von Schuld auch die Umwelt zu berücksichtigen und eine Besserung sowie Wiedereingliederung zu ermöglichen. + Treffer 1 | Seite 1 | Welche Erzählung von Franz Kafka ist der Gattung der Großstadterzählung beziehungsweise Großstadtnovelle zuzuordnen? + Auszug 1 ordnet „Die Verwandlung“ ausdrücklich der Gattung der Großstadterzählung beziehungsweise Großstadtnovelle zu. + Treffer 1 | Seite – | Wer ist der Protagonist von "Die Verwandlung"? + Die Auszüge 1, 2 und 5 nennen Gregor Samsa ausdrücklich als Protagonisten beziehungsweise Helden, und Auszug 3 bezeichnet den Helden als Samsa; Auszug 4 nennt keinen konkreten Protagonisten. + Treffer 1 | Seite – | In welche Art von Tier verwandelt sich Gregor Samsa? + Alle Auszüge nennen Gregors Verwandlung in Ungeziefer; Auszug 1 bezeichnet ihn außerdem als Käfer. + Treffer 1 | Seite – | Wie verändert sich Gregors Verhältnis zu seiner Familie im Verlauf der Erzählung? + Diese Auszüge beschreiben die zunehmende Entfremdung und Umkehrung der Beziehungen: Gregor wird zunächst rücksichtsloser und gleichgültiger, während seine Familie ihn zunehmend ausgrenzt und einschließt. + Treffer 2 | Seite 2 | Wo erfahren die Eltern die Nachricht von Gregors Tod? + Nur Auszug 2 nennt ausdrücklich den Ort: Die Eltern erfahren die Nachricht im aufrecht sitzenden Zustand im Ehebett. + Treffer – | Seite – | Wie können die drei Untermieter der Familie Kafka aus einer biblischen Perspektive gedeutet werden? + Keiner der Auszüge deutet die drei Untermieter ausdrücklich aus einer biblischen Perspektive; ihre Dreizahl allein reicht für eine zutreffende Antwort nicht aus. + Treffer – | Seite – | Unter welchen Umständen wird Gregor am Ende der Erzählung von seiner Familie aufgefunden? + Keiner der Auszüge schildert, in welchem Zustand oder unter welchen Umständen die Familie Gregor am Ende auffindet; Auszug 5 erwähnt nur, dass die Bedienstete seinen Tod meldet. diff --git a/eval/kafka_human_judge_pypdf_2000.txt b/eval/kafka_human_judge_pypdf_2000.txt new file mode 100644 index 0000000..c177f7d --- /dev/null +++ b/eval/kafka_human_judge_pypdf_2000.txt @@ -0,0 +1,126 @@ +==================================================================== +Retrieval-Auswertung — 2026-10-08 08:44 +==================================================================== + +Konfiguration + Vektorspeicher ./vectorstore_pypdf_2000 + Embedding-Modell BAAI/bge-m3 + Chunk-Größe 2000 (Overlap 400) + Loader pypdf, Kopfzeilen aus + Query-Zusatztext aus + Suche hybrid, Reranker BAAI/bge-reranker-v2-m3 + Seitentoleranz ±1 + Fragen 30 + +Ergebnis + Recall@5 0.70 (21 von 30) + Recall@10 0.73 (22 von 30) + Recall@20 0.83 (25 von 30) + MRR 0.69 + +Nach Korpus + primär Recall@5 0.00 MRR 0.02 (4 Fragen) + sekundär Recall@5 0.81 MRR 0.79 (26 Fragen) + +Einzelne Fragen (Rang = Position des ersten korrekten Treffers) + Rang 1 sekundär Wie stand Kafkas Familie seiner literarischen Tätigkeit nach Kafkas Tod gegenüber? + Rang 1 sekundär In welchem Band von Jacob Burckhardts Griechischer Kulturgeschichte gibt es ein eigenes Kapitel über Metamorphosen? + Rang 1 sekundär Was kann man zu Formen der Gestik und Mimik in Kafkas Werken sagen? + Rang 1 sekundär In welchem Zusammenhang stehen körperlicher Ekel und Selbstdemütigung in "Die Verwandlung"? + Rang 1 sekundär Wie kann das Bild der eleganten Dame in Gregors Zimmer gedeutet werden? + Rang 1 sekundär Was kann als "letzte Sohnespflicht" Gregors gedeutet werden? + Rang 1 sekundär Wo erfahren die Eltern die Nachricht von Gregors Tod? + Rang 1 sekundär Wie erklärt Binder die Etymologie des Familiennamens Kafka? + Rang 1 sekundär Wie heißen die beiden Nichten von Kafka? + Rang 1 sekundär Welche Sprache spricht Kafka mit seinen Nichten? + Rang 1 sekundär Inwiefern sind die Namen Kafka und Samsa aufeinander abgestimmt? + Rang 1 sekundär Was bedeutet das tschechische Wort "Kafka" auf Deutsch? + Rang 1 sekundär Welche Art von Laden führte Kafkas Vater? + Rang 1 sekundär Aus welchem sozialen Milieu stammte Kafkas Vater genau? + Rang 1 sekundär Welche Namen vergleicht Ingeborg Bachmann in ihrem Essay hinsichtlich der Namensgebung? + Rang 1 sekundär Wie interpretiert Emrich das Besondere an der Kafkaschen Form? + Rang 1 sekundär In welchem Band der Reihe "Der jüngste Tag" wurde "Die Verwandlung" veröffentlicht? + Rang 1 sekundär Seit wann lag "Die Verwandlung" abgeschlossen vor, ohne veröffentlicht zu sein? + Rang 1 sekundär Wie könnte man Kafkas ethischen Rigorismus korrigieren? + Rang 1 sekundär Welche Erzählung von Franz Kafka ist der Gattung der Großstadterzählung beziehungsweise Großstadtnovelle zuzuordnen? + Rang 5 sekundär Welche Art von Helden in einer Gesellschaft zeichnet Kafka in seinen Geschichten? + Rang 7 sekundär Wie können die drei Untermieter der Familie Kafka aus einer biblischen Perspektive gedeutet werden? + Rang 11 primär In welche Art von Tier verwandelt sich Gregor Samsa? + Rang 15 sekundär Sprach Kafka Tschechisch? + Rang 16 sekundär Was kann man zu Bildformen in Kafkas Werken sagen? + Rang – sekundär Was sagen die Aussagen seines Vorgesetzten über Gregors berufliche Leistung aus? + Rang – sekundär Inwiefern steht Gregors Selbstwahrnehmung seiner beruflichen Leistung im Widerspruch zu den Aussagen seines Vorgesetzten? + Rang – primär Wer ist der Protagonist von "Die Verwandlung"? + Rang – primär Unter welchen Umständen wird Gregor am Ende der Erzählung von seiner Familie aufgefunden? + Rang – primär Wie verändert sich Gregors Verhältnis zu seiner Familie im Verlauf der Erzählung? + +5 Frage(n) ohne Treffer unter den ersten 20. +Prüfen: Steht die Fundstelle wirklich dort? Stimmt der Dateiname? +Ist das Dokument überhaupt im Index (rag.list_documents())? + +Antwort im Kontext (Prüfung durch gpt-6-luna, erste 5 Treffer) + Antwort@5 0.93 (28 von 30) + MRR (Antwort) 0.90 + Abgleich mit Seitenprüfung: beide ja 21, nur Modell ja 7, nur Seite ja 0 + + Einzelne Fragen (Treffer = erster Auszug, der die Frage beantwortet; Seite = Rang laut Fundstelle) + Treffer 1 | Seite 1 | Wie stand Kafkas Familie seiner literarischen Tätigkeit nach Kafkas Tod gegenüber? + Auszug 1 sagt ausdrücklich, dass Kafkas Familie seiner literarischen Produktion auch nach seinem Tod gleichgültig gegenüberstand. + Treffer 1 | Seite – | Was sagen die Aussagen seines Vorgesetzten über Gregors berufliche Leistung aus? + Auszug 1 sagt ausdrücklich, dass die Aussagen des Prokuristen Gregors Selbstbild widersprechen und Zweifel an seinen Verkaufserfolgen wecken. + Treffer 1 | Seite – | Inwiefern steht Gregors Selbstwahrnehmung seiner beruflichen Leistung im Widerspruch zu den Aussagen seines Vorgesetzten? + Auszug 1 benennt ausdrücklich den Widerspruch zwischen Gregors Selbstbild und der Beurteilung seiner beruflichen Leistungen durch den Prokuristen, der Gregors Verkaufserfolge infrage stellt. + Treffer 1 | Seite 1 | In welchem Band von Jacob Burckhardts Griechischer Kulturgeschichte gibt es ein eigenes Kapitel über Metamorphosen? + Auszug 1 nennt ausdrücklich Band 2 der Griechischen Kulturgeschichte und führt dort den Abschnitt „Die Verwandlungen“ auf. + Treffer 1 | Seite 1 | Was kann man zu Formen der Gestik und Mimik in Kafkas Werken sagen? + Die Auszüge beschreiben Gestik und Mimik als vieldeutige Ausdrucksformen, die innere Zustände knapp verkörpern und von Figuren beobachtet und gedeutet werden. + Treffer 1 | Seite – | Was kann man zu Bildformen in Kafkas Werken sagen? + Die Auszüge beschreiben Bildgestaltung bei Kafka sowohl als erzählerische Bilder und Bildkontraste beziehungsweise übertragene Rede als auch als realitätsnah oder abstrakt verselbständigte Bilder. + Treffer 1 | Seite 1 | In welchem Zusammenhang stehen körperlicher Ekel und Selbstdemütigung in "Die Verwandlung"? + Die Auszüge 1, 2, 3 und 5 verknüpfen Gregors körperlichen Ekel beziehungsweise seine abstoßende Gestalt ausdrücklich mit Demütigung und Selbsterniedrigung; Auszug 4 behandelt Ekel, stellt diesen Zusammenhang aber nicht her. + Treffer 1 | Seite 1 | Wie kann das Bild der eleganten Dame in Gregors Zimmer gedeutet werden? + Die Auszüge 1 und 2 deuten die Dame als unerreichbares Ideal und als demütigenden Kontrast zu Gregors Gestalt; Auszug 3 beschreibt das Bild als menschliches Kulturgut und deutet seine Verbindung von Mensch und Tier. + Treffer 1 | Seite 1 | Was kann als "letzte Sohnespflicht" Gregors gedeutet werden? + Auszug 1 sagt ausdrücklich, dass Gregors Tod ihm als „letzte Sohnespflicht“ bleibt. + Treffer 1 | Seite 1 | Wo erfahren die Eltern die Nachricht von Gregors Tod? + Nur Auszug 1 nennt ausdrücklich den Ort: Die Eltern erfahren die Nachricht aufrecht sitzend im Ehebett. + Treffer 1 | Seite 1 | Wie erklärt Binder die Etymologie des Familiennamens Kafka? + Auszug 1 gibt Binders Erklärung ausdrücklich wieder: Kafka leite sich von „kajke“, einer niederdeutschen Koseform von Jakob, ab. + Treffer 1 | Seite 1 | Wie heißen die beiden Nichten von Kafka? + Auszug 1 nennt Kafkas Nichten ausdrücklich Marianne und Vera. + Treffer 1 | Seite 1 | Welche Sprache spricht Kafka mit seinen Nichten? + [1] und [2] sagen ausdrücklich, dass Kafka mit seinen Nichten Tschechisch sprach; [4] stützt dies mit einem tschechischen Beispiel an seine Nichte Vera. + Treffer 1 | Seite 1 | Inwiefern sind die Namen Kafka und Samsa aufeinander abgestimmt? + Die Auszüge beschreiben die lautliche und buchstabenmäßige Entsprechung von Kafka und Samsa, insbesondere gleiche Vokalfolge beziehungsweise Buchstabenpositionen und einen Konsonantentausch; [4] ergänzt Kafkas Vorbehalt, Samsa sei kein vollständiges Kryptogramm für Kafka. + Treffer 1 | Seite 1 | Was bedeutet das tschechische Wort "Kafka" auf Deutsch? + Auszug 1 sagt ausdrücklich, dass das tschechische Wort „Kafka“ auf Deutsch „Dohle“ bedeutet. + Treffer 1 | Seite 1 | Welche Art von Laden führte Kafkas Vater? + Die Auszüge 1 bis 4 bezeichnen das Geschäft des Vaters als Galanteriewaren- beziehungsweise Kurzwarenhandlung, während Auszug 5 das Thema nicht beantwortet. + Treffer 1 | Seite 1 | Aus welchem sozialen Milieu stammte Kafkas Vater genau? + Alle Auszüge verorten Hermann Kafka in einem ärmlichen tschechisch-jüdischen ländlichen Milieu und nennen seine Herkunft als Sohn eines Fleischhauers beziehungsweise als wandernder Hausierer. + Treffer 1 | Seite 1 | Welche Namen vergleicht Ingeborg Bachmann in ihrem Essay hinsichtlich der Namensgebung? + Auszug 1 sagt ausdrücklich, dass Bachmann die Namengebung von Thomas Mann, Franz Kafka und James Joyce vergleicht. + Treffer 1 | Seite 1 | Wie interpretiert Emrich das Besondere an der Kafkaschen Form? + [1] erläutert unmittelbar das ständige Schweben und Zurücknehmen von Aussagen, [2] nennt ergänzend Summierung und Verfremdung als notwendige Verfahren zur Darstellung der Totalität. + Treffer 1 | Seite 1 | In welchem Band der Reihe "Der jüngste Tag" wurde "Die Verwandlung" veröffentlicht? + Die Auszüge 1, 2 und 5 nennen ausdrücklich den Band 22/23 der Reihe „Der jüngste Tag“. + Treffer 1 | Seite 1 | Seit wann lag "Die Verwandlung" abgeschlossen vor, ohne veröffentlicht zu sein? + Beide Auszüge sagen ausdrücklich, dass „Die Verwandlung“ seit Anfang 1913 abgeschlossen vorlag und erst 1915 veröffentlicht wurde. + Treffer 1 | Seite 5 | Welche Art von Helden in einer Gesellschaft zeichnet Kafka in seinen Geschichten? + Die Auszüge 1, 3 und 5 beschreiben Kafkas Helden als kleinbürgerlich geprägte, machtlose oder schwache Menschen, die an ihrem konflikthaften Verhältnis zur Gesellschaft scheitern. + Treffer 1 | Seite 1 | Welche Erzählung von Franz Kafka ist der Gattung der Großstadterzählung beziehungsweise Großstadtnovelle zuzuordnen? + Auszug 1 ordnet ausdrücklich Kafkas Erzählung „Die Verwandlung“ der Gattung der Großstadterzählung beziehungsweise -novelle zu. + Treffer 1 | Seite – | Wer ist der Protagonist von "Die Verwandlung"? + Diese Auszüge nennen Gregor Samsa ausdrücklich als Protagonisten oder Helden der Erzählung. + Treffer 1 | Seite – | In welche Art von Tier verwandelt sich Gregor Samsa? + Alle Auszüge bezeichnen Gregors Gestalt ausdrücklich als Insekt beziehungsweise ungeheueres Ungeziefer; keiner legt eine eindeutige Tierart fest. + Treffer 1 | Seite – | Wie verändert sich Gregors Verhältnis zu seiner Familie im Verlauf der Erzählung? + [1] schildert die Umkehr vom versorgenden Familienmitglied zum Ausgeschlossenen, [2] Gregors Wandel von Rücksichtnahme zu Gleichgültigkeit und Angriffslust gegenüber seiner Familie. + Treffer 2 | Seite – | Sprach Kafka Tschechisch? + Diese Auszüge belegen Tschechisch als Kafkas Umgangssprache und nennen konkrete mündliche Kommunikation, wobei Auszug 5 seine aktive Verwendung vorsichtiger formuliert. + Treffer 2 | Seite 1 | Wie könnte man Kafkas ethischen Rigorismus korrigieren? + Beide Auszüge legen nahe, den Rigorismus zu korrigieren, indem man gesellschaftliche Lebensumstände und ihren Einfluss auf individuelles Versagen berücksichtigt, statt allein den Einzelnen zu verurteilen. + Treffer – | Seite – | Wie können die drei Untermieter der Familie Kafka aus einer biblischen Perspektive gedeutet werden? + Keiner der Auszüge deutet die drei Untermieter ausdrücklich aus biblischer Perspektive; der biblische Apfelbezug in [2] betrifft eine andere Szene. + Treffer – | Seite – | Unter welchen Umständen wird Gregor am Ende der Erzählung von seiner Familie aufgefunden? + Keiner der Auszüge schildert, wie Gregor von seiner Familie aufgefunden wird; Auszug 3 erwähnt nur seinen Tod und das Verhalten der Familie danach. diff --git a/eval_retrieval.py b/eval_retrieval.py index fc32478..83e0e23 100644 --- a/eval_retrieval.py +++ b/eval_retrieval.py @@ -1,10 +1,16 @@ #!/usr/bin/env python3 -"""Bewertet die Retrieval-Qualität gegen einen Satz Referenzfragen. Kein LLM beteiligt. +"""Bewertet die Retrieval-Qualität gegen einen Satz Referenzfragen. Das Skript stellt jede Frage aus eval/goldset.csv an den Vektorspeicher und prüft, ob die erwartete Fundstelle unter den ersten k Treffern auftaucht. Ergebnis sind Recall@k und MRR, ausgegeben auf dem Bildschirm und in eval/baseline.txt. +Optional (--judge MODELL) beurteilt zusätzlich ein Sprachmodell über die OpenAI-API, +ob die Antwort in den ersten JUDGE_K Treffern steht — gleich in welchem Buch und auf +welcher Seite. Das misst, was für den Chat zählt, und wertet gleichwertige Stellen +aus anderen Quellen nicht als Fehler. Braucht OPENAI_API_KEY; die Urteile werden in +eval/judge_cache.json zwischengespeichert, damit Wiederholungen nichts kosten. + Aus dem Projektordner starten: python eval_retrieval.py Fragen, Index und Bericht lassen sich auf der Kommandozeile überschreiben, z. B. @@ -34,7 +40,7 @@ GOLDSET_PATH = Path("eval/goldset.csv") REPORT_PATH = Path("eval/baseline.txt") # Muss mit server.py übereinstimmen, sonst wird ein anderer Index gemessen. -VECTORSTORE_PATH = "./vectorstore_docling_hdr" +VECTORSTORE_PATH = "./vectorstore_pypdf_2000" # Für diese k-Werte wird Recall@k berechnet. K_VALUES = [5, 10, 20] @@ -51,8 +57,27 @@ PAGE_OFFSET = 1 # gelten noch als Treffer. 0 verlangt die exakte Seite. PAGE_TOLERANCE = 1 +# Wie viele Treffer das Sprachmodell bei --judge zu sehen bekommt (wie RETRIEVAL_K im Chat). +JUDGE_K = 5 +JUDGE_CACHE = Path("eval/judge_cache.json") + +JUDGE_PROMPT = """Du prüfst eine Literatursuche zu Franz Kafka. Unten stehen eine Frage und \ +{n} nummerierte Textauszüge aus Primär- und Sekundärliteratur (teils mit OCR-Fehlern). + +Entscheide für jeden Auszug, ob er die Frage beantwortet: ganz oder in ihrem wesentlichen \ +Kern, so dass man allein mit diesem Auszug eine zutreffende Antwort geben könnte. Ein Auszug, \ +der nur das Thema berührt, zählt nicht. Nutze kein eigenes Wissen über Kafka, nur die Auszüge. + +Antworte ausschließlich mit JSON in dieser Form: +{{"auszuege": [Nummern der Auszüge, die die Frage beantworten], "begruendung": "ein Satz"}} + +Frage: {frage} + +{auszuege}""" + RETRIEVAL_SETUP = "" # wird in main() gesetzt und im Bericht vermerkt INDEX_INFO = {} # Einstellungen, mit denen der Index gebaut wurde (index_info.json) +JUDGE_MODEL = None # wird in main() aus --judge gesetzt # ----------------------------------------------------------------------------- @@ -141,13 +166,74 @@ def evaluate(rag, goldset, max_k): rank = position break - results.append({**item, "rank": rank}) + results.append({**item, "rank": rank, "docs": docs}) marker = f"Rang {rank}" if rank else "nicht gefunden" print(f" [{i}/{len(goldset)}] {marker:<15} {item['question'][:60]}") return results +def judge(results, model): + """Lässt ein Sprachmodell prüfen, welche der ersten JUDGE_K Treffer die Frage + beantworten. Ergänzt je Frage judge_rank (erster passender Treffer) und judge_note.""" + import hashlib + import json + import re + from langchain_openai import ChatOpenAI + + cache = json.loads(JUDGE_CACHE.read_text(encoding="utf-8")) if JUDGE_CACHE.exists() else {} + llm = ChatOpenAI(model=model) + for i, r in enumerate(results, start=1): + docs = r["docs"][:JUDGE_K] + excerpts = "\n\n".join( + f"[{n}] ({Path(d.metadata.get('source', '')).name}, Seite {d.metadata.get('page')})\n" + f"{' '.join(d.page_content.split())}" for n, d in enumerate(docs, start=1)) + prompt = JUDGE_PROMPT.format(n=len(docs), frage=r["question"], auszuege=excerpts) + key = hashlib.sha256(f"{model}\n{prompt}".encode()).hexdigest() + if key not in cache: + reply = llm.invoke(prompt) + text = reply.content if hasattr(reply, "content") else str(reply) + if isinstance(text, list): # manche Modelle liefern Inhaltsblöcke + text = " ".join(part.get("text", "") if isinstance(part, dict) else str(part) for part in text) + match = re.search(r"\{.*\}", text, re.S) + try: + verdict = json.loads(match.group(0)) if match else {} + except json.JSONDecodeError: + verdict = {} + cache[key] = {"auszuege": sorted(int(n) for n in verdict.get("auszuege", []) if str(n).isdigit()), + "begruendung": verdict.get("begruendung", text[:200])} + JUDGE_CACHE.write_text(json.dumps(cache, ensure_ascii=False, indent=1), encoding="utf-8") + hits = [n for n in cache[key]["auszuege"] if 1 <= n <= len(docs)] + r["judge_rank"] = hits[0] if hits else None + r["judge_note"] = cache[key]["begruendung"] + marker = f"Treffer {r['judge_rank']}" if hits else "keine Antwort" + print(f" [{i}/{len(results)}] {marker:<15} {r['question'][:60]}") + + +def judge_report(results, model): + """Berichtsteil für die Prüfung durch das Sprachmodell.""" + n = len(results) + found = [r for r in results if r.get("judge_rank")] + page_hits = {id(r) for r in results if r["rank"] is not None and r["rank"] <= JUDGE_K} + both = sum(1 for r in found if id(r) in page_hits) + out = [ + "", + f"Antwort im Kontext (Prüfung durch {model}, erste {JUDGE_K} Treffer)", + f" Antwort@{JUDGE_K:<11} {len(found) / n:.2f} ({len(found)} von {n})", + f" MRR (Antwort){'':<6} {sum(1 / r['judge_rank'] for r in found) / n:.2f}", + f" Abgleich mit Seitenprüfung: beide ja {both}, nur Modell ja {len(found) - both}, " + f"nur Seite ja {len(page_hits) - both}", + "", + " Einzelne Fragen (Treffer = erster Auszug, der die Frage beantwortet; Seite = Rang laut Fundstelle)", + ] + for r in sorted(results, key=lambda r: (r.get("judge_rank") is None, r.get("judge_rank") or 0)): + jr = r.get("judge_rank") + pr = r["rank"] if r["rank"] is not None and r["rank"] <= JUDGE_K else None + out.append(f" Treffer {jr if jr else '–':>2} | Seite {pr if pr else '–':>2} | {r['question']}") + out.append(f" {r.get('judge_note', '')}") + return out + + def recall_at(results, k): """Anteil der Fragen, deren Fundstelle unter den ersten k Treffern liegt.""" if not results: @@ -216,19 +302,24 @@ def build_report(results, embedding_model): "Ist das Dokument überhaupt im Index (rag.list_documents())?", ] + if any("judge_rank" in r for r in results): + out += judge_report(results, JUDGE_MODEL) + out.append("") return "\n".join(out) def main(): global GOLDSET_PATH, VECTORSTORE_PATH, REPORT_PATH, USE_QUERY_INSTRUCTIONS - parser = argparse.ArgumentParser(description="Retrieval-Auswertung ohne LLM") + parser = argparse.ArgumentParser(description="Retrieval-Auswertung") parser.add_argument("--goldset", type=Path, default=GOLDSET_PATH) parser.add_argument("--index", default=VECTORSTORE_PATH) parser.add_argument("--report", type=Path, default=REPORT_PATH) parser.add_argument("--mode", choices=["dense", "hybrid", "union"], default=None, help="Suchmodus, Standard aus local_rag.RETRIEVAL_MODE") parser.add_argument("--no-rerank", action="store_true", help="Cross-Encoder abschalten") + parser.add_argument("--judge", metavar="MODELL", default=None, + help="zusätzlich prüfen lassen, ob die Antwort in den ersten Treffern steht") parser.add_argument("--query-instructions", action="store_true", default=USE_QUERY_INSTRUCTIONS, help="Zusatztext aus local_rag.QUERY_ADDITIONAL_INSTRUCTIONS anhängen") args = parser.parse_args() @@ -240,8 +331,8 @@ def main(): print(f"{len(goldset)} Frage(n) geladen.\n") # Lädt Embeddings und Vektorspeicher genau wie die Chat-Anwendung, damit - # gemessen wird, was dort auch tatsächlich passiert. Es wird kein LLM - # aufgerufen — nur die Ähnlichkeitssuche im Vektorspeicher. + # gemessen wird, was dort auch tatsächlich passiert. Ein LLM wird nur mit + # --judge aufgerufen, zur Beurteilung der Treffer, nicht zum Antworten. options = {} if args.mode: options["retrieval_mode"] = args.mode @@ -262,6 +353,11 @@ def main(): INDEX_INFO = json.loads(info_file.read_text(encoding="utf-8")) RETRIEVAL_SETUP = f"{rag.retrieval_mode}, Reranker {rag.reranker_model or 'aus'}" results = evaluate(rag, goldset, max_k=max(K_VALUES)) + if args.judge: + global JUDGE_MODEL + JUDGE_MODEL = args.judge + print(f"\nLasse {args.judge} prüfen, ob die Antwort in den ersten {JUDGE_K} Treffern steht ...") + judge(results, args.judge) report = build_report(results, rag.embeddings.model_name) print("\n" + report) diff --git a/local_rag.py b/local_rag.py index 4219d3b..f40195b 100644 --- a/local_rag.py +++ b/local_rag.py @@ -19,9 +19,10 @@ from langchain_text_splitters import RecursiveCharacterTextSplitter import docling_loader # Pipeline tuning: used when adding documents (rebuild index after changing). -# Characters, not tokens: 1500 characters of German prose are roughly 400 tokens. -CHUNK_SIZE = 1500 -CHUNK_OVERLAP = 300 +# Characters, not tokens: 2000 characters of German prose are roughly 550 tokens. +# With the reranker, 2000/400 beat 1500/300 on both Kafka goldsets (eval/matrix_2000.out). +CHUNK_SIZE = 2000 +CHUNK_OVERLAP = 400 # Multilingual embedding model with a long input window (8192 tokens), so chunks # are never truncated. Changing it requires rebuilding the index. @@ -34,7 +35,9 @@ PDF_LOADER = "pypdf" PROCESSED_DIR = "corpus_processed/data_split" # Prefix every chunk with author and title from the file name (Docling: plus section), # so questions like "according to Lehmann ..." can match. See docling_loader.chunk_header. -CHUNK_HEADERS = True +# Needed for Docling (which drops running heads); neutral to slightly harmful for pypdf, +# whose pages carry the author in the running head anyway. +CHUNK_HEADERS = False # Retrieval / query tuning RETRIEVAL_K = 5 @@ -75,7 +78,7 @@ class LocalRAG: vectorstore_path="./vectorstore", llm_provider="ollama", ollama_model="gpt-oss:20b", - openai_model="gpt-5-mini", + openai_model="gpt-6-luna", ollama_base_url="http://localhost:11434", pdf_loader=PDF_LOADER, processed_dir=PROCESSED_DIR, diff --git a/server.py b/server.py index acd5abe..48f5845 100644 --- a/server.py +++ b/server.py @@ -12,10 +12,11 @@ from pydantic import BaseModel from local_rag import LocalRAG OLLAMA_MODEL = "gpt-oss:20b" -OPENAI_MODEL = "gpt-5-mini" -# Kafka corpus: Docling pipeline (split double pages) + chunk headers, bge-m3, hybrid search + reranker -# built with: add_pdfs.py --data data --index ./vectorstore_docling_hdr --loader docling -VECTORSTORE_PATH = "./vectorstore_docling_hdr" +OPENAI_MODEL = "gpt-6-luna" +# Kafka corpus: PyPDFLoader, chunks 2000/400 without headers, bge-m3, hybrid search + reranker. +# Docling was not better at retrieval (eval/kafka_human_judge_*.txt), so pypdf stays for now. +# built with: add_pdfs.py --data data --index ./vectorstore_pypdf_2000 --loader pypdf --no-headers +VECTORSTORE_PATH = "./vectorstore_pypdf_2000" # Dual RAG instances for on-the-fly provider switching rag_ollama = LocalRAG(