Kennis & expertise

Attestatie: heb je een juiste match?

31/05/2019

In onze vorige techblog las je hoe we links zochten tussen namen in de Namenlijst en personen in de kranten van Nieuws van de Groote Oorlog. Eens gevonden wilden we bepalen of er wel een juiste match werd gemaakt en we de juiste persoon hadden gevonden uit de Namenlijst. Technisch gezegd: hier lees je hoe we attesteren of entiteiten uit twee verschillende databanken wel overeenkomen.

Het corpus opbouwen

We willen kunnen inschatten of de persoon in de twee databanken wel dezelfde persoon is. Dit moet automatisch gebeuren want het gaat over meer dan één miljoen potentiële links. Om automatische regels of algoritmes te kunnen opstellen en met een zo groot mogelijke waarschijnlijkheid een link te leggen tussen een persoon in de Namenlijst van het In Flanders Fields Museum en een naam in onze krantendatabank, hebben we allereerst een attestatietool gebouwd (de broncode is beschikbaar op github). Hierin kan makkelijk manueel worden bepaald of de persoon uit de Namenlijst overeenkomt met de gevonden naam in de krant. Daarvoor leggen we alle bekende relevante informatie naast de naamsvermelding in de krant.

Vervolgens kan een gebruiker de link gaan classificeren als:

  • match
  • geen match
  • mogelijke match

Zo bouwden we een klein “corpus” van 468 links die manueel geattesteerd zijn. Dit corpus gebruiken we voor het verder analyseren en verbeteren van het automatische attestatie-algoritme.

Automatisch attesteren

Uiteraard is manuele attestatie van 1 miljoen links niet mogelijk. Daarom bouwden we een tool voor de automatische attestatie van de links. Die automatische attestatie geeft een vertrouwensscore aan elke link en wordt via een iteratief proces - dat we hieronder uitgebreid toelichten - bijgeschaafd. Tijdens dit proces wordt de vertrouwensscore berekend en vervolgens gecontroleerd aan de hand van een manuele attestatie. Op basis van manuele controle passen we het algoritme aan en doen we een nieuwe iteratie met andere items. Door dit telkens te herhalen wordt het corpus verder uitgebreid.

1. Vertrouwensscore bepalen

De vertrouwensscore wordt berekend op basis van beschikbare velden uit de Namenlijst-API. 

Dat zijn: born place locality, died age, died place locality, enlisted regt0, died date, homeaddress, born date, died place name, enlisted number, enlisted regt1, born place name, enlisted rank, profession, memorated place locality, died place topo, memorated place name, victim type details, home address topo, memorated date, work place locality, enlisted sub, employer, school name, enlisted army, work company

Twee vragen die bepalend zijn voor de vertrouwensscore zijn:

  • worden er, naast voor- en familienaam, ook andere parameters vermeld?
  • welke afstand (in woorden) hebben deze parameters ten opzichte van de vermelding van de naam in de krant?

2. Analyse van de berekende vertrouwensscores

Elke mogelijke parameter die gevonden wordt, heeft een invloed op de uiteindelijke scores. Hoge scores impliceren een hoge waarschijnlijkheid dat het om een match gaat. Lage scores zijn waarschijnlijker geen match. De scores worden gebruikt om die cases te identificeren die het interessantst zijn om manueel te verifiëren. Via de attestatietool onderzochten we hoe groot of klein de impact van elk veld op de vertrouwensscore was. We vergeleken dit met de vertrouwensscores van reeds manueel geclassificeerde links.

3. Aanpassen vertrouwensscoreberekening

Het was snel duidelijk dat er per veld een mogelijke andere impact is op de probabiliteit van een mogelijke match. Zo is de vermelding van een regimentnummer nabij een naam een betere indicator dan een vermelding van de geboortestad nabij een naam. Specifiekere data, zoals een straatnaam is dan weer meer impactvol dan minder specifieke data, zoals een stad. Het algoritme voor de berekening werd bijgeschaafd op basis van de analyse in de vorige stap. Dit proces is vele malen doorlopen, en uiteindelijk hebben we deze formule aangenomen voor de automatische berekening van de vertrouwensscore:

Hierin zijn de volgende zaken van belang:

  • een vertrouwensscore kan maximaal 99% zijn.
  • “n” staat voor het aantal extra gevonden datavelden, hoe meer gevonden velden, hoe hoger de probabiliteit op een match.
  • Elk dataveld heeft een eigen gewicht ("weight"). Dit is bepaald in het iteratief proces. Het vinden van een regimentnummer heeft bijvoorbeeld een hogere impact op de score en heeft een hogere "weight" dan het vinden van de leeftijd van de overledene.
  • “mindistance” is de minimum afstand (in woorden) van de gelinkte naam tot een dataveld (bv. beroep) dat gevonden is.

De formule is zo ontwikkeld dat ze zo nauw mogelijk aansluit bij de manuele attestatie. Uiteraard blijft dit een score op basis van een relatief beperkte dataset van 468 links die manueel geattesteerd werden. Mits verdere iteraties zou deze zeker nog verfijnd kunnen worden.

Resultaat

Deze attestatiecyclus werd verschillende keren doorlopen voor de links tussen de Namenlijst en Nieuws van de Groote Oorlog. Ze resulteerden in een vertrouwensscore per link die aangeeft hoe waarschijnlijk het is dat de persoon in de Namenlijst overeenkomt met de persoon die vermeld wordt in de krant.

De spreiding van de impact per metadataveld zie je in de volgende figuur (meer info over de box plot of deze manier om data voor te stellen lees je hier).

Alle links met een probabiliteit die hoger zijn dan 0% werden gepubliceerd op Het Archief. Ook als er 1% kans is dat er een match is, wordt de link gepubliceerd. Zo kan de gebruiker zelf uitmaken of de naam in de krant overeenkomt met die in de Namenlijst. Uiteindelijk werden 10.6% van alle mogelijke links (121.986 van de 1.153.881) gepubliceerd, met een indicatie van de vertrouwensscore. Hoe we dat deden en op welke manier je die linked data kan raadplegen, vertellen we binnenkort in een volgende techblog rond linked data.