spamszűrés - első eredmény

Szóval megvan az első használható kód.
Emitt el is érhető: http://www.stud.u-szeged.hu/Nagy.Istvan.16/Main.java (hogy kell rendesen link beilleszteni ide?)
Nos volt vele némi vér izzadás, próbálkoztam mindenfélével. Végül a következő lett:
ha szerepel a levélben a "Return-Path:" kifejelzés akkor ham, egyébként pedig megnézzük, hogy a levélben szerepel-é reveláns szó. Ha igen akkor spam, egyébként ham. A releváns szavak pedig olyan szavak, amelyek legalább 100 szor előfordultak spamben és sose fordultak elő hamben.
Néhány érdekesség: ugyanazt az eredményt értem el ha csak a Return-Path vizsgáltam. Enyhén szólva jó indikátor. Jelenleg a spamek 7% rontja el, hameknek a 0%-t.
Ha csak a relevans szavakat vizsgáltam a spamek 0-1% rontotta el, a relevansszó korláttol függően meg a hamek 60-75%-t. A kettőt még valahogy összekéne jobban illeszteni egy szebb eredmény elérése érdekében.

Jelenleg szimultán programozok, csinálom ezt egy picit, és közben drag and drop-t kéne összedobni valahogy javaScriptben. hülyeség az egész.

Hozzászólások

"(hogy kell rendesen link beilleszteni ide?)"

[code] 

[/code] közé. Valahogy így:

/*
 * Main.java
 *
 * Created on 2007. mĂĄjus 4., 18:10
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package spam;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.TreeMap;

/**
 *
 * @author tyson
 */

...
...

--
trey @ gépház

ha szerepel a levélben a "Return-Path:" kifejelzés akkor ham

Erdekes spameket kaphatsz, nalam pl. egy 1071 levelbol allo spam mintaban 1072x szerepel a 'Return-Path'. En a helyedben leellenoriznem (grep -c ...), hogy valoban igaz-e az a feltetelezes, hogy a spam-ek egyikeben sem szerepel a Return-Path...

Ez a relevans szo dolog sem az igazi, mert ha egy szo/token 100x szerepel a spam-ek kozott, de 2x a ham-ekben, az attol meg nyilvan spamre jellemzo token. Azt meg foleg nem ertem, hogyan fordulhatott elo az, hogy te bar csak a 'spam-only' tokenek eseteben minosited spamnek a levelet, es megis 60-75% fals pozitiv hibad van a relevans szavak alapjan...

Ha ezt sikerult megoldani, akkor a tokenekre bontast is lehet egy kicsit szofisztikaltabban vegezni, arrol nem is beszelve, hogy erdemes token parokat is kepezni a jobb pontossag erdekeben. En azt mondanam, adj egy eselyt valamelyik igazi statisztikai (mert a tied nem az) modszert alkalmazo spamszuronek :-)

ASK Me No Questions, I'll Tell You No Lies

hát igen sok érdekesség van...
a Return-path: dolog teljesen biztos. Én is meglepődtem rajta. Bár fura hogy nálad meg ugye totál más az eredmény...
Persze tudom, hogy nem az igazi, ez csak egy gyenge próbálkozás volt.
"tokenekre bontast is lehet egy kicsit szofisztikaltabban vegezni" valami ötlet erre?
igazi statisztikai módszer, mint pl amit múltkor belinkeltél?

----
Bárcsak...

Megvan az eredmeny, ami eleg erdekes lett.

2x2 kort mentem, es minden esetben a test.zip leveleit vizsgaltam (a test.class-ban levo eredmenyt vettem 100.00%-nak):

I. a train.zip leveleivel tanitva
---------------------------------

A) csak egytagu tokeneket kepezve:

spam: 6619/7445=88.90%
ham: 1545/1555=99.35%
total: 8164/9000=90.71%

B) token parokat is kepezve:

spam: 6616/7445=88.86%
ham: 1542/1555=99.16%
total: 8158/9000=90.64%

II. a test.zip leveleivel tanitva
---------------------------------

A) csak sima tokeneket kepezve:

spam: 7374/7445=99.04%
ham: 1545/1555=99.35%
total: 8919/9000=99.10%

B) token parokat is kepezve:

spam: 7425/7445=99.73%
ham: 1544/1555=99.29%
total: 8969/9000=99.65%

Az eredmenybol megallapithato, hogy a train.zip leveleivel tanitva:

- nem befolyasolja az eredmenyt, hogy kepezunk-e token parokat, vagy sem, egy csomo spam (~11%) mindket esetben atcsuszott
- a fals pozitivok aranyara nem volt hatassal.

Egeszen dramai volt az elteres, amikor a test.zip leveleivel tanitottam, a fals pozitivok aranya ugyanakkora volt, mint az elobb, azonban sokkal tobb spamet megfogott, csak 1% csuszott at, token parok kepzese nelkul, mig a token parok hasznalataval csak 0.27%, az osszesitett pontossag (ham+spam) pedig elerte a statisztikai szuroknel megszokott 99.5% feletti erteket.

A train.zip ill. test.zip levelhalmazokkal valo tanitas kozotti eredmeny a spam felismeres aranyaban ter el, vagy 40x pontossabb az utobbi megkozelites, ami azzal a pozitiv haszonnal is jart, hogy a token adatbazis sokkal kisebb es kevesebb rekordot tartalmaz. Elobbi esetben 1,4M rekord 62MB meretben, mig utobbi esetben 173k rekord 7,4MB meretben.

Btw. a felhasznalt spamszuro a clapf volt.

ASK Me No Questions, I'll Tell You No Lies

semmi. Minnél jobb legyen. ennyi. ;-)
GUI-t majd úgy akarom megoldani, hogy elvileg van már egy kis javas progim, ami több szállon nézegeti a mail postafiokokat, és azzal szeretném a összerakni. majd... mivel ez egy kliens, ezért majd kliensoldalon kell legyen, javaban szeretném csinálni. Platform? mivel java ezért mindegy.

----
Bárcsak...

Pár kérdés:
Milyen nyelven valósítottad meg?

- nem befolyasolja az eredmenyt, hogy kepezunk-e token parokat, vagy sem, egy csomo spam (~11%) mindket esetben atcsuszott
- a fals pozitivok aranyara nem volt hatassal.
Ez érdekes. Nem gondoltam volna. Többen mondták nekem is, hogy próbáljam meg ezt.

Egeszen dramai volt az elteres, amikor a test.zip leveleivel tanitottam, a fals pozitivok aranya ugyanakkora volt, mint az elobb, azonban sokkal tobb spamet megfogott, csak 1% csuszott at, token parok kepzese nelkul, mig a token parok hasznalataval csak 0.27%, az osszesitett pontossag (ham+spam) pedig elerte a statisztikai szuroknel megszokott 99.5% feletti erteket.

Ezt, hogy csináltad? Szal, miért tanítottad a train.zip-re? akkor, mire tesztelted? A kiértékelést, hogy csináltad?

Elobbi esetben 1,4M rekord 62MB meretben, mig utobbi esetben 173k rekord 7,4MB meretben.

logikus, mivel a test.zip jóval kisebb is. Ezeket az adatokat honnan tudod?

Éjszaka terveim szerint nekifutok a clapfnak.
----
Bárcsak...

Milyen nyelven valósítottad meg?

C-ben.

Többen mondták nekem is, hogy próbáljam meg ezt.

Ha a token parokra gondolsz, azt en is javaslom.

Ezt, hogy csináltad? Szal, miért tanítottad a train.zip-re? akkor, mire tesztelted? A kiértékelést, hogy csináltad?

Lehet, hogy felreertettelek :-), de azt hittem, hogy a train.zip leveleivel kell tanitani a szurot, majd az igy elkeszitett adatbazissal a test.zip leveleit kell kategorizalni.

A teszt maga igy zajlott le:

I) tanitas a train.zip leveleivel majd a test.zip leveleinek osztalyozasa
II) tanitas a test.zip leveleivel, majd a test.zip leveleinek osztalyozasa

A token parokkal v. nelkul teszt igazabol csak mellektermek, mert eloszor elbenaztam a tanitast, igy kimaradtak a token parok, majd fixaltam a hibat, es ujra elvegeztem a tanitast es a tesztet. De nem is baj, hogy igy alakult, mert legalabb magamnak is bebizonyitottam meressel, amit azert sejtettem mar azelott is, hogy a token parok jobb eredmenyt adnak.

Ezeket az adatokat honnan tudod?

Megneztem az igy elkeszitett adatbazis meretet es rekordszamat.

Éjszaka terveim szerint nekifutok a clapfnak.

Ok, a legutolso (hamarosan kiadni keszulo) verzio meg nincs kilinkelve, de a http://clapf.acts.hu/clapf-0.3.29.tar.gz cimrol le tudod tolteni, ha a forrast akarod nezegetni, ill. ajanlom meg figyelmedbe a http://clapf.acts.hu/hu/antispam.html oldalt a statisztikai modszer alapjaiert. A tanitast pedig a util/maildir-no-mysql.sh script-tel vegeztem.

Ha tudok valamit segiteni, kerdezz batran :-)

ASK Me No Questions, I'll Tell You No Lies

Kis gond:


spam valószínűség = a token előfordulása a spam üzenetekben / spam üzenetek száma

egy token valószínűsége (pn) = spam valószínűség / (ham valószínűség + spam valószínűség)

Ezután a clapf kiszámítja a legérdekesebb tokenek spam- ill. ham valószínűségét:

spaminess: P = (1-p1) * (1-p2) * .... * (1-pn)

non-spaminess: Q = p1 * p2 * .... *pn

mi van akkor ha a spam valószínűsége 0? Vagyis nem szerepelt a token még spanben. Ekkor a P és a Q szorzat is nulla lesz.

----
Bárcsak...