DeepSpam v0.3 release - uj tokenizalo, uj dataset/model

Fórumok

Elkeszult az FSF.hu altal tamogatott neuralis halos spamszurom uj verzioja...

uj model: http://thot.banki.hu/deepspam/model_big_v3/

sokkal tobb, tobbszorosen ellenorzott mintabol epitve:
36172 mail.neg
45139 mail.pos
81311 total

uj milter: http://thot.banki.hu/deepspam/milter-v0.3/
vagy online teszteleshez postfix/main.cf-be: smtpd_milters = inet:193.224.38.187:1080

Changelog v0.3:
================
- html parser atirva, jobban kezeli az extrem eseteket
- kodlap kezeles javitasok, pl. hibas utf8...
- tokenizalas modositva, anonimizalja a cimeket (email/url), szamokat
emiatt javasolt az uj model (v3) hasznalata, mert az mar az uj parserrel keszult!
- mar nincs python 2.x support, de ha van ra igeny megnezem majd, viszont foleg a kodlap kezeles tok maskepp megy 3.x alatt...

A'rpi

Hozzászólások

Köszi!
-------------------------
Hivatásos pitiáner
neut @ présház

sub

(hatha meg iden ra tudok nezni:)

---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

Off: bocs, a model.png-t mivel rajzoltad?

Csináltam egy konténert a cuccosnak. Megosztom hátha valakinek hasznos. Ha lesz időm csinálok hozzá dockerfile-t is, de most egyelőre tesztelgetem.
Az ellenfél egy agyontanított dspam (még nem találtam jobbat). Első ránézésre partiban van vele, talán jobb is egy kicsit.
Ja, a tesztkörnyezet egy kb. 500 useres postfix egy tizenéves vason. AVX mutatóban sincs ennek ellenére 60ms/step az átlagos idő.


HOST:
docker run -it --name=dstemp debian:stretch

CONTAINER:
apt update
apt install dialog # csak hogy ne anyázzon az apt
apt upgrade # szúrta a szemem az 5 nem frissített csomag
apt install libmilter-dev # ez a pymilter-hez kell, hogy ne kelljen forrásból fordítani
apt install python3-pip

(if CPU AVX capable)

pip3 install tensorflow

(else)

apt install wget
wget https://files.pythonhosted.org/packages/43/aa/fe3e9d0b48db4adde9781658b…
pip3 install ./tensorflow-1.5.0-cp35-cp35m-manylinux1_x86_64.whl

(fi)

pip3 install pymilter html2text keras==2.2.5

# 'ctrl-d' kilépés a konténerből

HOST:
docker commit dstemp deepspam
docker rm -f dstemp

#összerendezgeted a file és könyvtár struktúrát (lásd: v0.2) vagy átírod a deepspam.py-t, aztán belépsz a deepspam.py könyvtárába, majd go:

docker run -it --rm --name=deepspam --hostname=deepspam -v $PWD:/tmp -w /tmp deepspam python3 ./deepspam.py

Kár, hogy ez nem hír lett, megérdemelte volna :D

Ki szerettem volna próbálni, de elakadtam python verzió problémával.

VPS-re telepítettem Debian 10-et. AVX nem támogatott.
Alapból 3.7-es python van, és a tensorflow 1.5 csak 3.6-os verzióig támogatott. Ha jól értelmeztem.

Várjak új verzióra?
Lehet telepíteni 3.6-os pythont debian 10-re? Nem sikerült, de nem értek a pythonhoz.
Mi az ajánlott distro?

ubuntu 16, 18 es centos7-en teszteltem, azokkal nem volt gond (python 3.5/3.6).
csodalkozom a debianon, mindig 5 evvel le vannak maradva, most meg naluk van a legujabb python? vagy ez valami sid/beta verzio? :)

amugy itt azt irjak 3.7-en is megy:
https://www.tensorflow.org/install/pip

A'rpi

2011 ota van avx... ha nem olyan regi akkor lehet csak a cpu flag-eket nem jol maszkoltak le a vps-nel. qemu-nal pl. meg lehet adni milyen cpu-t emulaljon...

vagy probald meg masik backend-el, a keras nem csak tensorflow-t tamogat, bar en csak azzal hasznaltam.

memoria lesz eleg? vps-ek nem arrol hiresek...

Tapasztalat:
AVX nélkül sem zabálja a procit, szinte észre sem lehet venni átlagosan 1 mail/s terhelésnél. Nagyobb gond a memória használat. A kezdeti 2 Gb körül értékről három hét alatt felkúszott több mint 4Gb-ra. Mivel csak 6 Gb van a gépben le is állítottam. Nézted mikor indítottad a memóriafoglalást? Nem lehet, hogy nálad is 2-ről ment fel 10-12-re? Nem ismerem az egész működését, de szerintem ez memória kezelési hiba lesz.

Egyébként kurva jó cucc. A három hét alatt fals-pozitívot nem találtam. Az angol nyelvű spamekre bőven 95% fölött volt a találat, a magyarokra kb. 80-85%.
Mikor jön a v0.4? Meg akartam csinálni a paraméterezhetőség (meg még egy két dolgot, pl. Subject hozzáadás), de mivel írtad, hogy hamarosan jön, ezért várakozó álláspontra helyezkedtem.

centos-en en is lattam ilyen memleak-elest a regi (0.2) verzional python2-vel. azt hittem valami bug, mert a 0.3+py3.6 ota nem tapasztalom ezt ott, ubuntun pedig regebben sem, vagy legalabbis nem ennyire durvan. amugy a pymilter-re gyanaxom, hogy a megszakadt smtp kapcsolatok beragadhatnak a memoriaban.
kell egy cron ami hetente restartolja es megoldva :)))

v0.4 lehet kimarad (beta fennvan, de az inkabb csak refaktor), mar a 0.5-on dolgozom :)

A'rpi

Pongyola voltam, nem találat volt 80-85%, hanem az elfogott levelek aránya. Ez annak köszönhető, hogy nem egy olyan spam volt amit egymásután 30-40 címre is küldtek. A találat a magyar leveleknél is 95% fölötti.
Nincsenek meg ezek a levelek, de ha újra beizzítom, akkor begyűjtöm és küldöm.

Eszembe jutottak az olcsóbbnál is olcsóbb VPS-t keresek topikok, és ott ráböktem az egyikre, ami támogatja az AVX-et.
https://contabo.com/?show=vps
VPS M SSD
6 mag, 16G ram.

Linux mx1....hu 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u1 (2019-09-20) x86_64 GNU/Linux


processor : 5
vendor_id : GenuineIntel
cpu family : 6
model : 63
model name : Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz
stepping : 2
microcode : 0x1
cpu MHz : 2399.996
cache size : 16384 KB
physical id : 0
siblings : 6
core id : 5
cpu cores : 6
apicid : 5
initial apicid : 5
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault invpcid_single pti ssbd ibrs ibpb fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat umip
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
bogomips : 4799.99
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual

Elég jó arányba szűri a leveleket, de azért akadnak hibák.

Szívesen visszajelzem ezeket, ha fel tudod használni. Viszont a GDPR miatt, vhogy anonimizálni kellene a leveleket. Esetleg amit a programban használsz erre a célra ki tudod emelni külön scriptbe?

vagy a deepspam.res filebol azokat a sorokat kuldd el ami tevedes, vagy a levelre/folderre kuldd ra a maildedup2.py-t, az mbox/eml filebol megcsinalja.

amugy ezt nem is ugy terveztem hogy csak onmagaban hasznalni, mert nem nez minden parametert a levelben, csak a body szoveget, sokkal inkabb kiegesziti az egyeb modszereket (greylist, header checks, spamassassin, clamav stb). pl. egy kepet vagy csak url-t tartalmazo levellel nem tud mit kezdeni, akkor sem ha az url vagy az ip rajta van 10 blacklisten mar.

en ugy latom (sok helyen hasznalom mar), hogy pont azokat fogja meg eleg jo hatekonysaggal, ami a spamassassin/clamav-on atcsuszik, mert amugy artalmatlan levelnek tunik (pl. feltort valid accounttal kuldik, ami nincs blacklisten, es betart minden smtp protokollt), de a szovege gyanus. elsosorban a phishing leveleket.

A'rpi

Nem is olyan egyszerű visszakeresni.

Saját fiókban ezt a kettőt látom most. Ilyen formában jó lesz?

Mindkettőben kevés a szöveg. Gondolom ez nehezít a dolgon.

Github értesítő:
99%:fwiw i just tried sbtprojectmatrix and hit on sbt sbtprojectmatrix ## . our build is structured like this mtagsinterfaces pure java mtags crossversion . full # . ## . ## # . ## . ## # . ## . # . depends on mtagsinterfaces you are receiving this because you are subscribed to this thread . reply to this email directly view it on github or unsubscribe .

Twitter értesítő:
100%:twitter httpurl ## aktualis ertesitesed van a twitteren nezd meg httpurl sugo httpurl beallitasok httpurl leiratkozas httpurl ; cn mtewote # mtqwomfjdgl # axr # x # rpz # vzdf ## axrox # hlywrsaw # lx # noyw # nzq # d # d sig ## eee # ebf ## df #### db ########## a # d # c # c ### c iid ### e # f ######### bbd # c # b #### e # e # e # uid ######## nid ### ## usbid ## elkuldtuk emailaddressalonak . leiratkozas httpurl ; cn mtewote # mtqwomfjdgl # axr # x # rpz # vzdf ## axrox # hlywrsaw # lx # noyw # nzq # d # d sig ## eee # ebf ## df #### db ########## a # d # c # c ### c iid ### e # f ######### bbd # c # b #### e # e # e # uid ######## nid ### ## usbid ## twitter inc . #### market street suite ### san francisco ca #####

hat, ez alapjan en is spamnak mondanam oket :) foleg a 2. eleg erdekes a sok ertelmetlen karakterekkel...

de az elso is eleg erdekesen nez igy ki...

amugy a maildedup2-vel elo tudod ujra allitani barmilyen emailbol vagy unix mailboxbol, sot az meg a duplikaciokat is kiszedi, az egyszerubb mint a logbol megtalalni :)

Gyakorlatilag a levél nagy része a két nagyon hosszú hivatkozás. De ettől még ezek hasznos értesítő levelek.

Sajnos nem mentettem ki rögtön, de ma volt két google levél (talán analitika értesítések), egy számla értesítő és egy KSH adatszolgáltatás levél, amit spamnek jelölt, na és észrevettem.

Megoldottam, hogy aránylag könnyen le tudjam szűrni az utolsó pár ezer levelet. Privátba fogok néha küldeni, ha hasznos lesz.

Most csak a ham/spam jelöléseket nézem. Ez alapján 1% alatt lehet a hiba.

Amit most írok azt inkább segítő szándékkal írnám.

Jó, és nagyon tetszik, amit csinálsz!

A dokumentáció lehetne beszédesebb. Kezdőknek, akik életükben nem csináltak ilyet nem evidensek a telepítés lépései.A telepítési leírásnál azt mondod,hogy elég letölteni a deepspam.py file-t, de utána meg ott van, hogy kell a milter.eml fájl is. 

Ha kaphatnék egy részletesebb (step-by-step) telepítési guide-ot szívesen csinálnék belőle egy Dockerfile-t, amit visszaosztanék a közösségnek. Jó lenne a kódot valahonnan egyszerűbben letölthetővé tenni, például GIT és a releaseket tar.gz-ben le lehetne tölteni stb. 

Rövid riport, hátha érdekel valakit:

Nálam a 0.3 külön virtuál gépben futtatva ( 4 cpu mag, 8GB ram )  gond nélkül feldolgoz átlagban napi 20 ezer levelet. Vélhetően sokkal többet is tud, mert volt egy kiugró 32 ezres nap, és ott sem esett kétségbe.

Valakinek gyűlt még tapasztalat ?

A'rpi, ezúton is köszönet a munkádért !

hat ha modern (nem 8+ eves) cpu-d van (vagy van cuda-s gpu) akkor azert ez gyorsabb akar a spamassassin akar a clamav ellenorzesenel, es azok is siman visznek nalam 50k+ napi levelet. altalaban 30-70ms 1 level feldolgozasa, amivel kb 1000 levelet tud percenkent (de legkozelebb lemerem amikor ilyen sok 100 ezres mailboxokat tesztelek vele offline, de az is max 1-2 ora volt).

a 0.5 kicsit csuszik mert mindig amikor azt hiszem mar minden OK a teszteknel talalok valamit (a tokenizalot ill. html parsert reszelem meg mindig) ami miatt belenyulok es kezdhetem elolrol a tesztelest... de karacsonyra megkapjatok :)

kozben keszul az uj word2vec is, 36GB(!) magyar szovegbol (a hu wikipedia 600 mega csak...) es kb ugyanennyi angol minta, plusz valamennyi nemet, olasz, francia, spanyol is kerul bele, mert foleg a nemet leveleknel sok tevedest lattam.

A'rpi

Egy kicsit offtopik, de hatha tudtok segiteni. Kicsit elmeleti.

Nalunk olyan 3-400spam/usert kapunk naponta.

Olyat szeretnek, hogy 99.99999%-os pontosaggal eldobnam a spamek biztos reszet, ugy, hogy a usert el se eri, a spam mappajat sem.

Es utana szurnem a maradek 10-20spamet/user/nap.

Probaltam mindenfelet, de pl. a levelek ellenorzesenel (dkim+spf) inkabb a ham kuldok buknak meg (pl. *.gov.hu, van amikor dns bejegyzes sincs!).

Nektek mi a strategiatok?

A szomoru valosag az, hogy olyan 300spamenkent egy ham is becsuszik, igy a userek atnyalazzak minden nap a spam mappat is. Ami rettento idopazarlo.

Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

a kulonbozo modszerek/algoritmusok mas-mas tipusu spammekre hatekonyak. ezert kell sokfelet kombinalni.

a deepspam-nal elsosorban a phishing szurese volt a cel, a tanitashoz hasznalt mintaknal is erre koncentraltam. ebben messze jobb is mint barmi mas. persze ez is tevedhet, de azt lehet ellensulyozni massal (pl. bayes) vagy whitelistelni.

persze az ellensuly forditva is elsulhet: ez pl. ma jott: "Levél: Az Ön akcióban való részvétele ügyében"  es 4.7 ponttal epp meguszta, pedig a deepspam adott ra 99%-ot, de whitelistelt ip-rol jott dkim-el spf-el stb.

A'rpi

ilyet szeretne mindenki nyilvan :)

sulyozni kell, en spamassassin-al fogom ossze a kulonbozo algoritmusokat (dnsbl, deepspam, dcc, clamav, sa-rules, bayes stb) es az osszpontszam alapjan vagy csak megjelolom (ez megy a spam mappaba) vagy ha eler egy erteket (12-15 pont korul) akkor megy a levesbe (karanten a szerveren, az user nem latja). igy a spammek nagy resze a levesben vegzi, ahol kicsit bizonytalan az algoritmus az megy csak a spam mappaba, ami igy nem sok, max par db/nap amit kibir az user.

spf/dkim csak arra kell hogy a gmail fogadja a leveleidet, mert amugy tenyleg a spammerek hasznaljak foleg, nem a ham-ek.

Nalam ragjak a fulemet, hogy menjunk at vallalati gmail ala, mert akkor nem lesz spam abszolut.

De sztem gmail alatt is csak annyi lenne, hogy a spam mappa fullon lenne allandoan, es nem napi 1-3 hammal hanem havi 1-2vel.

De lehet, hogy atmigralom magunkat, de meg ezeket a koroket amit irtatok elotte lefutom, hogy majd tudjak visszamigralni...:)

Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

felraktam a v0.5 betajat:   

http://thot.banki.hu/deepspam/milter-v0.5-dev/

changelog:

- sajat html parser (nem dependel tobbet a html2text-re)
- sajat xml es html entity dekoder (kiderult hogy python3-ban bugzik a gyari)
- a txt2tok tool es az eml2token mar megy python2-vel is, es pypy-vel is.  lehet, hogy a tobbi is, de azt meg nem teszteltem :)

keszul az uj word2vec is, kb 90 giganyi szovegbol! ha meglesz, es jo lesz, akkor azzal tanitok egy uj modelt is.

Szerkesztve: 2019. 12. 16., h - 08:06

Ez még működik ?

193.224.38.187:1080

Mert ez van a logban :

  warning: connect to Milter service inet:193.224.38.187:1080: Connection refused

felraktam egy uj modelt:
http://thot.banki.hu/deepspam/model_big_v4/

- uj word2vec-re epul, amit novemberben szamolt kb 1 honapig a gep. ebben sokkal tobb a szoveg (magyar is!) a korabbinal, es mas nyelvek is belekerultek kisebb mertekben (de,fr,it,es)

- mivel az uj w2v sokkal jobb minosegu lett, le lehetett csokkenteni a model meretet kb a felere, igy is hozza ugyanazokat a szamokat :)  -> kevesebb RAM kell.

- ez meg a szeptemberi spam/ham datasetre (v3) epul, de abbol is keszul az uj, csak meg nem volt idom befejezni, talan majd az unnepek alatt / januar...

- keszult egy meg ujabb word2vec is decemberben ~90GB szovegbol es mas parameterekkel (cbow modszerrel skipgram helyett, es kisebb dimenzioval) de sajnos ez 1%-al rosszabb lett, igy ez ment a kukaba. ujraszamoltatom sg-vel de az megint 1 honap lesz, vagy inkabb 2... :)  (eredetileg ezt akartam az uj modelhez hasznalni, de igy elovettem az elozo sg-s verziot)

Tapasztaltam olyat tobbszor is, hogy egyszeruen a kovetkezo hibauzenettell kb 4 orankent megall a legujabb verzio (a korabbival nem volt ilyen):

1/1 [==============================] - 0s 266ms/step
python3: /root/.theano/compiledir_Linux-5.4.5-x86_64-with-debian-10.2--3.7.3-64/tmpb6ob1p7n/mod.cpp:266: int {anonymous}::__struct_compiled_op_m43e2f10175c8cb3751d25cf685f5379783484e0f29388fc21a34a41edb6ae98d::run(): Assertion `PyArray_NDIM(V5) == 1' failed.

Esetleg van tipped?

Átfutottam a statisztikákat.

Már nem jelöli spamnek a github értesítőket, és a valid számlalevelekből is érezhetően kevesebbet jelöl spamnek.

Barátságosabb lett a memóriahasználat.

A facebbok, twitter értesítőket továbbra is spamnek jelöli, de ezeket a nagy szolgáltatókat könnyű fehérlistázni.

Szóval nagyon jó a cucc.

lehet volt mar rola szo. a tanulo cucc tud futni gpun is? tudom hogy van sajat gep erre, de ma mar nem annyira kifizetodo a shitcoin banyaszat, napi 2-3$-ert barki orommel kolcsonadja a gepet 5-8 gpuval

A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

persze, en is gpu-n futtatom, cpu-n orokkevalosag lenne :) bar az ujabb tensorflown sokat optimalizaltak, de igy is min 10x a kulonbseg a gpu javara.

mondjuk tudtommal meg mindig csak cuda (nvidia) tamogatott a neuralis halos frameworkok (tensorflow, theano stb) altal, opencl-t nem nagyon eroltetik sehol. banyaszni meg inkabb atival szoktak...

van nvidia is boven. raadasul lassan azok egy resze technikailag is kiesnek, mert mar keves a rajtuk levo 3G ram. (1050, 1060, 1070 kartyak)

most megneztem nicehash calcban, 0.45$/napot mond egy 1070 kartyara. ebbol kb kiszamolhatod hogy mekkora koltseg a teljes tanitas.

A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

nem tudom kevesebb memoriaval is megoldja-e a TF, de nalam (1080Ti) megeszi az egeszet tanitas alatt:

10801MiB / 11178MiB

ami biztos, hogy regen a 950gtx-en 4gb rammal nem indult el, tehat annal biztosan tobb kell.

amugy maga a tenyleges tanitas lefut ezen kb 1 ora alatt (meg avx2-es cpu-n is lefut 1 nap alatt szerintem), csak ugye a melo nagy resze a dataset osszeallitasabol/tesztelesebol all, valamint a model parameterekkel valo kiserletezesbol (hany iteracio, batch size, mekkora w2v model, hany dimenzios vektorok, hany dimenzios filterek, mekkora dropout stb). neha ugyanazokkal az inputokkal 2 tanitas is mas minosegu eredmenyt hoz (ugye eleg sok a random) :)

ami nagyon eszi a gepet az a word2vec epites, az 1-2 honap is akar... persze az is nagyban fugg a parameterektol es a dataset meretetol.

Szerkesztve: 2019. 12. 30., h - 23:46

most futottam bele egy olyan spam-be, ahol a fejlecben (from) invalid karakterkodok voltak, amik utf8 dekodolasi exceptiont okoznak a pymilter-ben (mondjuk azt nem ertem, egyaltalan miert probalja dekodolni).

mar javitottak 4 honapja, de meg az utolso releaseben nincs benne, erdemes a githubrol frissiteni/felrakni:

https://github.com/sdgathman/pymilter/archive/master.zip

szerk: a hiba csak 3.x pythont erinti

Szerkesztve: 2020. 01. 03., p - 10:15

mai meglepi:  "Sěcuříty ňøtícě. Søměøňě håvě åccěss tø yøuř systěm."

"Thě fåct ís thåt yøü wěrě ínfěctěd wíth målwårě thrøügh ån ådült sítě thåt yøü vísítěd."

tehat elkezdtek intenziven hasznalni a vizualisan hasonlo karakterek (unicode confusables) trukkot spam-ekben is.

ugy tunik, hogy az unicodedata.normalize() nem kezeli le rendesen, pl. az athuzott 'o' betu (0xF8) eltunik a konverzio soran :(

osszedobtam egy sajat karakter konverzios tablat, reszben a confusables.txt, reszben a normalize() eredmenyei alapjan, helyenkent kezzel korrigalva/kiegeszitve:

http://thot.banki.hu/deepspam/unicode/

a kovetkezo verzioban mar ezt fogom hasznalni a normalize() helyett...

es ez annyira "szep":  ss="".join(confusables.get(ord(x),"?") if ord(x)>=128 else x for x in s)