Ha a szoftverteszteléssel kapcsolatban szóba kerül a mesterséges intelligencia, a robotok, vagy a gépi tanulás, általában arról folyik a diskurzus, hogy milyen módon lehet ezekkel a technológiákkal felgyorsítani és hatékonyabbá tenni a tesztelés folyamatát. Legalább ilyen érdekes azonban az is, hogy miként lehet tesztelni magát a mesterséges intelligenciát, illetve az azt alkalmazó szoftvereket. Hogyan szűrjük ki a torzításokat?
Nagyon leegyszerűsítve a kérdést: hogyan döntsük el egy válaszról, hogy helyes-e?
Ez a felvetés egyrészt a funkcionális tesztelés új módszerei felé mutat, de a tesztelők egy ennél nagyobb problémával is szembesülnek: megjelenik a kognitív torzítás. Az a jelenség, amikor egy alkalmazás azért működik rosszul vagy legalábbis szuboptimálisan, mert egy rendszerszintű eltérés az adatfeldolgozásban a valós viszonyokkal inkonzisztens eredményhez vezet. Ez nem egy egyszerű bug, az ugyanis egy könnyen felismerhető és mérhető hiba, melyet jellemzően egy kód megváltoztatásával meg lehet szüntetni. A torzítás sokkal alattomosabb, és e minőségében teszttel is nehezebb tetten érni.
Nézzük, miért kell mégis tesztelni a mesterséges intelligencia torzítását, és hogyan érdemes csinálni.
Mi okozza a torzítást?
Röviden: az adatok. A mesterséges intelligencia rendszereket egy adott területről gyűjtött adatokkal tanítják. Még ha az adattömeget objektív szempontok alapján vagy akár tudományos módszerekkel gyűjtötték, akkor is torzíthatnak. 2016-ban, például, az Amazon arra készített fel egy botot, hogy az internetet pásztázva találjon potenciális jelölteket IT-s pozíciókba. A tanításhoz a cég munkatársainak önéletrajzát használták. Csakhogy mivel a stáb zöme férfiakból állt, a program ebből értelemszerűen azt tanulta meg, hogy a jó IT-sok férfiak. Az Amazon végül nem is tudta kiküszöbölni ezt a torzítást, és kénytelen volt felhagyni a bot használatával.
Hasonlóképpen, széles körben ismertek azoknak a kereskedelmi célokra használt arcfelismerő rendszereknek az esetei, amelyek nagyon gyengén teljesítenek a sötétebb bőrszínű arcokkal, pusztán azért, mert döntően világos bőrűeket ábrázoló képekkel tanították őket. Szintén mesterséges intelligencia alapú, hibásan működő rendőrségi arcfelismerők miatt kerültek már letartóztatásba ártatlan emberek, és az sem meglepő, hogy a hitelbírálatra használt rendszerek a bevitt adatok torzítása miatt elfogultak az alacsonyabb jövedelmi helyzetű környéken lakókkal szemben. Nem szólva arról, amikor egy elvileg bőrszínre “vak” mesterséges intelligencia által zsűrizett világméretű kísérleti szépségverseny alakult úgy, hogy szinte az összes helyezett fehér ember lett.
Nem nehéz belátni, hogy ha ilyen történik, az rombolja az érintett szervezet hitelességét, és ha piaci szereplőről van szó, ez pénzben mérhető károkat okozhat.
A mesterséges intelligencia torzítás fajtái
A torzítás alapvetően háromféle lehet:
Látens – téves összefüggések felállítása. Például találhatunk valamilyen korrelációt az iskolázottság és a jövedelem szintje között, amíg ki nem derül, hogy ez a kapcsolat csak látszólagos, a valódi kauzális változó az intelligencia.
Adatgyűjtési – rossz vagy a területet nem jól leképező adattömeg. Az is előfordulhat, hogy az adat valaha megfelelő volt, de a tárgykör időközben annyit változott, hogy már nem az.
Interakciós – ez akkor üti fel a fejét, ha egy alkalmazás működését külső hatás torzítja el. Például a Microsoft által fejlesztett Twitter-chatbot, a Tay más Twitter-felhasználókkal való kommunikáció révén tanult, de mivel közülük sokan rosszhiszeműek voltak, rasszistának és szexistának nevelték. A Microsoft 24 órán belül kénytelen volt lekapcsolni.
A torzítás tesztelése
Mi következik mindebből a tesztelőkre nézvést? Mindenekelőtt azt kell figyelembe venni, hogy az ilyen alkalmazások tesztelése nagyban különbözik a hagyományos szoftverekétől. Az utóbbi lényegében azt jelent, hogy elemezzük a követelményeket, amelyek meghatározzák, hogy adott inputokra mi a helyes válasz.
Egy mesterséges intelligencia alkalmazás esetében azonban a követelmények nem ennyire egyértelműek. Nem mindig világos, hogy adott input esetén pontosan mi kell, hogy legyen az output. A jól definiált kimenet helyett inkább egy sejtésünk, becslésünk van. Amikor egy ember felismer egy arcot, az ítélete nem feltétlenül tökéletes, így az erre alapozott adatainkban is lesznek bizonytalanságok. A tesztelés során alkalmazott követelményeket tehát nem lehet abszolút értékekkel kifejezni. Az esetek többségében a legjobb, amit tehetünk, hogy egy ésszerűnek tűnő eredményt várunk, standard hibaszórással.
Tesztesettenger
Rengeteg tesztesetre van szükség, melyek összessége teljesen lefedi a problématerületet. A tanításra használt adatokból kiindulva, a tesztelőknek először biztos alapot kell teremteniük minél egyértelműbb, evidens inputokkal, ahol az eredmények megfelelnek a józan paraszti ész követelményeinek, és helyesnek is tűnnek. Aztán jöhet a szintén nagyszámú határeset, ahol az elvárható eredmény egyáltalán nem olyan kézenfekvő. “Vajon egy ember is hasonló döntést hozna? Miért?”
A tesztelőknek meg kell érteniük az alkalmazás architektúráját, a döntési folyamatok modelljét, és a használt adatok minőségével is tisztában kell lenniük. Gyakori probléma, hogy egy alkalmazást túlságosan a betanításához használt adattartományra specializálnak, ezért a tesztelés során ugyan remekül működik, azon túl viszont nem. Papíron rendben van, a való életben meg torzít.
Ez alapvetően az adatokra vezethető vissza, a tesztelőknek tehát tesztelniük kell az adatokat, hogy meggyőződjenek róla: azok precízen és maradéktalanul tükrözik a problématerületet. Ehhez egyrészt a józan eszükre lesz szükség, másrészt arra, hogy feltérképezzék a terület jellemzőit az adattartományon belül. Ez nem egy egzakt tudomány, de nagy szakértelmet igényel.
Megbarátkozni a bizonytalannal
Bármely szoftver torzíthat. Egy londoni doktornővel esett meg, hogy az okoskártyájával nem tudott bejutni a fitneszterem öltözőjébe. Kiderült, hogy a szoftveres csapat a “doctor” szót hímneműként kódolta, ezért a rendszer csak a férfiöltözőbe akarta beengedni őt. Egy hagyományos alkalmazásnál az ilyen hibák könnyen azonosíthatók és javíthatók. Egy mesterséges intelligencia-alkalmazás esetében számot kell vetnünk azzal, hogy nincs mindenre biztos válasz. Sok múlik persze az adott területen is: egy termékeket ajánló hirdetési rendszernél nem élet-halál kérdése a pontosság, egy önvezető járműnél viszont az.
A hibák kijavítása pedig általában több, mint egyszerű kódcsere. Előfordulhat, hogy az alkalmazás teljes architektúráját újra kell gondolni vagy új adatkészletre lesz szükség a betanításhoz. Ez lényegében a munka elölről kezdését jelenti, amihez senkinek sincs nagy kedve. De újrakezdeni szinte mindig jobb döntés, mint kiadni a kezünk közül egy torzításokkal működő alkalmazást.