Akteursmodul mit Wikidata-Spiegel
Modul 4 der Spezifikation, dazu das Lexikon, auf das es sich stuetzt. Drei Schritte, streng getrennt: die NER liefert Kandidatenspannen, das Lexikon entscheidet den Typ, die Amtstabelle loest Aemter gegen das Datum des Items auf. Die Trennung ist gemessen begruendet und nicht uebernommen: de_core_news_lg haelt "Merz" fuer einen Ort, "Landtagswahl" fuer einen Ort und "Ukraine-Krieg" fuer eine Person. Der NER-Typ steht als ner_typ in der Nutzlast, entscheidet aber nichts. Modellwahl gemessen: sm und lg finden fast gleich viele Entitaeten (14249 gegen 14261), aber nicht dieselben - nur 10,7 Prozent der Items bekommen von beiden dasselbe Ergebnis, der Jaccard ueber alle Spannen liegt bei 0,590. lg findet 170-mal zusaetzlich "AfD" sowie Merz, Putin, Trump, Kushner, Witkoff. Zeitlich kostet das nichts (7,3 gegen 8,0 Sekunden fuer den Gesamtbestand), an Plattenplatz 568 MB. Der Spiegel ist eine Abschrift, keine Auslegung: lexikon/*.json enthaelt die Wikidata-Antworten unveraendert, mit MANIFEST.json als Beleg. Jede Ableitung geschieht in lexikon_laden.py. Nur lexikon.py --spiegeln fasst das Netz an, und es laeuft von Hand - die WDQS ist ein spendenfinanzierter Dienst, kein Endpunkt fuer eine Pipeline im Viertelstundentakt. p2-005 legt akteure und amtsinhaber an, dazu zwei Betriebssichten. Keine Ausschlussbeschraenkung gegen ueberlappende Amtszeiten: Doppelspitzen sind im deutschen Parteiensystem der Normalfall, und Bremen fuehrt "Buergermeister" als kollegiales Amt. Die Sicht amtsinhaber_ueberschneidungen macht Ueberlappungen sichtbar, statt sie zu verbieten. Amtszeiten sind halboffen - der Tag der Uebergabe gehoert dem Nachfolger, sonst waere jeder Amtswechsel eine Ueberschneidung. Messung ueber den Gesamtbestand: 3407 Items in 21,1 Sekunden, 14652 Nennungen, 2889 aufgeloest. Ein Slot-Lauf erzeugt bitgleich dieselbe Nutzlast wie der Gesamtlauf, 0 Abweichungen. spaCy ist stapelunabhaengig (Stapelgroesse 64, 7, 1 und rueckwaerts: identische Spannen), der Kunstgriff mit der festen Tokenlaenge aus dem Embeddingmodul ist hier nicht noetig. Zwei Fallen sind in NOTES.md festgehalten: eine geratene QID haengt einen Eintrag an ein fremdes Objekt (Q157617 ist die Commerzbank, nicht der Bundesrat), und FILTER (lang(?name) = "de") verliert lautlos alles ohne deutsches Label - Apple, Microsoft und Meta. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NupWEBPzsyohVPG47HsTz8
This commit is contained in:
co-authored by
Claude Opus 5
parent
cf89e012b2
commit
7e4c31912c
@@ -294,3 +294,121 @@ Ein Stolperstein beim Volume: der Container läuft als UID 10001, ein frisch
|
||||
angelegtes Podman-Volume gehört root im User-Namespace. Ohne `:U` am
|
||||
Volume-Argument scheitert der erste Schreibzugriff auf den Modell-Cache.
|
||||
Dieselbe Klasse Problem wie bei pgAdmin, nur mit anderem Symptom.
|
||||
|
||||
# Befunde aus der Vorarbeit zu Akteuren
|
||||
|
||||
## Ein Datenfehler aus Phase 1: `"None"` als Teaser
|
||||
|
||||
382 der 550 zeit-Items tragen als Teaser die Zeichenkette `None` — nicht
|
||||
`NULL`, sondern Pythons `None` in Text verwandelt. Das sind 69 Prozent des
|
||||
Hauses.
|
||||
|
||||
Der Fehler entsteht im Ingest und ist in Phase 2 bereits wirksam geworden:
|
||||
|
||||
- die Embeddings dieser 382 Items kodieren ein bedeutungsloses Wort mit,
|
||||
- die Dublettenprüfung vergleicht es mit,
|
||||
- die NER hält es 112-mal für einen Ort oder eine Organisation.
|
||||
|
||||
Zu reparieren ist er richtigerweise in Phase 1. Phase 2 kann ihn abfangen,
|
||||
das entwertet aber jede bestehende `coder_version` und erzwingt einen
|
||||
vollständigen Neuaufbau.
|
||||
|
||||
Bemerkenswert ist, wie lange er unentdeckt blieb: keine der drei bisherigen
|
||||
Auswertungen schaute je auf einen einzelnen Teaser, und in der Aggregation
|
||||
ist `None` ein Wort wie jedes andere.
|
||||
|
||||
## `de_core_news_sm` gegen `de_core_news_lg`, 3407 Items
|
||||
|
||||
| | sm | lg |
|
||||
|--------------------------|--------|--------|
|
||||
| Entitäten | 14 249 | 14 261 |
|
||||
| Durchsatz | 465/s | 428/s |
|
||||
| Items ohne jede Entität | 81 | — |
|
||||
|
||||
Die Gesamtzahlen sind fast gleich. Das ist eine Falle: die beiden Modelle
|
||||
finden **nicht dieselben** Entitäten.
|
||||
|
||||
| Vergleich | Wert |
|
||||
|------------------------------------|-------|
|
||||
| Items mit identischem Ergebnis | 10,7 %|
|
||||
| Items mit identischen Spannen | 18,2 %|
|
||||
| Jaccard über alle Spannen | 0,590 |
|
||||
|
||||
Auch wenn man die Typen ignoriert und nur die Spannen vergleicht, stimmen
|
||||
die Modelle bei zwei von fünf Nennungen nicht überein.
|
||||
|
||||
Entscheidend ist, *welche* Nennungen das sind. `lg` findet 170-mal
|
||||
zusätzlich `AfD` und je 80-mal `Kushner` und `Witkoff`, dazu `Merz`, `Putin`,
|
||||
`Trump`, `Siegmund` — also genau die Akteure, um die es in diesem Korpus
|
||||
geht. `sm` stuft `AfD` 226-mal als MISC und 23-mal als LOC ein, `lg` 392-mal
|
||||
als ORG.
|
||||
|
||||
Daraus folgen zwei Dinge:
|
||||
|
||||
1. **`lg`**, denn der Zeitunterschied ist mit 7,3 zu 8,0 Sekunden für den
|
||||
Gesamtbestand kein Argument. Der Preis sind 568 MB im Image.
|
||||
2. **Den NER-Typen ist nicht zu trauen.** Beide Modelle halten `Merz` für
|
||||
einen Ort, `Landtagswahl` für einen Ort und `Ukraine-Krieg` für eine
|
||||
Person. Die NER liefert deshalb nur *Kandidatenspannen*; welchen Typ eine
|
||||
Nennung hat, entscheidet das Lexikon, nicht das Modell.
|
||||
|
||||
## Was das Akteursmodul auflöst — und was nicht
|
||||
|
||||
Gesamtbestand, 3407 Items, 21,1 Sekunden:
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| Nennungen | 14 652 |
|
||||
| aufgelöst | 2 889 (19,7 %) |
|
||||
| Lexikon | 5540 Akteure, 416 Amtszeiten |
|
||||
|
||||
Ein Slot-Lauf erzeugt bitgleich dieselbe Nutzlast wie der Gesamtlauf
|
||||
(3407 Codings, 0 Abweichungen).
|
||||
|
||||
Die 19,7 Prozent klingen niedrig und sind es nicht. Die häufigsten
|
||||
unaufgelösten Formen zeigen, warum:
|
||||
|
||||
| Nennungen | Form | wessen Zuständigkeit |
|
||||
|---|---|---|
|
||||
| 567 | Sachsen-Anhalt | Geokodierung |
|
||||
| 382 | `None` | Ingest-Fehler, siehe oben |
|
||||
| 170 | Landtagswahl in Sachsen-Anhalt | Ereignis, kein Akteur |
|
||||
| 143 | Berlin | Geokodierung |
|
||||
| 119 | Kiew | Geokodierung |
|
||||
| 95 | Witkoff | echte Lexikonlücke |
|
||||
| 87 | Kushner | echte Lexikonlücke |
|
||||
| 56 | Siegmund | echte Lexikonlücke |
|
||||
|
||||
Drei verschiedene Dinge, die als eine Zahl erscheinen: Orte gehören dem
|
||||
nächsten Modul, `None` ist ein Datenfehler, und nur der Rest ist wirklich
|
||||
eine Lücke im Lexikon.
|
||||
|
||||
### Die Lücke hat ein Muster
|
||||
|
||||
`Witkoff`, `Kushner`, `Siegmund` — US-Sondergesandte und
|
||||
Landtagsabgeordnete. Der Spiegel deckt Bundestag, Staats- und
|
||||
Regierungschefs, Parteien, Staaten, Leitindex-Unternehmen und internationale
|
||||
Organisationen ab. **Landtagsabgeordnete fehlen**, und ausgerechnet dieser
|
||||
Korpus wird von einer Landtagswahl beherrscht.
|
||||
|
||||
Die Spezifikation nennt Landtagsabgeordnete nicht; die Auslassung ist also
|
||||
regelkonform, aber für diesen Bestand teuer. Eine zusätzliche
|
||||
Spiegelabfrage würde sie schließen.
|
||||
|
||||
### Zwei Fallen beim Spiegeln
|
||||
|
||||
**Geratene QIDs.** `Q157617` ist nicht der Bundesrat, sondern die
|
||||
Commerzbank. Weil der Lader Einträge über die QID zusammenführt, trug er
|
||||
prompt »Bundesrat« als Alias der Commerzbank ein. Handgesetzte QIDs gehören
|
||||
geprüft, und `hand.json` sagt das jetzt in seinem Kopf.
|
||||
|
||||
**`FILTER (lang(?name) = "de")`.** Apple, Microsoft und Meta haben kein
|
||||
deutsches Label in Wikidata und fallen deshalb aus jeder Spiegelabfrage —
|
||||
lautlos. Ein Rückfall auf `en` wäre beim nächsten Spiegellauf die bessere
|
||||
Wahl.
|
||||
|
||||
### spaCy ist stapelunabhängig
|
||||
|
||||
Bei Stapelgröße 64, 7 und 1 sowie rückwärts durchlaufen liefert
|
||||
`de_core_news_lg` für 400 Items identische Spannen. Der Kunstgriff mit der
|
||||
festen Tokenlänge, den die Embeddings brauchen, ist hier nicht nötig.
|
||||
|
||||
Reference in New Issue
Block a user