Honey, I scraped the kids – over taalmodellen en privacy
Taalmodellen, die gebruikt worden voor applicaties zoals automatische vertaling, chatbots, en het genereren van teksten, worden steeds groter. Nadat OpenAI’s GPT-3 nogal wat furore had gemaakt met haar spectaculaire toepassingen, volgen nu regelmatig nog grotere modellen – Google’s Switch of het Chinese Wu Dao zijn maar enkele van de voorbeelden. (Het woord “taalmodel” mag men trouwens met een korrel zout nemen – in de praktijk gaat het nog steeds om niet meer dan een “woordvolgordemodel”)
Enorme taalmodellen moeten worden getraind met enorme datasets. Om die te verzamelen wordt op geen bron meer of minder gekeken: The Pile, zowat de grootste dataset van Engelstalige tekst die vandaag bestaat, tikt ongeveer 825 GB aan. De volledige Engelstalige Wikipedia maakt er deel van uit, voor 6.3 GB, oftewel 0.7% van de collectie. Andere databronnen zijn CommonCrawl , OpenWebText , maar er worden ook tekstfragmenten gebruikt afkomstig van Github, ArXiv, PubMed, StackExchange, OpenSubtitles, zelfs het Europees Parlement.
Veel van die datasets zijn met eenvoudige webscraping scripts verzameld. Of dat allemaal wel mag volgens copyright- en privacywetgevingen allerhande, is een ingewikkelde vraag met een nog ingewikkelder antwoord en dus maakt men daar voor het gemak in eerste instantie vaak abstractie van. Kwaliteitschecks en fijnmazige filters zijn tijdrovend als je ze accuraat wil maken, en in de wedloop om het grootste taalmodel sneuvelen die dus helaas ook maar al te vaak.
Gegeven de enorme verscheidenheid aan bronnen, websites, tekstformatteringen en dataverzamelingsmethodes, is het zo haast onvermijdelijk geworden dat in datasets van die grootteorde toch nog persoonsgegevens of auteursrechtelijk beschermde teksten terechtkomen – zelfs als men moeite doet om enigszins correct te handelen. Reden genoeg om zelf eens in zo’n dataset te duiken en te kijken wat we daarin terugvinden.
OSCAR
OSCAR is een meertalige dataset die regelmatig wordt gebruikt voor niet-Engelstalige taalmodellen. De Nederlandstalige subset ervan kan dienen als basis van een Nederlandstalige tekstgenerator. OSCAR is op zijn beurt afgeleid van CommonCrawl, een grootschalige dataset van scraped websites, waarvan de makers wel aangeven dat robots.txt en HTML no-follow specificaties gehonoreerd werden, maar waar verder weinig meer mee gebeurd is dan gegevensopslag. OSCAR groepeert die per taal, voegt wat extra preprocessing toe, en zet de tekstfragmenten in willekeurige volgorde, om zo copyrightproblemen te vermijden. We doen hier geen uitspraak over de vraag of dat wel voldoende is voor dat doel. Een bijkomend effect daarvan is wel dat de inhoudelijke relatie tussen opeenvolgende tekstfragmenten in deze dataset dus verloren is gegaan. (De laatste paper van de auteurs probeert daar alsnog een mouw aan te passen.)
We bekijken de Nederlandstalige gegevens uit de eerste versie van deze dataset uit 2019 (toegang tot versie 2021 of versie 2022 vereisen registratie of aanvraag). Deze is vrij beschikbaar in de dataset repository van Huggingface, dat ook een eerste preview van de inhoud voorziet. Bij Huggingface vermeldt men summier dat de dataset persoonlijke of gevoelige informatie kan bevatten, en dat de training van een AI-model op basis van deze dataset gevoelig kan zijn voor biases, zonder dieper in te gaan op deze problematiek. De verantwoordelijkheid hiervoor wordt bij de gebruiker van de dataset gelegd.
De Nederlandstalige subset van OSCAR bestaat uit 126.064.721 tekstfragmenten van één tot enkele zinnen lang, die we kunnen samengevoegen tot 1 tekstbestand met een grootte van ongeveer 40GB. In wat volgt doorzoeken we deze dataset naar gegevens die als persoonlijk of gevoelig beschouwd zouden kunnen worden. Het valt aan te nemen dat die gegevens grotendeels zijn gescrapet zonder medeweten van de originele auteurs of van de websites waarop ze oorspronkelijk gepubliceerd waren. We tonen telkens een selectie van wat we zoal terugvinden ter illustratie, maar om de mogelijke privacy- en copyrightproblemen niet erger te maken dan ze al zouden kunnen zijn, maskeren we in dit artikel de gevonden gevoelige gegevens alsnog en markeren we ze rood.
Gevoelige gegevens in OSCAR
Door gewoon reguliere expressies toe te passen, die je vaak kan copy-pasten van het internet, kunnen we al veel boven water halen. Om emailadressen te detecteren, gebruiken we een relatief eenvoudig patroon, waarmee we 685.968 potentiële matches terugvinden (let wel dat veel algemene emailadressen, bijvoorbeeld van helpdesks of infolijnen of grote organisaties, herhaaldelijk voorkomen):
grep -a -e "[a-zA-Z0-9._]\+@[a-zA-Z]\+.[a-zA-Z]\+" oscar_nl_full.txt
- Ik gooide enkele nieuwe data online! Wie zin heeft kan zich inschrijven door te mailen naar e*******s@gmail.com
- Ontdek hoe je een WordPress thema vindt dat echt bij jou past! www.speciaalgeselecteerd.nl jouw gids voor WordPress thema s Door: S******* v** N******** Datum: 1-1-2016 E-mail: s********@innonet.nl WordPress
- De hoofdleiding bestaat uit D***** V******, G***** G*******, M**** W****** en F***** V*** B*****, hen kan je contacteren via 0497****** (D*****), 0493****** (G*****), 0477****** (M****) en 0498****** (F*****). Een mailtje naar i***@c*********.be is ook altijd mogelijk. Zij zullen jullie graag helpen met vragen, opmerkingen of klachten.
Veel emailadressen lijken afkomstig van contactpagina’s op websites van bedrijven, organisaties, maar je herkent ook overduidelijk verenigingen, lokale initiatieven, jeugdbewegingen, en forumgebruikers die hun persoonlijke contactgegevens achterlaten, waaronder telefoonnummers. Het volgende patroon zoekt naar cijfercombinaties die eruit zien als een Belgisch telefoonnummer, in de meest voorkomende schrijfwijzen. (Het patroon is iets te algemeen opgesteld, met als nadeel dat we er ook onderdelen van niet-telefoonnummers mee vinden.) Dat leidt alleszins al tot 289.461 potentiële matches:
grep -a -P "(((\+|00)32[ ]?(?:\(0\)[ ]?)?)|0){1}(4(60|[789]\d)\/?(\s?\d{2}\.?){2}(\s?\d{2})|(\d\/?\s?\d{3}|\d{2}\/?\s?\d{2})(\.?\s?\d{2}){2})" oscar_nl_full.txt
- Tijdens de openingstijden kan je via de Live Chat of via de telefoon 07******** vragen stellen aan één van onze medewerkers.
- […] Heeft u vragen over onze werkwijze, prijzen of materialen dan zijn we bereikbaar op de nummers 03/***.**.** en 03/***.**.**. Ook kunt u een e-mail sturen naar of het contactformulier invullen.
- Op 22 september vertrekken we op speel-weekend naar Ronse. Wil je nog mee? Als de bliksem bellen naar R******* 0496/**.**.**
- Propere betonnen palen 8 stuks, geen beton/cement aan de onderkant van de paal- lengte 2.05m. Bieden vanaf €7/stuk. Tel 0478/******
Ook hier vinden we veel contactgegevens van bedrijven, maar een aanzienlijk deel zijn ook persoonlijke telefoonnummers afkomstig van berichten die mensen postten op online marktplaatsen of zoekertjeswebsites. Bankrekeningnummers, BTW-nummers e.d. duiken ook op tussen de gevonden data. Om te blijven focussen op persoonsgerelateerde data, gaan we nog op zoek naar Twitter of Instagram handles. Deze kunnen bijvoorbeeld afkomstig zijn van conversaties op Twitter en Instagram zelf, van internetfora waar mensen erover spreken, of van de footers van webpagina’s met links naar sociale media. Afgezien van enkele bedrijven wiens naam of product met een @ begint, gaan achter de meeste gevonden handles echte, actieve mensen of organisaties schuil. We vinden zo 131.364 potentiële matches:
grep -a -e " @[a-zA-Z0-9]\+" oscar_nl_full.txt
- Vandaag waren we op bezoek bij Leo Timmers, maker van Een huis voor Harry, het Prentenboek van het Jaar 2019! En we gingen Billy ontmoeten, de kat waar Harry op geïnspireerd is. Ik had dus de dag van m’n leven. @v*********** #cat #books #brussels #reading #catsofbrussels #eenhuisvoorharry
- […] R***** twitterde dit naar mij en @p********, afgelopen zondagmiddag. We hadden het over de blogs die Ruud had willen schrijven die dag: drie stuks maar liefst. De blogs kwamen er inderdaad niet. Nooit meer. R***** overleed maandagavond [datum]. Ik heb een goede vriend verloren.
- Zeg @******** wat willen jullie nou in de omgangsvorm: ‘u’ of ‘je’? Maak een keuze! https://t.co/********
- @******** En niet alleen dat. Het kenteken *-***-** staat mooi op beeld. Kijk dus uit voor deze asociale weggebruiker, mede-weggebruikers. @ [datum]
Er duikt duidelijk een heel palet aan persoonsgebonden informatie in deze dataset op, zoals ook nummerplaten, berichten over ziekte of overlijden, politieke voorkeuren, informatie over wanneer personen waar geweest zijn, en nog heel wat meer. Met hetzelfde gemak vinden we ook beledigingen tegen personen terug, verwensingen allerhande, racistische fragmenten, … we kunnen alleszins heel lang bezig blijven als we hierop enige grip willen krijgen in zo’n dataset.
Een heel ander gevoelig onderwerp is erotische inhoud. Er zijn alvast 2.459.800 matches voor woorden die beginnen met “seks” of “sex” in dit eerste deeltje van de dataset. Voorbeelden daarvan geven we terwille van de goede smaak niet mee, maar u mag de auteur op zijn woord geloven dat de meeste gevonden tekstfragmenten niet van droog-wetenschappelijke papers of schoolse seksuele opvoeding afkomstig zijn. Op een totaal van 126 miljoen zinnen, kunnen we zo schatten dat zulke inhoud ongeveer 2% van het totaal uitmaakt in deze dataset.
Kom ik er in voor?
Dat kunnen we gemakkelijk achterhalen:
grep -a -e "Joachim Ganseman" oscar_nl_full.txt
- De 27e Internationale Olympiade Informatica vond plaats in Almaty, Kazachstan. De Belgische ploeg werd gevormd door Damien Galant (5e middelbaar), Robin Jadoul, Mattéo Couplet en Nico Ekkart (allen 6e middelbaar). Zij werden begeleid door Damien Leroy en Joachim Ganseman. […]
- […] De bouwstenen voor artificiële intelligentie (AI) liggen klaar, maar ze staan op los zand. Dhr. Joachim Ganseman van Smals Research bestudeerde de zwaktes van AI. In zijn artikel op de Research-blog bespreekt hij een aantal uitdagingen voor de toekomst.
- Joachim Ganseman wordt onderscheiden voor de ijver waarmee hij als jonge doctoraatsstudent de Belgische informatica-olympiade heeft gesticht, coördineert en communiceert in beide landshelften, met bijzondere inspanningen voor de toegankelijkheid voor alle leerlingen, ongeacht voorkennis.
In 7 tekstfragmenten komt mijn volledige naam voor, voornamelijk in verband met mijn engagement bij de Belgische Informatica-olympiade van 2011 tot 2018. Geen info die iets schandaligs of schaamtelijks bevat, integendeel, maar ik was niet op de hoogte. Als je ooit met naam en toenaam in de krant of op een website van een grotere organisatie hebt gestaan, lijkt de kans alleszins groot dat je naam in dat verband ook in de OSCAR dataset voorkomt. Het blijft dus erg belangrijk om in het achterhoofd te houden dat dat wat eenmaal op het internet staat, er erg moeilijk terug af gaat.
Misschien kan het een goed idee zijn om, naar analogie van Have I Been Pwned die je waarschuwt voor paswoordlekken, een gelijkaardige dienst te hebben bij dataset repositories waarmee gebruikers kunnen checken of hun persoonlijke informatie voorkomt in datasets? Tijd en middelen ontbreken om zoiets zelf verder uit te werken, maar we laten het hier staan als een interessante suggestie.
En dan?
We moeten nog vermelden dat de makers van de CommonCrawl en OSCAR datasets zelf niet Nederlandstalig zijn. Zij hebben dan ook niet onmiddellijk manieren ter beschikking om de verzamelde fragmenten in het Nederlands (en in de meeste van de andere 165 talen in OSCAR) op hun inhoudelijke merites te gaan beoordelen, en presenteren deze datasets “as is”.
Gegeven het feit dat persoonsgebonden gegevens gemakkelijk te vinden zijn op het internet voor wie een beetje zoekt – en zeker op sociale media of op marktplaatsen waar ze gretig uitgewisseld worden – is het niet verwonderlijk dat deze gegevens ook terechtkomen in datasets verzameld via webscraping, als er een breed net wordt uitgegooid en weinig wordt gefilterd.
Smals Research is een technisch team zonder juristen in haar rangen; we laten uitspraken over het wettelijke kader rond webscraping, auteursrechten, en de gebruiksvoorwaarden van websites, in een internationale context, dan ook liever over aan mensen die daar meer van kennen dan wij. Het is in onze sector wel algemeen bekend dat de persoonsgegevens van EU-ingezetenen beschermd worden door de GDPR. Dat houdt onder andere in dat zij de inzage en verwijdering van hun gegevens moeten kunnen vragen, en informatie moet kunnen krijgen over het gebruik ervan. Het wordt natuurlijk moeilijk om dat recht effectief uit te oefenen, als gegevens op elk moment in een externe database kunnen worden overgenomen, zonder medeweten van die persoon of zelfs van de website waarop ze gepubliceerd waren.
Een AI-model dat tekst schrijft, doet dat op basis van wat het tijdens de trainingsfase heeft gezien. [“Bookshelf Writer”, Andreas Refsgaard, Kåre Magnus Sand Solvåg, Riccardo Cereser (c) Copenhagen Institute of Interaction and Design]
Wie van zulke datasets gebruik maakt om AI systemen te trainen, is technisch gesproken de daarin begrepen persoonsgegevens aan het verwerken, en lijkt zo alvast automatisch een verantwoordelijkheid te hebben ten aanzien van die betreffende personen. Het is daarnaast niet ondenkbaar dat een verkeerd of slecht getraind AI-systeem deze gegevens expliciet opneemt in het resulterend model, en ze aanwendt om bepaalde beslissingen te nemen, wat een risico op bias met zich meebrengt. Tot slot weet je nooit of er ergens een slecht beveiligde website gescrapet werd door de dataset-maker, waardoor er misschien login-gegevens of paswoorden voorkomen in de dataset.
Een alternatieve werkwijze
De onderzoeksgroep Computationele Linguïstiek van de Universiteit van Groningen bouwde een eigen variant van een Nederlandstalig GPT-2 model. Zij zijn natuurlijk wél Nederlandstalig, en waren ook selectiever in het kiezen van hun trainingsdata. In hun paper lezen we dat die bestaat uit de Nederlandstalige Wikipedia (2.0GB), een grote hoeveelheid E-books (6.5GB), een dataset van nieuwsartikels die weliswaar nog van 2007 dateert (2.9GB) aangevuld met artikels van andere nieuwswebsites (2.1GB). Na het wegfilteren van duplicaten is dat goed voor een trainingsdataset van 13GB aan Nederlandstalige tekst. Gegeven deze bronnen is het aannemelijk dat hun dataset alvast correcter geschreven Nederlands bevat van een inhoudelijk hogere standaard.
De eigenlijke dataset vonden we na een korte zoektocht niet onmiddellijk terug, dus het is moeilijk de inhoud verder te bekijken – wie weet waar ze ergens beschikbaar zou zijn, mag het steeds laten weten. Het valt alleszins te verwachten dat de inhoud van deze dataset minder problematisch zal zijn op het vlak van persoonlijke gegevens dan OSCAR. Langs de andere kant stelt zich, met een dataset afkomstig van krantenartikels en e-books, misschien wel nog een copyrightprobleem.
Kieskeurig zijn qua trainingsdata heeft weliswaar een keerzijde. Een generatief taalmodel getraind op een selecte dataset is gelimiteerder qua teksten die het kan produceren. Tekstfragmenten die lijken op sociale-media-posts zullen moeilijk gegenereerd kunnen worden door een model dat niet getraind werd op data afkomstig van sociale media, en een hoge aandeel e-books leidt ook tot prozaïscher teksten. Tot slot maakt het groot aandeel van oudere nieuwsartikels ook dat het getrainde model teksten “uit die tijd” zal produceren, en relatief minder woordenschat en zinswendingen kent over recente trends, technologische uitvindingen of politieke ontwikkelingen.
Conclusie
We hebben hier slechts één Nederlandstalige dataset onder de loep genomen, maar het spreekt voor zich dat dezelfde problemen zich stellen in gelijkaardige datasets voor andere talen.
Het valt op dat enkele eenvoudige filters, bijvoorbeeld om emailadressen, rekeningnummers, persoonlijke profielinformatie of andere persoonsgegevens te detecteren, al een heel deel van deze problematische inhoud zouden kunnen wegfilteren. Een sluitende garantie geven dat er niets fouts meer voorkomt is haast onmogelijk in datasets van deze grootteorde, maar hier hebben we toch kunnen illustreren dat er soms wel érg weinig moeite gedaan lijkt te zijn om de datasets een beetje op te schonen.
Propere datasets maken, deze inhoudelijk onderzoeken en daarbij in de diepte graven, kost natuurlijk tijd en moeite – enkel om problematische stukjes weg te vijlen die in hun geheel maar een klein deeltje uitmaken van de hele dataset, wat dus waarschijnlijk ook maar een kleine impact zou hebben op het daaruit resulterende taalmodel. Het is moeilijk hard te maken dat zulk monnikenwerk zich economisch terugverdient, en garanties dat je effectief alles verwijdert zijn er evenmin.
Toch is het belangrijk dat er voldoende aandacht geschonken wordt aan de kwaliteit van de onderliggende datasets. Als dat niet werkbaar is vanwege hun grootte, moet je je minstens een idee vormen van de impact van mogelijke onregelmatigheden erin. Een data protection impact assessment is net daarvoor bedoeld, en is in sommige gevallen verplicht.
Het blind hergebruiken van een dataset die je zelf niet hebt samengesteld, is een slecht idee. Dat geldt bij uitbreiding eigenlijk ook voor het indirect gebruik ervan via een derde partij of een externe software-library. Dit is overigens een algemeen advies dat geldt voor elke toepassing van machine learning. Wie beter wil doen en ethiek wat hoger in het vaandel wil dragen, vindt goede startpunten in de paper Datasheets for Datasets en bij initiatieven zoals AI Now.
______________________
Dit is een ingezonden bijdrage van Joachim Ganseman, IT consultant bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.