24
Hoofdstuk 24 van 31 · 13 min

24Het platform

register, CLI, beoordeling

Een register met één record per bestand, een commandoregelprogramma, een beoordelingspoort die geen model mag omzeilen, en daarbovenop een graaf en een zoekfunctie die een lezer helpen dingen te vinden maar ze nooit bewijzen.

Rotterdam adresboek 1917 (NL-RtSA 3023-61), blad 1897, p.2587 — RochussenstraatStadsarchief Rotterdam (NL-RtSA 3023) · NL-RtSA 3023 (boeken 3023-45 t/m 3023-77)Open het origineel ↗

01Eén record per bestand

Zonder software die haar afdwingt, zou de discipline uit de vorige twee hoofdstukken bij goede voornemens blijven. Het hart van die software is het register, de enige gezaghebbende bron, en dat heeft bewust een eenvoudige vorm: één record per bestand. Elk feit, elke bron, elk bewijsitem, elke persoon, elk bedrijf, elke plaats, elke act, elk optreden, elke opname, elke bewoner, elke relatie, elke studie, elk hoofdstuk, elke open vraag en elke regel op de tijdlijn heeft een eigen bestand. Daar is een praktische reden voor. Eén wijziging raakt één bestand, dus in de geschiedenis is gewoon te zien wat er veranderde en waarom, in plaats van dat het wegzakt in een groot verzameldocument. De grotere verzamelbestanden en de leesbare weergaven worden uit die records opgebouwd en nooit met de hand geschreven. Wie een gegenereerde weergave rechtstreeks bewerkt, ziet die bij de volgende opbouw gewoon overschreven worden.

Rotterdam adresboek 1917 (NL-RtSA 3023-61), blad 1897, p.2587 — RochussenstraatStadsarchief Rotterdam (NL-RtSA 3023) · NL-RtSA 3023 (boeken 3023-45 t/m 3023-77)Open het origineel ↗

Die adresboekpagina is een bron, en in het register wordt ze vastgelegd in meerdere gekoppelde records: de bron zelf, de bewaarde scan, de lezing ernaast en elk feit dat eruit is gehaald. De momentopname achter deze site telt 385 feiten, 709 bronnen en 2.817 bewijsrecords, dat wil zeggen de scans, uitsneden, transcripties en lezingen die onder de beweringen liggen; splitst ze uit naar soort. Sommige regels dwingt de machine af in plaats van ze aan zorgvuldigheid over te laten, en een lezer kan ze nagaan. Een aangehaald bewijsrecord moet wijzen naar een bestand dat echt op schijf staat, en een bron zonder bewaarde bytes moet schriftelijk uitleggen waarom ze ontbreken. Van elke open vraag wordt gecontroleerd of ze nog klopt met het onderzoek dat eronder is vastgelegd, zodat een vraag waarvan de basis is veranderd als verouderd wordt gemarkeerd en niet stilzwijgend wordt vertrouwd. Contactgegevens van een levende persoon komen niet door de validatie, tenzij ze als openbaar zijn gemarkeerd en een bron hebben.

Verdiepende dossiers:

02Voorstellen, vooraf bekijken, accepteren, toepassen

Een vondst legt een lange weg af van het archief naar het register, en alleen het laatste stuk mag geaccepteerde kennis veranderen. Eerst wordt het materiaal opgehaald en bewaard. Dan wordt het gelezen en getranscribeerd, en wordt een bewering opgesteld met haar onderbouwing en haar onzekerheid. Pas daarna komt de bewering bij de poort die haar kan wegschrijven, en die poort kent vier stappen. De wijziging wordt opgesteld als voorstel, dat precies laat zien wat het zou toevoegen of veranderen en waarop het rust. Ze wordt vooraf bekeken: volledig uitgestald, zodat de eigenaar haar kan lezen voordat er iets wordt vastgelegd. Ze wordt geaccepteerd als bewuste handeling, of niet. Pas daarna wordt ze toegepast en in het register geschreven; de alleen-lezenweergaven voor het publiek opnieuw opbouwen is een aparte stap die later volgt. De acceptatie hoort bij precies de wijziging die vooraf is bekeken. Is het voorstel of het project sinds dat moment veranderd, dan wordt de verouderde acceptatie geweigerd, zodat er niets wordt toegepast wat de eigenaar niet heeft gezien. legt de hele poort uit en laat zien welke fouten ze tegenhoudt.

Achter die vier stappen zit een regel over wie mag schrijven. Eén centraal softwarepakket beheert elke geaccepteerde schrijfactie, elke controle en elke lokale build. Het commandoregelprogramma dat iemand start, roept dat pakket alleen aan, met een handvol eenvoudige werkwoorden: het project controleren, het register doorzoeken, nieuw materiaal innemen, een wijziging beoordelen, de lokale weergaven bouwen. Een publicatiecommando is er helemaal niet, dus de weergaven op je eigen machine bouwen staat nooit gelijk aan ze online zetten. Elke geaccepteerde wijziging gaat langs één gecontroleerd pad, waardoor de mensen en modellen die tegelijk aan de hoek werken elkaar niet ongemerkt kunnen overschrijven. De vele modellen die ophalen, lezen en opstellen kunnen materiaal als concept klaarzetten, maar ze zijn zo gebouwd dat ze worden geblokkeerd als ze zelf het register proberen te wijzigen. Ook de validatie houdt bij een fout alles tegen. Een verwijzing naar iets wat niet is geregistreerd, dezelfde scan onder twee records, een verlopen acceptatie of een overtreding van de regel die een levende persoon beschermt: elk daarvan houdt een wijziging tegen voordat ze vastligt. Toch controleert de poort minder dan de waarheid. Ze kijkt of een wijziging intern samenhangend is, niet of haar lezing van de geschiedenis juist is, en daarom houdt de site ook een openbare lijst bij van de waarden die ze heeft moeten corrigeren.

Verdiepende dossiers:

03Weergaven, dashboards, graaf en zoekfunctie

Boven op het register ligt een laag om het te lezen, en niets in die laag is bewijs. De gegenereerde weergaven worden uit het register opgebouwd. Een offline dashboard, het Control Pane, brengt het corpus op één plek samen om te lezen en te doorzoeken. Twee van deze hulpmiddelen vragen om meer uitleg, omdat de machine daar het meeste doet en een handig hulpmiddel daar het makkelijkst voor een bewijs wordt aangezien.

Het eerste is de graaf: het register als plaatje. Mensen, bedrijven, plaatsen en voorwerpen worden punten, en de vastgelegde relaties ertussen worden de lijnen die ze verbinden, zodat een lezer kan volgen wie met wie in verbinding stond zonder het zin voor zin bij elkaar te puzzelen. De graaf wordt uit het register gegenereerd, niet met de hand getekend, en bewaard als wegwerpweergave met een vingerafdruk, die wordt weggegooid en opnieuw opgebouwd zodra het register verandert. Hij blijft eerlijk doordat een relatie niet als kale lijn wordt opgeslagen maar als zelfstandige bewering, met een eigen status (bevestigd, waarschijnlijk, aanwijzing of betwist), net als een feit. Omdat elke verbinding een bewering is, blijven tegenstrijdige records over een verbinding allebei bewaard en worden ze allebei getekend, zonder dat de een de ander overschrijft. Of een verbinding rechtstreeks uit een document komt of uit andere records is afgeleid, wordt los van haar zekerheid genoteerd. Een verbinding die twee kanten op werkt, staat op één vaste plek en wordt niet aan beide uiteinden gekopieerd. Als de graaf een pad van de ene persoon naar de andere zoekt, stapt hij niet via een losse aanwijzing of een betwiste verbinding alsof die vaststaat, en leunt hij ook niet op een knooppunt dat toevallig door tientallen records wordt gedeeld. Graphify, een zwaarder graafframework van een derde partij, is beoordeeld voor het bevragen, visualiseren en analyseren van de graaf en niet als motor gekozen. Het is alleen bewaard als optionele route verderop, voor een interactieve weergave en om de graaf naar andere programma's te exporteren. Wat hier draait, is een dunne laag die van het project zelf is.

Het tweede hulpmiddel is de zoekfunctie, die op twee manieren tegelijk werkt. De ene is een gerangschikte zoekactie op woorden. Die vindt niet alleen records waarin een woord voorkomt, maar geeft ze een score naar hoe goed ze bij de woorden van een zoekvraag passen, met de al lang gangbare BM25-methode. De andere zoekt op betekenis. Die rust op een embedding, die een tekstpassage omzet in een lange reeks getallen die weergeven waar de passage over gaat. Twee passages die met andere woorden hetzelfde zeggen, krijgen vergelijkbare getallen en komen dicht bij elkaar te liggen, zodat een zoekactie een record kan opleveren dat inhoudelijk bij je vraag past, ook als het geen enkel woord met je vraag gemeen heeft. De twee rangschikkingen, op woorden en op betekenis, worden met een methode die Reciprocal Rank Fusion heet tot één resultaat samengevoegd. Het betekenisdeel heeft zijn plaats verdiend. Gemeten op een vaste reeks vragen steeg het aandeel juiste antwoorden in de beste tien van 34 naar 39 procent, met de duidelijkste winst bij geparafraseerde vragen. Er geldt ook een actualiteitspoort: de index moet opnieuw worden opgebouwd zodra het register verandert, en zolang de index achterloopt, blokkeert het betekenisdeel en geeft het geen antwoorden op basis van verouderde getallen. Het wordt dus alleen geraadpleegd als het actueel is. De embeddings worden op de eigen machines van het project berekend door een lokaal EmbeddingGemma-300M-model onder Ollama, en er gaat niets naar buiten.

Welke vorm het ook heeft, de regel is die welke de bewijsketen al vastlegde. Een gegenereerde samenvatting, een graaf of een zoekresultaat helpt je de weg te vinden in het register, maar bewijst er nooit iets in; spreken een hulpmiddel en het document eronder elkaar tegen, dan geldt het document. De machine is een register, een poort en een reeks alleen-lezenweergaven daarop. Het volgende hoofdstuk gaat over wie haar werkelijk bestuurt, en hoeveel van dit werk een model heeft gedaan.

Verdiepende dossiers: Geen