A szöveg-kategorizálás olyan terület, melynek rengeteg igen hasznos gyakorlati felhasználása lehet: internetes keresés, ügyfélszolgálati munka gyorsítása, könyvtári munka hatékonyabbá tétele, nyelvoktatás, egyetemi szféra, orvosi és jogi szövegekből új adatok kinyerése... Az ilyen programok megalkotása során a fő kérdés, hogyan lehet lehetőleg minél egyszerűbb, gép által hatékonyan feldolgozható szövegértelmezési elveket alkotni. Ebben az írásban egyszerűbb példák megoldása során alkalmazható módszerekről lesz szó.
A genre-classification (műfaj-kategorizálás), autorship-identification (szerző-meghatározás) és a sentiment analisys (érzelem-elemzés) klasszikus kategorizálási feladatok: egy populációban (vagyis rendszerezendő szövegekben) fel kell kutatni ismérveket, melyek alapján aztán szét tudjuk válogatni a populáció tagjait. Ez egy tipikus statisztikai megközelítés, ami, a látszat ellenére, eltér az emberi elme megközelítéséről. Ha saját magunk akarjuk eldönteni egy szövegről, hogy az “szomorú-e vagy sem”, nem biztos, hogy jól meghatározott ismérvek előfordulását fogjuk keresni, hanem az általános, intuitív benyomásainkra hagyatkozunk inkább; és egy szöveg szerzőjének meghatározásakor is számos, egzakt módon csak nehezen leírható ismérv kapcsolódik be a játékba.
A szövegkategorizálás gépi erővel történő megoldása során elég nehéz volna megfelelő módon modellezni az emberi interpretáció folyamatát – már ha ez egyáltalán lehetséges. Ezért ehelyett olyan módszerekre van szükség, melyek viszonylag könnyen formalizálhatók, és az sem nagy baj, ha kissé számításigényesek – gépidő és memória általában rendelkezésünkre áll.
Az igazi kérdés tehát az, mi alapján lehet hatékony módon különbséget tenni a szövegtípusok között? Ezt nagymértékben befolyásolja a feladat és a szövegkorpuszunk. Az érzelem-elemzés esetében például igencsak jó megoldásnak tűnhet az érzelmeket kifejező szavak előfordulásának figyelése – egy filmkritika, melyben gyakori a “rettenetes” vagy a “nézhetetlen” szó előfordulása, valószínűleg egy negatív elemzői beállítottsággal született.
A szerző-meghatározás esetében már kicsit bonyolultabb a feladat – természetesen jó lehet a “jellemző” szavak, esetleg fordulatok figyelése, de nagyobb korpuszoknál ez kivitelezhetetlenné válhat. Ezen kívül, míg a az érzelmek esetében az érzelmeket kifejező kulcsszavak szignifikánsan visszatérhetnek, a szerzőknél ezt nagyban befolyásolja a szöveg témája. Például, Dosztojevszkij számos műve játszódik Péterváron, így jó ötletnek tűnhet a várossal összefüggő toponímákra való keresés, ám ez a módszer kudarcra van ítélve például a szibériai száműzetés élményét feldolgozó Feljegyzések a holtak házából c. műnél.
A műfaj-kategorizálás ismét egy kicsit más probléma, hiszen itt tematikus, vagyis kulcsszavakkal leírható hasonlóságok előfordulhatnak (a parlamenti tudósítás műfajához például jó kulcsszó a “képviselő” és a “interpelláció”), viszont itt nyelvi-stilisztikai eltérésekkel kell számolni a különböző szerzők miatt.
Az is valószínű, hogy minél bonyolultabb a feladat, annál differenciáltabb nyelvi elemzésnek kell alávetni a szöveget. Míg egy mozi-kritika feldolgozó rendszert (erre látható példa az NLTK könyvben is) egyszerű kulcsszó-szűréssel el lehet készíteni, differenciáltabb, kevésbé jól látható műfaji nüanszokra érzékeny vagy egymáshoz közel álló szerzők közi különbségtételre képes program létrehozásához valószínűleg be kell vonni lexikai, morfológia és szintaxikai szinteket is.
A probléma tehát abban rejlik, hogyan hozzuk létre azokat a jellemzőket (feature-space), amelyekkel jellemezhetünk egy szöveget. Álljon itt két lehetséges példa.
Kiválogattam az Édes Anná-ból (Kosztolányi), A szamárbőr-ből (Balzac) és a Micimackó-ból (Milne) 10-10-10, egy-két oldalas darabot. Az alábbi grafikonon a szakaszokra jellemző átlagos mondathossz (szó/mondat) látható; általánosságban elmondható, hogy ez A szamárbőrnél a legnagyobb, és a Micimackónál a legkisebb. Ez, úgy tűnik, hogy nem tökéletes ismérv, hiszen vannak olyan darabjai a Micimackó-nak, melyben az az érték meghaladja az Édes Anna egyes helyeire jellemző értéket; és az Édes Anna átlagos mondathossza is eléri helyenként A szamárbőr legalacsonyabb értékeit. Érdekes tehát ez az ismérv, ám nem jellemzi egyértelműen a szövegeket
Egy olyan összetett ismérvhalamzt érdemes létrehozni, amely kellőképpen egyedi minden szövegre, emellet az sem zavarja, ha van némi átfedés egyes szövegeknél. Erre a legegyszerűbb eljárás a szóelőfordulás vizsgálata. Szerencsére ezzel nem kell fáradnunk, elég, ha egy egyszerű függvénnyel létrehozzuk a szövegre jellemző jellemző-vektort; a kiértékelésnél pedig használhatjuk NLTK bayes-osztályozó algoritmusát (ez ugyanaz az eljárás, amit a szófajelemzőnél is használtam). A szóelőfordulások (unigrammok) vizsgálatával kapcsolatban két probléma lehet: hosszú szövegek esetében óriási vektorok jönnek létre; illetve, a szavak nagy része valószínüleg nem csak az adott szövegre, hanem az egész nyelvre is jellemző, így valójában felesleges vele foglalkozni. Ennek több megoldása is lehet, én kísérletemben unigrammok helyett bigrammokat (szópárokat) számoltam, ezek közül is csak az egynél többször előfordulókat. Ezzel visznylag kicsi vektorok jöttek létre (kb. 10 kilobájtos szövegek estében 10-15 elem), melyek még mindig kellőképpen reprezentatívak voltak, és a program is gyors maradt (ez akkor lehet fontos, ha kis részletek helyett például Dosztojevszkij teljes életművén szeretnénk hasonló vizsgálatokat végezni). A bigramm-előfordulás alapján történő osztályozás olyannyira hatékony, hogy három-három tanuló szöveg alapján kb. 90 százalékos pontossággal képes volt megmondani az osztályozó egy új részletről, hogy mely műből származik.
A témával kapcsolatos olvasnivaló:
Nincsenek megjegyzések:
Megjegyzés küldése