Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Jak funguje bayesovský antispamový filtr? (1.)

V poslední době získaly mezi antispamovými nástroji silnou pozici tzv. bayesovské filtry. Většina uživatelů tuší, že klasifikují e-mail na základě toho, jaká slova se v něm vyskytují. A že se tato slova naučí tím, že jim uživatel spamy označuje. Toto je však jen obecná představa jejich fungování.

Ve skutečnosti bayesovský filtr funguje na velmi jednoduchém principu. U každého slova, které zná, si pamatuje pravděpodobnost, že e-mail, ve kterém se slovo vyskytuje, je spam. Jak se taková pravděpodobnost spočítá?

Předpokládejme, že máme dvě složky s e-maily. V jedné jsou spamy, ve druhé ne-spamy (hamy). Filtr si obě složky projde a z e-mailů vyextrahuje slova. U každého slova spočte pravděpodobnost, že e-mail s ním je spam (pspam), a to jako podíl „počet spamů, kde se slovo vyskytuje“ ku „počet všech e-mailů, kde se slovo vyskytuje“.

Dále je dobré si uvědomit, že pravděpodobnost, že e-mail je ham (pham), je dána jako „počet hamů, kde se slovo vyskytuje“ ku „počtu všech e-mailů, kde se slovo vyskytuje“. Nebo také jednodušeji jako 1-pspam.

Co uděláme při příjmu e-mailu: Stejným postupem, jaký jsme použili v předchozím kroku, z něj vyextrahujeme slova a pro každé slovo dohledáme jeho pravděpodobnost, že e-mail s ním je spam (pspam). Nyní už je to jen statistika. Podle té zjistíme pravděpodobnost, že e-mail je spam, vynásobením pravděpodobností jednotlivých slov. A totéž pro pravděpodobnost, že je mail ham. Pak obě dvě pravděpodobnosti porovnáme. Pokud je pravděpodobnější, že mail je spam, označíme jej jako spam. Jestliže je pravděpodobnější, že je ham, označíme jej jako ham.

Toto je samozřejmě hodně zjednodušený algoritmus, a jako takový by v praxi nefungoval příliš dobře. Proto se používá algoritmus poněkud upravený. Největší změnou je fakt, že se nepočítají váhy všech slov v dopise, ale jen cca dvaceti až třiceti nejzajímavějších (nejextrémnějších). Tedy takových, jejichž pspam je blízké nule nebo jedničce. Dále se pravděpodobnost jednoho slova počítá jen jednou, i kdyby se v e-mailu vyskytovalo vícekrát. Jaký to má efekt, ukáži dále.

Pokud bychom pravděpodobnosti násobili, vznikla by poměrně malá čísla. Proto se v praxi používá geometrický průměr – vynásobit a poté odmocnit tolikátou odmocninou, kolik členů jsme násobili. Tak se nám výsledek rozprostře po rozsahu od nuly do jedné rovnoměrněji.

Velmi důležitou věcí je rovněž neposuzovat pouze tělo e-mailu, ale také jeho hlavičky. V nich se totiž velmi často skrývá mnoho užitečných informací. Tak lze jednoduše do celého algoritmu zahrnout i servery, přes které e-maily chodí, User-Agenty, jména uživatelů, kteří vám píší, atp.

Nyní ale nastává otázka, jakým způsobem z hlaviček extrahovat slova. Je možné to dělat „naivně“ – stejně jako u těla. Ale lepší je rozlišovat, kde se slovo vyskytuje – poskytne nám to přesnější a citlivější algoritmus. Například slovo „free“ v těle dává, podle databáze antispamu na Centrum.cz, pravděpodobnost 50,4 procenta, že e-mail je spam. To je takřka přesně nerozhodně – takové slovo nám příliš nepomůže. Ale v předmětu zprávy dá slovo „free“ pravděpodobnost 79,6 procenta, že je e-mail spam. A to už je poměrně hodně.

Nicméně nemusí zůstat jen u toho. Jako „slova“ můžeme brát i URL v mailu obsažená. A nebo dokonce různé abnormality – e-mail pouze v HTML, neexistence reverzních záznamů protějšího serveru – prostě věci, které testuje spamassassin. Na rozdíl od něj má ale bayesovský filtr podstatně smysluplnější systém hodnocení, a hlavně fungující zpětnou vazbu.

Ta je jeho silnou zbraní. Počítá se většinou v okamžiku odstranění e-mailu z poštovního programu (MUA). Bylo by samozřejmě možné e-mail přidat do správné složky (podle toho, zda byl označen jako spam, nebo ham) a pak přepočítat pravděpodobnosti podle algoritmu uvedeného výše. Ale to by bylo s narůstajícím počtem e-mailů poněkud náročné na čas a diskový prostor.

Proto se používá vzorec stanovený Thomasem Bayesem, který nám dovoluje „upravit pravděpodobnost jevu ve světle nových důkazů“ (viz Wikipedia). Z mazaného e-mailu se opět vyextrahují všechna slova. Jejich pravděpodobnost v databázi se pak upraví podle toho, zda byl e-mail označen jako spam, nebo jako ham. Právě díky tomuto způsobu zajištění zpětné vazby je zde popisovaný filtr označován jako bayesovský.

V praxi se bayesovské filtry vyznačují velmi vysokou účinností. Není problém mít filtr s účinností kolem 99 procent a chybovostí (false positive rate) pod 0,1 procenta. Této účinnosti je dosaženo právě onou adaptabilitou. Filtr se postupně adaptuje na charakteristiku pošty svého uživatele. Stejně tak se adaptuje i na nové obsahy spamů a postupy využívané spamery.

Spameři se samozřejmě snaží bayesovské filtry obcházet. Ale z toho, že jsou stále účinné, je vidět, že se jim to příliš nedaří. Prvním pokusem bylo používat modifikované tvary slov – například „m0ney“. To však bayesovským filtrům spíše pomáhá. Slovo „money“ se vyskytuje poměrně často i v hamech. Ale „m0ney“ se tam vyskytne opravdu zřídkakdy. Dalším „opatřením“ spammerů je rozdělování slov. Výsledek je podobný, neboť se do slovníku rychle dostanou fragmenty rozdělených slov.

Stejně tak přidávání „normálního“ textu (zprávy atp.) ke spamu není příliš efektivní. Slova v něm budou mít hodnocení kolem 0.5 a nejspíš tedy, díky braní v úvahu pouze „zajímavých“ slov, do konečného hodnocení vůbec nezasáhnou. Spammeři by se museli trefit do slov, která se často vyskytují ve vaší nespamové poště. Jelikož je ale databáze individuální pro každého příjemce spamu, a spammeři ji neznají, je to nemožný úkol. Pokud je takovýto „normální“ text navíc (v HTML) extra malým písmem, bíle na bílém pozadí atp., spammeři jen usnadňují identifikaci spamů, protože toto jsou prvky, které se v hamech skoro nevyskytují.

Kontakty? Setkání? Předplaťte si celoroční členství v NetClubu

Chcete být v centru dění, v internetové komunitě? Setkávat se s těmi, jejichž názory hýbou českým internetem? Předplaťte si členství na každoměsíčním setkání NetClubu a potkávejte se s zajímavými lidmi. Bližší informace zde

Letošní druhý NetClub proběhne v únoru s Erikem Taberym, šéfredaktorem časopisu Respekt, který lidé buďto milují, nebo nenávidí. 

       

Jedinou metodou, která má alespoň minimální účinnost, je kombinace „normálního“ textu s tím, že spam je celý v obrázku a je odkazem jinam. Ale i tam se dobře napsaný bayesovský filtr může chytit na URL a na fakt, že e-mail má v sobě obrázek a ten je odkazem jinam. Rovněž v takovýchto případech hodně pomáhají hlavičky. Spam se z nich dá poznat podle přítomnosti/nep­řítomnosti různých položek, podle serverů, přes které e-mail šel, podle odesílatele, a především podle předmětu, do kterého se obrázek dát nedá a který přitom musí zaujmout.

O bayesovských filtrech by se toho dalo napsat ještě mnohé; tento článek byl pouze lehkým úvodem do problematiky. Pokud by to někoho zajímalo, mohu napsat jeho další pokračování.

Anketa

Kolik spamu denně Vám bayesovské filtry pustí?

       

Michal Kára

Autor je konzultant a programátor na volné noze. Úzce spolupracuje s portálem Centrum.cz, především v oblasti e-mailu – je autorem antispamu a pozadí gigabajtového e-mailu.

Školení Google+ pro firmy

DW - Školení PPC
  • Jak využít Google+ pro firemní komunikaci a marketing.
  • Čím se liší Google+ od Twitteru a Facebooku z pohledu firemního využití.
  • Jak využít Google+ v souladu s pravidly užívání.
  • Založení Google+ Page (Stránky) krok po kroku, včetně praktických tipů.

Detailní informace o školení Google+ »

Přehled názorů

hura
Pizi 24. 2. 2005 08:00
Nový
Pěkné
LK 24. 2. 2005 08:03
Nový
└ 
Re: Pěkné
Honza D 24. 2. 2005 08:08
Nový
 
└ 
Re: Pěkné
Petr 24. 2. 2005 08:52
Nový
 
 
└ 
Re: Pěkné
Jan Šimek 24. 2. 2005 10:50
Nový
 
 
 
└ 
Re: Pěkné
David Nebeský 24. 2. 2005 11:12
Nový
 
 
 
 
└ 
Re: Pěkné
bln 24. 2. 2005 12:13
Nový
 
 
 
 
 
└ 
Re: Pěkné
martink 24. 2. 2005 12:31
Nový
 
 
 
 
 
 
└ 
Re: Pěkné
Melkor 24. 2. 2005 12:38
Nový
 
 
 
 
 
 
 
└ 
Re: Pěkné
Milan 24. 2. 2005 13:37
Nový
 
 
 
 
 
 
 
 
└ 
Re: Pěkné
Leo 24. 2. 2005 14:00
Nový
 
 
 
 
 
 
 
 
 
├ 
Re: Pěkné
dgx 24. 2. 2005 15:43
Nový
 
 
 
 
 
 
 
 
 
│
└ 
Re: Pěkné
Eso 24. 2. 2005 16:20
Nový
 
 
 
 
 
 
 
 
 
└ 
Re: Pěkné
lukas 24. 2. 2005 17:24
Nový
 
 
 
 
 
 
 
 
 
 
└ 
Re: Pěkné
smal 24. 2. 2005 18:51
Nový
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: Velmi dobré a srozumitelné
TobiasDeVil 25. 2. 2005 08:05
Nový
 
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: Velmi dobré a srozumitelné
Martin 26. 2. 2005 20:27
Nový
Naivní
lzap 24. 2. 2005 08:23
Nový
└ 
Re: Naivní
Michal Kára 24. 2. 2005 09:21
Nový
Trikrat hura
daymoon 24. 2. 2005 09:02
Nový
└ 
Re: Trikrat hura
Radek 25. 2. 2005 11:13
Nový
 
└ 
Re: Trikrat hura
krokodyl 25. 2. 2005 15:35
Nový
 
 
└ 
Re: Trikrat hura
gumbo 17. 3. 2005 01:08
Nový
Článek je výborný
Zafik 24. 2. 2005 09:46
Nový
Opravdu dobrý článek ...
hodhot 24. 2. 2005 09:58
Nový
SA, Bayes a bludy
Yeti 24. 2. 2005 11:31
Nový
└ 
Re: SA, Bayes a bludy
Michal Kára 24. 2. 2005 12:13
Nový
 
├ 
Re: SA, Bayes a bludy
oozy 24. 2. 2005 13:20
Nový
 
│
└ 
Re: SA, Bayes a bludy
Michal Kára 24. 2. 2005 13:32
Nový
 
└ 
Re: SA, Bayes a bludy
jkt 24. 2. 2005 19:13
Nový
 
 
└ 
Re: SA, Bayes a bludy
Michal Kára 24. 2. 2005 21:47
Nový
 
 
 
└ 
Re: SA, Bayes a bludy
jkt 25. 2. 2005 16:18
Nový
 
 
 
 
└ 
Re: SA, Bayes a bludy
Michal Kára 25. 2. 2005 16:43
Nový
A co ohebne jazyky?
Honza 24. 2. 2005 15:11
Nový
├ 
Re: A co ohebne jazyky?
LK 24. 2. 2005 15:14
Nový
│
└ 
Re: A co ohebne jazyky?
Martin Kalenda 24. 2. 2005 18:27
Nový
├ 
Re: A co ohebne jazyky?
Michal Kára 24. 2. 2005 15:27
Nový
│
└ 
Re: A co ohebne jazyky?
Honza 24. 2. 2005 17:44
Nový
│
 
└ 
Re: A co ohebne jazyky?
Michal Kára 24. 2. 2005 17:55
Nový
│
 
 
└ 
Re: A co ohebne jazyky?
Honza 24. 2. 2005 18:11
Nový
│
 
 
 
└ 
Re: A co ohebne jazyky?
Michal Kára 24. 2. 2005 18:28
Nový
└ 
Re: A co ohebne jazyky?
dgx 24. 2. 2005 15:49
Nový
 
└ 
Re: A co ohebne jazyky?
mike 24. 2. 2005 22:10
Nový
 
 
├ 
Re: A co ohebne jazyky?
TS 25. 2. 2005 00:30
Nový
 
 
└ 
Re: A co ohebne jazyky?
Michal Kára 25. 2. 2005 07:32
Nový
 
 
 
└ 
Re: A co ohebne jazyky?
Vit Sindlar 25. 2. 2005 09:56
Nový
 
 
 
 
└ 
Re: A co ohebne jazyky?
Michal Kára 25. 2. 2005 10:18
Nový
 
 
 
 
 
└ 
Re: A co ohebne jazyky?
Vit Sindlar 25. 2. 2005 13:51
Nový
 
 
 
 
 
 
└ 
Re: A co ohebne jazyky?
Michal Kára 25. 2. 2005 14:58
Nový
Vice informaci
Ondřej Surý 26. 2. 2005 00:50
Nový
Proč "bayesovský" - jako kávovský?!
houba 27. 2. 2005 21:38
Nový
└ 
Re: Proč "bayesovský" - jako kávovský?!
Michal Kára 27. 2. 2005 21:57
Nový
 
└ 
Re: Proč "bayesovský" - jako kávovský?!
Ondřej Surý 2. 3. 2005 12:14
Nový
 
 
└ 
Re: Proč "bayesovský" - jako kávovský?!
Michal Kára 2. 3. 2005 12:18
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem