Uncategorized

Alkotói válság

A spam könyvben a teszteknél járok, ahol ráengedem a 2007-es levelezésemet – cirka 25k levél – különféle termékekre, és megnézem, mit tudnak kezdeni azokkal. Magam is fejlesztek egy spamszűrőt, így adódik, hogy miért ne dobnám be a clapf-ot is a nagy kalapba? Hogy referencia is legyen, először azt néztem meg, hogy mit tud a bogofilter.

A tesztet a következőképpen végeztem: megfeleztem a ham és a spam leveleket (jan-jún, ill. júl–dec). Az első ham ill. spam halmazzal tanítottam a bogofilter-t, míg a második 2 halmazzal teszteltem. A bogofilter nagyon jól helyt állt: 5399 levélből 14-et kategorizált tévesen fals pozitívként (99.74%), ill. 9055 spam levélből 113-at nem ismert fel (98.75%). Ezek a számok nagyon jók ahhoz képest, hogy a szűrőt gyakorlatilag fél évre magára hagytam, és nem tanítottam tovább. Már itt szeretném megjegyezni, hogy ez nem túl életszerű. Egy igazán reális teszt során a fals pozitívkat “másnap” korrigálni kellett volna, ill. menet közben is tanítani lehetett / kellett volna az új levelekkel, ill. az elavult tokeneket törölni. Azért döntöttem mégis egy ilyen metódus mellett, hogy a) bizonyítsam a statisztikai szűrők sokkal jobbak az egyéb megoldásoknál, b) leegyszerűsítette a tesztet.

Ezután jött a Nagy Clapf Teszt, hogy lássam, mire képes hasonló környezetben (fél évig nincs további tanítás) a saját programom? Hát majd leestem a székről, és nem azért, mert olyan jó eredmények születtek. Az ok, hogy csak 11 levelet ismert fel fals pozitívként, de 308 spam levelet nem ismert fel. Először arra gondoltam, hogy biztos azért, mert nem tanítottam spammel fél éven át, ami a spam lassú(?) változása miatt szükségszerűen erodálja a pontosságot.

De a bogofilter-rel összevetve rájöttem egy bug-ra. Bár a clapf is khi-négyzet algoritmust használ a statisztikai
összegzésre, de én csak a legérdekesebb 15 tokennel végeztem el az összegzést (bayes-i módra), holott egy bizonyos érdekesség fölött minden tokent figyelembe kellett volna vennem. A bogofilter-ben egy kicsit jobban elmélyedve azt is jó volt felfedezni, hogy ők más rob_s és (egy kicsit más rob_x) értéket használnak (ez 2 konstans érték a számításban). Így átvettem az ő default értékeiket, rob_s = 0.0178 és rob_x = 0.52. Ennek hatására jobb lett a spam felismerés aránya, de megnőtt a fals pozitívok száma, ami viszont rossz. Csomó teszt után úgy döntöttem, megmaradok a rob_s = 0.1 értéknél.

Végül a clapf 18 jó levelet jelölt meg spamként 5399-ből (=99.66%), és csak 63 spamet nem ismert fel a 9055-ből (99.30%). Szóval nagy kő esett le, alkotói válságnak vége, és már nem szégyellem a clapf eredményeit is megmutatni a könyv lapjain. Még annyit módosítottam a clapf-on, hogy a képes leveleket csak akkor jelöli meg spamként, ha a valószínűségük nagyobb 0.5-nél, így kevesebb fals pozitívom lett. Végül a clapf képes feketelisták eredményét is felhasználni, teszteltem az elszalasztott spameken is, de azok a fránya IP-címek nem szerepeltek, így ebben a tesztben ez a feature nem növelte a spam felismerés eredményét.

Ja, az összes teszttel még nem vagyok kész, de egy ilyen kellemetlen tesztelés után is még mindig a 2 statisztikai szűrő vezeti a mezőnyt.