Twee jaar geleden maakte Twitter gedwongen excuses voor een ‘racistisch’ Artificial Intelligence-algoritme dat ze gebruikten voor foto’s. Dit algoritme maakte automatisch een uitsnede van het belangrijkste deel van je foto. De bedoeling was het gezicht naar voren te halen. Mooi bedacht en bij foto’s van 1 persoon werkte dit prima. Echter, bij foto’s met meer mensen ging het mis. Het Artificial IntelligenceI-algoritme koos consequent voor de personen met een blanke huidskleur en nooit voor iemand met een andere gelaatskleur. Gebruikers creëerden verschillende soorten testen. Mensen verder of juist dichter bij elkaar, een bekende donkere persoon naast een onbekende blanke met dezelfde uitkomsten. Steeds opnieuw werden enkel de witte gezichten er uitgesneden. Twitter gaf aan dat het model vooraf getest was op dergelijke vooroordelen. Blijkbaar waren deze testen niet goed genoeg om deze cruciale fout eruit te halen.
Kwaliteitsniveau Machine Learning modellen
In de moderne wereld maken steeds meer bedrijven gebruik van Artificial Intelligence. Specifieke Machine Learning (ML) modellen moeten het gedrag van gebruikers voorspellen en binnenkomende data automatisch categoriseren. Aangezien deze modellen meer en meer ons leven gaan beïnvloeden, is het ook steeds belangrijker dat deze modellen van goede kwaliteit zijn. Bij het ontwikkelen van een model wordt hieraan ook zeker aandacht besteed. Niet voor niets spreekt men over het trainen van een model. Tevens is veel aandacht voor het onderzoeken en cureren van de data waarop het model getraind wordt. Echter, in de data kunnen fouten zitten die je er met het blote oog niet uithaalt. Ook nadat een model in productie is genomen, is regressie tegengaan lastig bij de uitrol van nieuwe versies.
In de traditionele softwareontwikkeling zijn er al allerlei standaarden en manieren voor een goed testproces. Hierover is veel informatie te vinden online, in talloze boeken en zijn er cursussen om te volgen. Hoewel dit nog steeds in ontwikkeling is, biedt het een solide basis om als professional mee aan de slag te gaan.
Vaktermen met verschillende betekenissen
In de wereld van Artificial Intelligence is dit anders. Het probleem begint vaak al doordat binnen bedrijven aparte afdelingen bezig zijn met AI / ML. Ze zijn niet altijd onderdeel van het normale softwareontwikkelproces binnen het bedrijf, maar meer experimentele afdelingen.
Bij een grote Nederlandse bank waar ik werkte, werd een dergelijk AI team opgericht. Ze trokken allemaal data scientists aan, maar vervolgens wist men niet goed wat die precies moesten gaan doen. De bank had niet direct een doel voor dit AI team, maar wilden in ieder geval niet de boot missen als AI een dominante factor in de markt zou worden.
Vaak komen de mensen die betrokken zijn bij het ontwikkelen van software uit andere vakgebieden dan zij die werken aan Artificial Intelligence modellen. Die hebben een achtergrond in de mathematica of fysica. Hierdoor zijn binnen beide vakgebieden (AI vs Softwareontwikkeling) dezelfde termen in gebruik, maar met een totaal andere betekenis. Performance bijvoorbeeld gaat binnen de ML wereld over de statistische prestaties van het model; welke foutmarges, vals positieven of vals negatieven brengt het voort. Oftewel wat is de kwaliteit van het model in zijn voorspellingen. In de traditionele testwereld gaat performance over de snelheid van een applicatie onder verschillende omstandigheden.
Een ander voorbeeld is een Feature. Binnen de ML wereld is dat een karakteristieke variabele op basis waarvan de voorspellingen gedaan kunnen worden, zoals de kleur van een gedeelte van een foto. In de gewone testwereld betekent Feature een bepaald stuk functionaliteit van de applicatie. Bijvoorbeeld het feit dat je kan inloggen in de applicatie met behulp van een gebruikersnaam en wachtwoord.
Onvoorspelbare uitkomsten
Terechte vraag is: waarom gebruiken we niet alle standaarden en manieren van werken die we al kennen van softwareontwikkeling, voor het testen van ML modellen? In sommige opzichten gebeurt dit al wel. Bijvoorbeeld bij het gebruik van versioneringsystemen. Hiermee kan je teruggaan naar eerdere versies van het model. Ook kunnen experts, de uiteindelijke eindgebruikers, een oordeel vellen over de voorspellingen. Echter, hierbij komt wel een groot verschil en daarmee ook een probleem naar boven (wel bekend als het oracle of test probleem).
Het principe van AI of ML is dat de machine zelf met antwoorden komt die niet direct te voorspellen of voor de hand liggend zijn. In een traditioneel softwareontwikkelproces spreek je van tevoren, als het goed is, duidelijke requirements af waaraan het product moet voldoen. Daarnaast zijn er nog allerlei standaarden op het gebied van performance en security die je vrij precies kunt testen. Vooraf ligt dus vast waaraan het systeem moet voldoen en dit vink je vervolgens af.
Bij een ML model stel je vooraf ook verwachtingen en doelen op, waarop je gaat selecteren. Het ingewikkelde is alleen dat het veel moeilijker is om vast te stellen of een voorspelling echt goed of fout is. Dit levert het volgende probleem op, want software testen gaat in hoge mate over vertrouwen. De zekerheid dat het testen bepaalde fouten in de software aantoont. Doordat het voor ML modellen lastig te voorspellen is wat de uitkomst moet zijn, is dit vertrouwen veel moeilijker te verkrijgen.
Gebrek aan praktijkvoorbeelden
Gelukkig zijn er wel wat manieren om ML modellen te testen. Dit blijft echter vooral beperkt tot theoretische voorbeelden en hierin mist nog kennis uit de praktijk. Een aardig praktijkvoorbeeld is hier beschreven. De ontwikkelde library werkt voor bestaande Natural Language Processor (NLP) modellen. Het doel van deze modellen is de geschreven tekst te begrijpen en daaruit de kern te halen. Inclusief de scores over hoe krachtig of positief of negatief een bepaalde tekst is. De methodologie genereert zinnen en stukken tekst voor het model om te analyseren. Door daaraan vervolgens stukjes tekst toe te voegen of te veranderen ontstaat een voorspelling wat voor effect dit op de analyse gaat hebben. Zo behoort het veranderen van de namen van personen in de tekst (mannelijk naar vrouwelijk) niet tot verschillen te leiden. Het toevoegen van negatief geladen zinnen daarentegen moet juist wel een negatiever sentiment geven.
Waarschijnlijk had het debacle van twitter voorkomen kunnen worden. Door standaard een aantal testgevallen te maken van foto’s met daarop mensen van verschillende etniciteit. Wel blijft het onmogelijk een testset te bedenken met alle mogelijke foto’s die het systeem in de praktijk gaat tegenkomen.
Kwestie van tijd
Er valt dus nog een hoop te verbeteren en ontwikkelen in de Artificial Intelligence wereld. ML bevindt zich op dit moment nog voornamelijk in een experimenteerfase, maar wordt al wel veelvuldig toegepast. Des te belangrijker dat daarvoor goede kwaliteitsnormen komen. Het is nu nog wat vaag wat bedrijven daar precies voor doen. Er zijn niet echt duidelijke standaarden voor, zoals die in de traditionele softwareontwikkeling wel te vinden zijn. Mijn overtuiging is dat die er wel gaan komen. Daarvoor gaan de ontwikkelingen te hard en is dit een te belangrijk vakgebied.
Matthias Coosen