Is dit al gefactcheckt? Antwoord met bron
Een zoeklaag die een screenshot of een stuk tekst koppelt aan factchecks die al bestaan, zonder zelf te oordelen.

- Product
- Route
- Onderwerp
- Platform
- Jaar
Iemand stuurt je een screenshot met een stellige bewering. Doublecheck zoekt of die bewering al door een factchecker is uitgezocht, en geeft terug wie dat deed, wanneer en wat eruit kwam. Een eigen oordeel of een waarheidspercentage zit er bewust niet in.
- Python 3.12
- FastAPI
- sentence-transformers
- PDQ-beeldhashes
- Tesseract OCR
- SQLite en numpy
- pytest
In het kort
- 79.676
- 1.596
- 38
- 5
- 1.682
Wat er lag
Iemand stuurt je een screenshot met een stellige bewering, en je wilt weten of het klopt. Een model laten oordelen levert alleen een nieuwe bewering op, die je dan weer moet checken. Daarom een kleinere en scherpere vraag: is dit al door iemand uitgezocht, en door wie? Het antwoord mag nooit verder gaan dan wat die factcheckers zelf schreven.
Drie details die het verschil maken



Hoe het is gemaakt
Wat we bouwden
Je geeft Doublecheck een screenshot of een stuk tekst. Uit een beeld leest hij eerst de tekst, in het Nederlands, Engels, Duits, Frans of Spaans. Dan zoekt hij in bijna tachtigduizend gecontroleerde beweringen naar dezelfde bewering, ook als die in een andere taal is geschreven, en geeft hij de factchecks terug met uitgever, datum en link. Het plaatje bovenaan is een voorbeeldbericht dat we zelf maakten; het antwoord ernaast is wat Doublecheck er echt van maakte.
Er zijn drie antwoorden, en meer niet: deze bewering is gecontroleerd door deze uitgevers, er is iets verwants gevonden maar niet dezelfde bewering, of we vonden niets. Een oordeel van ons, een score of een percentage over waarheid zit er niet in. Een browserextensie en een iOS-app om een screenshot te delen liggen als onderdeel klaar in Verifyr, het eerdere experiment dat nu ons onderdelenmagazijn is. Ze komen erbovenop zodra de laag eronder staat.

Hoe hij zoekt
Elke bewering wordt een rij van 384 getallen in een meertalig taalmodel, zodat dezelfde bewering in het Frans en in het Nederlands dicht bij elkaar ligt. Een match telt pas vanaf een gelijkenis van 0,92, over taalgrenzen heen vanaf 0,85, en tussen 0,80 en de drempel heet hij verwant. Een beeld krijgt daarnaast een vingerafdruk, en een beeld dat lijkt zonder dat de tekst klopt, telt nooit als meer dan verwant. Elk antwoord draagt de drempels en het model waarmee het gemaakt is, zodat je het kunt narekenen.
De 80.555 factchecks van 1.596 uitgevers komen uit de open feed van Data Commons, onder een licentie die doorgeven toestaat. Een taal mag de index pas in als het model hem aantoonbaar kan lezen; drie talen gingen er daarom weer uit. Zoeken loopt nog langs alle beweringen tegelijk: de helft van de vragen is binnen 190 milliseconden klaar en de traagste deed er 479 over, onder de grens van een halve seconde die we onszelf stelden. Bij twee keer zoveel beweringen is dat op, en dan is een echte zoekindex nodig.

De regels staan in de code
Afspraken zijn makkelijk te vergeten, dus staan de belangrijkste in de code. Een factcheck zonder uitgever of zonder link kan de index niet in. Een test loopt elk antwoordmodel in het pakket langs op woorden als waarheid, waarschijnlijkheid en geloofwaardigheid, en valt om zodra er ergens zo'n veld opduikt. Een drempel komt alleen uit de configuratie, en twijfel maakt een drempel nooit ruimer.
Wat een resolver moet doen, staat los beschreven als protocol, met een eigen test die je tegen elke resolver kunt draaien, ook tegen een die iemand anders bouwt. Die test is eerlijk over zijn eigen grenzen: tegen onze resolver zag hij geen schending, maar kwamen vier verplichtingen niet aan bod, en dan zegt hij dat dit geen bewijs is.

Als het niet klopt
Onder elke uitslag kun je hem betwisten. Standaard bewaren we dan alleen een vingerafdruk van wat je instuurde, je toelichting en de uitslag die je betwist. Vink je aan dat we je invoer mogen bewaren, dan houden we hem negentig dagen vast voor foutanalyse, en krijg je een sleutel waarmee je hem eerder kunt laten verwijderen.
Zonder betwisting bewaart Doublecheck je invoer niet. Ook een fout krijgt een eigen tekst: een bestand dat te groot is, een beeld dat niet te lezen is, of een index die met een ander model is gebouwd. In dat laatste geval weigert Doublecheck te zoeken in plaats van te gokken.

Wat nog niet werkt
In onze eigen meting koppelde de tekstroute 5 van de 1.550 paren verkeerd en de beeldroute 0 van de 4.000, en vond hij 64,8 procent van de paren terug. Precisie gaat bewust voor dekking. De vijf fouten zijn bekend: twee keer een ingekorte bewering, twee keer een verdraaide en één keer een ontkenning, en geen drempel haalt ze weg zonder nieuwe fouten te maken. De beeldroute is gemeten op een eigen testindex, want de open factcheckdata bevat geen beelden. Een bijgesneden beeld herkent hij nog niet.
Op echte data liep een tweede vraag vast: herhaalt een tekst van een taalmodel een weerlegde bewering in eigen woorden? Op 107 echte documenten vond Doublecheck geen van de 28 gevallen, en alle zeven meldingen waren fout, vooral op de factcheckpagina's zelf, die de bewering citeren voordat ze hem weerleggen. Op de 46 documenten die er niets mee te maken hadden kwam geen enkele valse melding. Dit is onderzoek, en zo staat het er ook.
Wat we eruit hebben geleerd
- 01
Zes keer ging hetzelfde mis: een hulpmiddel nam stilletjes aan dat tekst in het Latijnse schrift staat, en omdat de tests Latijnse invoer gebruikten, werd het cijfer er zelfs beter van. Hoofdletters die in het Arabisch niet bestaan, een lettertype zonder Chinese, Japanse en Koreaanse tekens. Er staat nu een controle die elke tekstfunctie over 24 schriften laat lopen.
- 02
Een drempel hoort bij een vraag. De grens die werkt voor de vraag of iets dezelfde bewering is, is te streng voor de vraag of een tekst hetzelfde zegt in andere woorden, en dat zag je pas op echte documenten.
- 03
Lees de licentie voordat je de data leest. Het eerste corpus kwam uit een API van Google waarvan de voorwaarden een eigen database en doorgeven verbieden. Alles is omgezet naar de open feed van Data Commons en opnieuw gemeten.
- 04
Een taal die het model niet kan lezen, maakt stille fouten. Drie talen gaven samen 71 procent valse koppelingen, op een manier die geen enkele benchmark zag. Sindsdien meten we eerst of het model een taal aankan, en pas dan mag hij erin.
Letters en kleuren
- Testpagina
- Systeemletter
- Verwijdersleutel
- IBM Plex Mono
- #F4F4F4het vak met de ruwe respons en de sleutel
- #444444uitleg onder de velden
- #CCCCCChet kader om de uitslag
- #23262Bhetzelfde vlak in de donkere stand
- #B9BEC7uitleg in de donkere stand
- Bewust kaal: Doublecheck is een laag voor andere apps, en de testpagina is gereedschap om te zien wat hij teruggeeft, met het ruwe antwoord eronder.
- Achtergrond en tekst volgen de kleuren van het systeem, zodat de pagina in de donkere stand leesbaar blijft.
- Uitgelezen uit de code op 30 september 2026.
Waar het van gemaakt is
- Invoer
- FastAPI
- POST /resolve
- Tekst of beeld
- Lezen
- Tesseract
- Vijf talen
- Minimaal 12 tekens
- Tekst vergelijken
- sentence-transformers
- Meertalig MiniLM
- 384 getallen
- Beeld vergelijken
- PDQ
- 256 bits
- 31 bits verschil
- Opslag en zoeken
- SQLite
- numpy
- Alles langs
- Toetsen
- pytest
- Conformantietest
- 24 schriften
Voor wie verder wil lezen
Onder de motorkap
De index wordt opgebouwd uit de ClaimReview-feed van Data Commons.
De index wordt opgebouwd uit de ClaimReview-feed van Data Commons. Elke bewering krijgt een naam die volgt uit haar eigen tekst, zodat dezelfde bewering op elke machine dezelfde naam heeft. De taal wordt herkend, en alleen talen die op de gemeten lijst staan mogen erin. Beweringen die vrijwel hetzelfde zeggen worden gegroepeerd, zodat je ziet hoeveel onafhankelijke uitgevers er iets over schreven.
Elke vingerafdruk draagt de versie van het model waarmee hij gemaakt is. Draait de resolver met een ander model dan de index, dan zoekt hij niet. Het oordeel van een factchecker gaat letterlijk mee, en wordt daarnaast teruggebracht tot een paar vaste woorden zoals onwaar of onbekend, zodat je oordelen in verschillende talen naast elkaar kunt leggen.
Er staat meer testcode dan code: bij de laatste balans 9.305 regels test tegen 8.037 regels productie. Metingen die niet klopten zijn niet weggegooid maar staan als ingetrokken in het benchmarkdocument, zodat je ziet hoe de cijfers tot stand kwamen.
Waar het nu staat
Af: de zoeklaag voor tekst en beeld, de index van 79.676 beweringen in 38 talen, de testpagina, het betwisten, en het protocol met zijn eigen test.
Af: de zoeklaag voor tekst en beeld, de index van 79.676 beweringen in 38 talen, de testpagina, het betwisten, en het protocol met zijn eigen test. Doublecheck draait bij ons en is niet openbaar.
Nog niet af: de vijf bekende fouten in de tekstroute, bijgesneden beelden, en bijna een kwart van de oordelen die niet in een vast woord te vangen zijn. Voordat het corpus kan groeien is een echte zoekindex nodig. Daarna volgen een naam, metingen op echte data, en de extensie en de app erbovenop.
Zegt Doublecheck of iets waar is?
Nee. Hij zegt welke factcheckers een bewering al uitzochten en wat zij schreven, met de bron erbij. Een oordeel van ons, een score of een percentage over waarheid zit er niet in.
Wat kun je insturen?
Een screenshot of een stuk tekst. Uit een beeld leest hij eerst de tekst, in het Nederlands, Engels, Duits, Frans of Spaans.
Wordt wat ik instuur bewaard?
Nee. Alleen als je een uitslag betwist en aanvinkt dat we je invoer mogen bewaren, houden we hem negentig dagen vast voor foutanalyse, met een sleutel om hem eerder te laten verwijderen.
Waar komen de factchecks vandaan?
Uit de open feed van Data Commons, onder een licentie die doorgeven toestaat: 80.555 factchecks van 1.596 uitgevers.
Kan ik het al gebruiken?
Nog niet. Doublecheck draait bij ons en is niet openbaar.

