pg.gimran.org

Байестік сүзуді жақсарту

Қаңтар 2003 · Барлық эсселер

Пол Грэмнің «Байестік сүзуді жақсарту» эссесінің аудармасы. Түпнұсқа: https://paulgraham.com/better.html. Машиналық аударма (Gemini).

Translation of Paul Graham's essay 'Better Bayesian Filtering'. Original: https://paulgraham.com/better.html. Machine translation (Gemini).

(Бұл мақала 2003 жылғы Spam Conference конференциясында баяндама ретінде ұсынылды. Онда Спамға қарсы жоспар мақаласында сипатталған алгоритмнің жұмысын жақсарту үшін атқарған жұмысым және болашақта не істеуді жоспарлап отырғаным баяндалады.)

Мұнда мен ұсынғым келетін алғашқы жаңалық — ғылыми мақалаларды жалқау бағалау (lazy evaluation) алгоритмі. Қалағаныңызды жазыңыз және бұрынғы жұмыстарға еш сілтеме жасамаңыз, сонда ашуланған оқырмандар сіз сілтеме жасауыңыз керек болған барлық мақалалардың тізімін өздері жібереді. Мен бұл алгоритмді «Спамға қарсы жоспар» [1] Slashdot-та жарияланғаннан кейін аштым.

Спамды сүзу — мәтінді жіктеудің (text classification) бір бөлігі, ал бұл жақсы қалыптасқан сала, бірақ таза Байестік спам-сүзгі туралы алғашқы мақалалар 1998 жылғы бір конференцияда қатар ұсынылған екі баяндама болса керек: бірі Пантел мен Линнің [2], екіншісі Microsoft Research тобының [3] жұмысы.

Бұл жұмыстар туралы естігенде қатты таңғалдым. Егер адамдар Байестік сүзгілеуді төрт жыл бұрын қолға алса, неге оны әлі күнге дейін бәрі пайдаланбай келді? Мақалаларды оқығанда себебін түсіндім. Пантел мен Линнің сүзгісі екеуінің ішіндегі тиімдірегі болғанымен, ол спамның тек 92%-ын ғана ұстап, 1,16% жалған оң нәтиже (false positive) берген.

Мен Байестік спам-сүзгі жазып көргенімде, ол спамның 99,5%-ын ұстап, жалған оң нәтижелері 0,03%-дан аз болды [4]. Бірдей эксперимент жүргізген екі адам мүлдем әртүрлі нәтиже алғанда, бұл әрқашан алаңдатады. Бұл жағдайда әсіресе алаңдатады, өйткені бұл екі көрсеткіштер жиынтығы қарама-қарсы қорытындыларға әкелуі мүмкін. Әртүрлі пайдаланушылардың талаптары әртүрлі, бірақ көптеген адамдар үшін 1,16% жалған оң нәтижемен 92% сүзу көрсеткіші сүзгілеудің қолайлы шешім емес екенін білдірсе, 0,03%-дан аз жалған оң нәтижемен 99,5% көрсеткіш оның толықтай жарамды екенін көрсетеді деп ойлаймын.

Сонымен, неліктен бізде мұндай әртүрлі сандар шықты? Мен Пантел мен Линнің нәтижелерін қайталауға тырысқан жоқпын, бірақ мақаланы оқу барысында бұл айырмашылықты түсіндіретін бес себепті көріп отырмын.

Біріншіден, олар өз сүзгілерін өте аз деректерде оқытқан: 160 спам және 466 спам емес хат. Мұндай шағын деректер жиынтығында сүзгінің өнімділігі әлі де өсуі тиіс еді. Сондықтан олардың көрсеткіштері жалпы Байестік спам-сүзгілеуді былай қойғанда, тіпті өз алгоритмдерінің тиімділігінің нақты өлшемі де бола алмауы мүмкін.

Бірақ меніңше, ең маңызды айырмашылық — олар хаттың тақырыптамаларын (headers) ескермеген. Спам-сүзгілермен жұмыс істеген кез келген адамға бұл оғаш шешім болып көрінеді. Дегенмен, мен жазып көрген ең алғашқы сүзгілерде де тақырыптамаларды ескермеген едім. Неге? Өйткені мәселені қарапайым әрі жинақы ұстағым келді. Ол кезде мен хат тақырыптамалары туралы көп білмейтінмін және олар маған бейберекет қоқысқа толы болып көрінді. Мұнда сүзгі жазушылар үшін сабақ бар: деректерді елеусіз қалдырмаңыз. Бұл айтуға тұрмайтындай тым анық сабақ болып көрінуі мүмкін, бірақ мен мұны бірнеше рет өз тәжірибеммен ұғуға мәжбүр болдым.

Үшіншіден, Пантел мен Лин токендердің түбірін бөлді (стемминг жасады), яғни мысалы, «mailing» және «mailed» сөздерін «mail» түбіріне дейін қысқартты. Олар корпустың шағын көлеміне байланысты бұған мәжбүр болдық деп есептеген шығар, бірақ егер солай болса, бұл мезгілсіз оңтайландырудың (premature optimization) бір түрі.

Төртіншіден, олар ықтималдықтарды басқаша есептеді. Олар барлық токендерді пайдаланды, ал мен тек ең маңызды 15 токенді ғана қолданамын. Егер барлық токендерді қолдансаңыз, ұзағырақ спамдарды жіберіп алуға бейім боласыз — біреу қандай да бір көпдеңгейлі маркетинг схемасынан қалай байып кеткені туралы өмірбаянын баяндайтын хаттар түрі. Әрі мұндай алгоритмді спамерлер оңай алдап кете алар еді: жай ғана спам терминдерін теңестіру үшін кездейсоқ мәтіннің үлкен бөлігін қосып жіберсе жеткілікті.

Соңында, олар жалған оң нәтижелерге қарсы теңгерім жасамады. Менің ойымша, кез келген спамды сүзу алгоритмінде сүзу жылдамдығын құрбан ету арқылы жалған оң нәтижелердің деңгейін төмендетуге болатын ыңғайлы реттегіш болуы керек. Мен мұны спам емес корпустағы токендердің кездесу санын екі еселеп есептеу арқылы жүзеге асырамын.

Спамды сүзуге кәдімгі мәтінді жіктеу мәселесі ретінде қарау жақсы идея деп ойламаймын. Мәтінді жіктеу әдістерін пайдалануға болады, бірақ шешімдер мәтіннің электрондық пошта, әсіресе спам екендігін ескеруі керек және ескеруге тиіс. Электрондық пошта — бұл жай ғана мәтін емес; оның құрылымы бар. Спамды сүзу — бұл жай ғана жіктеу емес, өйткені жалған оң нәтижелер жалған теріс нәтижелерден әлдеқайда сорақы, сондықтан оларға қатенің мүлде басқа түрі ретінде қарау керек. Ал қатенің көзі жай ғана кездейсоқ ауытқу емес, сүзгіңізді айналып өту үшін белсенді түрде жұмыс істеп жатқан тірі адам — спамер.

Токендер

Slashdot-тағы мақаладан кейін мен естіген тағы бір жоба Билл Еразунистің CRM114 жобасы болды [5]. Бұл мен жаңа ғана айтқан дизайн принципіне қарсы мысал болып табылады. Бұл кәдімгі мәтін классификаторы, бірақ оның тиімділігі соншалық, ол тіпті спам сүзіп жатқанын өзі де білмей, оны мінсіз дерлік сүзіп шығарады.

CRM114 қалай жұмыс істейтінін түсінген соң, түбінде бір ғана сөздерге негізделген сүзуден осындай тәсілге көшуім сөзсіз болатындай көрінді. Бірақ алдымен, жеке сөздермен қаншалықты алысқа бара алатынымды байқап көрейін деп ойладым. Және жауабы — таңғаларлықтай алысқа.

Негізінен мен ақылдырақ токенизация бойынша жұмыс істедім. Қазіргі спамдарда мен CRM114 көрсеткіштеріне жақындайтын сүзу деңгейіне қол жеткізе алдым. Бұл әдістер көбінесе Биллдің тәсіліне ортогоналды; оңтайлы шешім екеуін де біріктіруі мүмкін.

«Спамға қарсы жоспар» токеннің өте қарапайым анықтамасын пайдаланады. Әріптер, сандар, сызықшалар, апострофтар және доллар белгілері құраушы таңбалар болып саналады, ал қалғандарының бәрі токен бөлгіш болып табылады. Сондай-ақ мен регистрді (бас/кіші әріптерді) елемедім.

Енді менде токеннің күрделірек анықтамасы бар: Регистр сақталады.

Леп белгілері құраушы таңбалар болып саналады.

Нүктелер мен үтірлер екі санның арасында кездессе, құраушы болып саналады. Бұл маған ip мекенжайлары мен бағаларды бүтіндей алуға мүмкіндік береді.

$20-25 сияқты бағалар диапазоны $20 және $25 сияқты екі токен береді.

To, From, Subject және Return-Path жолдарында немесе url ішінде кездесетін токендер сәйкесінше белгіленеді. Мысалы, Subject жолындағы «foo» «Subject*foo» болады. (Жұлдызша — бұл құраушы ретінде рұқсат етілмеген кез келген таңба болуы мүмкін.) Мұндай шаралар сүзгінің сөздік қорын көбейтеді, бұл оны дәлірек ажырататын етеді. Мысалы, қазіргі сүзгіде Subject жолындағы «free» сөзінің спам болу ықтималдығы 98% құраса, хаттың негізгі мәтініндегі дәл сол токеннің спам ықтималдығы небәрі 65% болады.

Міне, қазіргі кейбір ықтималдықтар [6]:

Subject*FREE 0.9999 free!! 0.9999 To*free 0.9998 Subject*free 0.9782 free! 0.9199 Free 0.9198 Url*free 0.9091 FREE 0.8747 From*free 0.7636 free 0.6546 «Спамға қарсы жоспар» сүзгісінде бұл токендердің барлығы бірдей ықтималдыққа ие болар еді, ол — .7602. Ол сүзгі шамамен 23 000 токенді танитын. Қазіргі сүзгі шамамен 187 000 токенді таниды.

Токендер әлемінің кеңірек болуының кемшілігі — қателердің (өткізіп алудың) көбірек болу ықтималдығы. Корпусыңызды көбірек токендерге шашырату оны кішірейте түскенмен бірдей әсер береді. Мысалы, егер сіз леп белгілерін құраушы таңбалар деп есептесеңіз, жеті леп белгісі бар «free» үшін спам ықтималдығы жоқ болып шығуы мүмкін, тіпті екі леп белгісі бар «free» сөзінің ықтималдығы 99,99% екенін білсеңіз де.

Мұның бір шешімі — мен дегенерация деп атайтын әдіс. Егер токен үшін дәл сәйкестік таба алмасаңыз, оған азырақ нақтыланған нұсқа ретінде қараңыз. Мен соңындағы леп белгілерін, бас әріптерді және белгіленген бес контексттің бірінде кездесуді токенді нақтылай түсетін жайттар деп есептеймін. Мысалы, егер мен «Subject*free!» үшін ықтималдық таба алмасам, «Subject*free», «free!» және «free» ықтималдықтарын іздеймін және қайсысы .5-тен ең алыс болса, соны аламын.

Міне, егер сүзгі Subject жолында «FREE!!!» көріп, ол үшін ықтималдық таппаса, қарастырылатын баламалар [7]:

Subject*Free!!! Subject*free!!! Subject*FREE! Subject*Free! Subject*free! Subject*FREE Subject*Free Subject*free FREE!!! Free!!! free!!! FREE! Free! free! FREE Free free Егер мұны істесеңіз, толық бас әріптермен және толық кіші әріптермен қатар тек бас әріппен басталатын нұсқаларды да міндетті түрде қарастырыңыз. Спамдарда бұйрық райлы сөйлемдер көбірек болады, ал оларда бірінші сөз — етістік. Сондықтан бас әріппен басталатын етістіктердің спам болу ықтималдығы толықтай кіші әріптермен жазылғанға қарағанда жоғарырақ болады. Менің сүзгімде «Act» токенінің спам ықтималдығы 98%, ал «act» үшін небәрі 62%.

Егер сіз сүзгінің сөздік қорын көбейтсеңіз, «бірдей» сөзінің бұрынғы анықтамасы бойынша бір сөзді бірнеше рет есептеп шығуыңыз мүмкін. Логикалық тұрғыдан алғанда, олар бұдан былай бірдей токен емес. Бірақ егер бұл сізді әлі де мазаласа, өз тәжірибемнен айта кетейін: бірнеше рет саналып жатқан сияқты көрінетін сөздер әдетте дәл сіз санағыңыз келетін сөздер болып шығады.

Үлкенірек сөздік қордың тағы бір әсері — кіріс хатқа қараған кезде сіз қызықтырақ токендерді, яғни ықтималдығы .5-тен әлдеқайда алшақ токендерді көбірек табасыз. Хаттың спам екенін анықтау үшін мен ең қызықты 15 токенді қолданамын. Бірақ осындай бекітілген санды қолданғанда проблемаға тап болуыңыз мүмкін. Егер сіз барынша қызықты көптеген токендер тапсаңыз, нәтиже бірдей қызықты токендердің ретін анықтайтын кездейсоқ фактормен шешіліп кетуі мүмкін. Мұнымен күресудің бір жолы — кейбіреулерін басқаларға қарағанда қызықтырақ деп қарастыру.

Мысалы, «dalco» токені менің спам корпусымда 3 рет кездеседі және заңды хаттар корпусында мүлдем кездеспейді. «Url*optmails» токені (url ішіндегі «optmails» дегенді білдіреді) 1223 рет кездеседі. Дегенмен, мен токендердің ықтималдығын есептеудің бұрынғы тәсілі бойынша екеуінің де спам ықтималдығы бірдей, яғни .99 шегі болар еді.

Бұл дұрыс еместей көрінеді. Бұл екі токенге айтарлықтай әртүрлі ықтималдықтар беру үшін теориялық дәлелдер бар (Пантел мен Лин солай істейді), бірақ мен оны әлі байқап көрген жоқпын. Ең болмағанда, тек бір ғана корпуста кездесетін 15-тен астам токен тапсақ, көп кездесетіндеріне басымдық беруіміз керек сияқты. Сондықтан қазір екі шекті мән бар. Тек спам корпусында кездесетін токендер үшін олар 10 реттен көп кездессе, ықтималдық .9999, ал олай болмаса .9998 болады. Тек заңды хаттар корпусында табылған токендер үшін де шкаланың екінші шетінде дәл солай.

Кейінірек мен токен ықтималдықтарын айтарлықтай масштабтауым мүмкін, бірақ бұл шамалы масштабтаудың өзі токендердің дұрыс сұрыпталуын қамтамасыз етеді.

Тағы бір мүмкіндік — тек 15 токенді ғана емес, қызығушылықтың белгілі бір шегінен асатын барлық токендерді қарастыру болар еді. Стивен Хаузер мұны өзінің статистикалық спам-сүзгісінде жасайды [8]. Егер сіз шекті мәнді қолдансаңыз, оны өте жоғары етіп қойыңыз, әйтпесе спамерлер хаттарды зиянсыз сөздермен толтыру арқылы сізді алдап кетуі мүмкін.

Соңында, html-мен не істеу керек? Мен оны мүлдем елемеуден бастап, толықтай талдауға (парсинг) дейінгі барлық нұсқаларды байқап көрдім. Html-ді елемеу — жаман идея, өйткені ол пайдалы спам белгілеріне толы. Бірақ оның бәрін талдасаңыз, сүзгіңіз жай ғана html танығышқа айналып кетуі мүмкін. Ең тиімді тәсіл — кейбір токендерді байқап, басқаларын елемейтін орташа жол сияқты. Мен a, img және font тегтерін қарастырамын, ал қалғандарын елемеймін. Сілтемелер мен суреттерге сөзсіз қарауыңыз керек, өйткені оларда url мекенжайлары бар.

Мен html-мен жұмыс істеуді бұдан да ақылдырақ ете алар едім, бірақ бұған көп уақыт бөлуге тұрмайды деп ойлаймын. Html-ге толы спамдарды сүзу оңай. Ақылдырақ спамерлер одан қазірдің өзінде аулақ болады. Сондықтан болашақтағы өнімділік html-мен қалай жұмыс істейтініңізге көп байланысты болмауы керек.

Өнімділік

2002 жылдың 10 желтоқсаны мен 2003 жылдың 10 қаңтары аралығында маған шамамен 1750 спам келді. Олардың ішінен 4-еуі өтіп кетті. Бұл — шамамен 99,75% сүзу көрсеткіші.

Мен жіберіп алған төрт спамның екеуі менің заңды хаттарымда жиі кездесетін сөздерді кездейсоқ қолданғандықтан өтіп кетті.

Үшіншісі — үшінші тұлғаларға хат жіберу үшін қорғалмаған cgi скриптін пайдаланатындардың бірі болды. Оларды тек мазмұнына қарап сүзу қиын, өйткені тақырыптамалары таза және олар қолданатын сөздеріне абай болады. Соған қарамастан, мен әдетте оларды ұстай аламын. Бұл хат .9 шегінен сәл ғана төмен .88 ықтималдықпен өтіп кетті.

Әрине, бірнеше токендер тізбегіне қарау оны оңай ұстар еді. «Төменде кері байланыс нысаныңыздың нәтижесі берілген» (Below is the result of your feedback form) деген сөз бірден әшкерелейді.

Төртінші спам — мен «болашақтың спамы» деп атайтын нәрсе болды, өйткені мен спамның осыған айналатынын күтемін: толықтай бейтарап мәтін және одан кейінгі url. Бұл жағдайда біреу өз үй парақшасын ақыры аяқтағанын және менің оны көруімді өтінген хат болды. (Бұл парақша, әрине, порно сайттың жарнамасы еді.)

Егер спамерлер тақырыптамаларға мұқият болып, жаңа url қолданса, болашақтың спамында сүзгілер байқайтын ештеңе қалмайды. Біз, әрине, парақшаны қарап шығу үшін краулер жіберу арқылы жауап бере аламыз. Бірақ бұл қажет болмауы да мүмкін. Болашақтың спамына жауап беру деңгейі төмен болуы керек, әйтпесе оны бәрі жасар еді. Егер ол жеткілікті төмен болса, спамерлер үшін оны жіберу ақталмайды және бізге оны сүзу үшін тым қатты тер төгудің қажеті болмайды.

Енді шынымен таңғалдыратын жаңалық: дәл осы бір айлық кезеңде менде үш жалған оң нәтиже болды.

Бір жағынан, бірнеше жалған оң нәтиже алу жеңілдік әкелді. «Спамға қарсы жоспарды» жазған кезде менде бірде-бір мұндай жағдай болмаған және олардың қандай болатынын білмеген едім. Енді олардың бірнешеуі кездескен соң, мен қорыққандай жаман емес екенін көріп жеңілдеп қалдым. Статистикалық сүзгілер беретін жалған оң нәтижелер спамға қатты ұқсайтын хаттар болып шықты, ал бұлар — сіз жіберіп алғаныңызға ең аз өкінетін хаттар [9].

Жалған оң нәтижелердің екеуі мен заттар сатып алған компаниялардың ақпараттық бюллетеньдері болды. Мен оларды алуды ешқашан сұраған емеспін, сондықтан оларды спам деуге де болар еді, бірақ мен оларды жалған оң нәтиже деп санаймын, өйткені бұған дейін оларды спам ретінде өшірмеген едім. Сүзгілердің оларды ұстап қалуының себебі — екі компания да қаңтар айында хаттарды өз серверлерінен жіберудің орнына коммерциялық пошта жөнелтушілеріне көшті және олардың тақырыптамалары да, мәтіндері де спамға әлдеқайда ұқсас бола түсті.

Дегенмен, үшінші жалған оң нәтиже өте жағымсыз болды. Ол Мысырдағы біреуден келген және толықтай бас әріптермен жазылған еді. Бұл токендерді регистрге сезімтал етудің тікелей салдары болды; «Спамға қарсы жоспар» сүзгісі оны ұстамас еді.

Жалпы жалған оң нәтижелер деңгейінің қандай екенін айту қиын, өйткені біз статистикалық тұрғыдан шу деңгейіндеміз. Сүзгілермен (кем дегенде, тиімді сүзгілермен) жұмыс істеген кез келген адам бұл мәселені жақсы біледі. Кейбір хаттардың спам немесе спам емес екенін айту қиын, және бұл — сүзгілерді шынымен қатаңдатқан кезде алдыңыздан шығатын хаттар. Мысалы, осы уақытқа дейін сүзгі қате басылғандықтан менің мекенжайыма жіберілген екі хатты және мені басқа біреу деп ойлап жіберілген бір хатты ұстап қалды. Бұларды менің спамым да, спам емес хатым да емес деп айтуға болады.

Тағы бір жалған оң нәтиже Virtumundo вице-президентінен келді. Мен өзімді тұтынушы ретінде көрсетіп оларға хат жазған едім, ал жауап Virtumundo пошта серверлері арқылы қайтып келгендіктен, оның тақырыптамаларында көзге көрініп тұрған спам белгілері болды. Мұны да нақты жалған оң нәтиже емес, Гейзенбергтің белгісіздік принципінің бір түрі деуге болады: мен оны тек спамды сүзу туралы жазып жүргендіктен ғана алдым.

Бұларды есептемегенде, шамамен 7740 заңды хаттың ішінен осы уақытқа дейін барлығы бес жалған оң нәтиже алдым, бұл — 0,06% көрсеткіш. Қалған екеуі мен сатып алған заттың уақытша қоймада таусылғаны туралы хабарлама және Evite-тен келген кешке шақыру еске салғышы болды.

Менің ойымша, бұл санға толық сенуге болмайды: бір жағынан, таңдама тым аз, екінші жағынан, сүзгіні осылардың кейбірін ұстамайтындай етіп түзей аламын деп ойлаймын.

Жалған оң нәтижелер маған жалған теріс нәтижелерден мүлдем басқа қателік түрі болып көрінеді. Сүзу жылдамдығы — өнімділіктің өлшемі. Ал жалған оң нәтижелерді мен қателер (багтар) ретінде қабылдаймын. Мен сүзу жылдамдығын арттыруға оңтайландыру ретінде, ал жалған оң нәтижелерді азайтуға қателерді жөндеу (debugging) ретінде қараймын.

Сондықтан бұл бес жалған оң нәтиже — менің багтар тізімім. Мысалы, Мысырдан келген хат бас әріптермен жазылған мәтіннің кесірінен сүзгіге нигериялық спам сияқты көрінгендіктен ұсталды. Бұл шынымен де қателіктің бір түрі. Html сияқты, хаттың толықтай бас әріппен жазылуы тұжырымдамалық тұрғыдан әр сөзге емес, бір ғана белгіге жатады. Маған регистрді күрделірек тәсілмен өңдеу керек.

Сонымен, осы 0,06% көрсеткіштен қандай қорытынды жасауға болады? Көп ештеңе емес, меніңше. Таңдаманың шағын көлемін ескере отырып, оны жоғарғы шек ретінде қарастыруға болады. Бірақ бұл кезеңде ол Байестік сүзудің қандай да бір ішкі жалған оң нәтиже көрсеткішіне қарағанда, менің жүзеге асыруымдағы қателердің (багтардың) өлшеміне көбірек ұқсайды.

Болашақ

Бұдан әрі не болмақ? Сүзу — бұл оңтайландыру мәселесі, ал оңтайландырудың кілті — профильдеу (profiling). Кодыңыздың қай жерде баяу екенін болжауға тырыспаңыз, өйткені бәрібір қателесесіз. Кодыңыздың қай жерде баяу екенін көріп, соны түзеңіз. Сүзуде бұл мынаны білдіреді: жіберіп алған спамдарыңызға қараңыз және оларды ұстап қалу үшін не істей алатыныңызды анықтаңыз.

Мысалы, спамерлер қазір сүзгілерді айналып өту үшін агрессивті түрде жұмыс істеп жатыр және олар істеп жатқан әрекеттердің бірі — сүзгілер танып қоймас үшін сөздерді бөлшектеу және қате жазу. Бірақ бұл бағытта жұмыс істеу менің басты басымдығым емес, өйткені мұндай спамдарды ұстауда әлі де еш қиындық көріп тұрған жоқпын [10].

Қазіргі уақытта маған қиындық туғызатын спамның екі түрі бар. Біріншісі — сізді танысу сайтында сөйлесуге немесе оның профилін көруге шақырған әйелдің хаты болып көрінетін түрі. Олар өтіп кетеді, өйткені бұл — сатуға тән сөздерді қолданбай-ақ жасауға болатын жалғыз жарнама түрі. Олар қарапайым хаттармен бірдей сөздік қорды пайдаланады.

Мен үшін сүзуге қиындық туғызатын спамның тағы бір түрі — мысалы, Болгариядағы келісімшарттық бағдарламалау қызметтерін ұсынатын компаниялардың хаттары. Олар өтіп кетеді, өйткені мен де бағдарламашымын және бұл спамдар менің нақты хаттарымдағы сөздерге толы болып келеді.

Мен, бәлкім, алдымен жеке хабарландыру түріндегі хаттарға назар аударатын шығармын. Мұқият қарасам, олар мен менің шынайы хаттарым арасындағы статистикалық айырмашылықтарды таба аламын деп ойлаймын. Жазу стилі сөзсіз ерекшеленеді, бірақ оны ұстау үшін көпсөзді сүзгілеу қажет болуы мүмкін. Сондай-ақ, олардың url-ді қайталауға бейім екенін байқадым, ал заңды хатқа url қосқан адам бұлай жасамас еді [11].

Аутсорсинг түрін ұстау қиынға соғады. Тіпті сайтқа краулер жіберсеңіз де, статистикалық тұрғыдан айқын дәлел таба алмайсыз. Мүмкін жалғыз шешім — спамдарда жарнамаланатын домендердің орталық тізімі болар [12]. Бірақ мұндай хаттар көп болмауы керек. Егер қалған жалғыз спам тек Болгариядан келген келісімшарттық бағдарламалау қызметтерінің сұралмаған ұсыныстары болса, бәріміз басқа нәрсемен айналысуға көше алар едік.

Статистикалық сүзгілеу бізді шынымен сол деңгейге жеткізе ме? Білмеймін. Қазіргі уақытта жеке мен үшін спам мәселе емес. Бірақ спамерлер статистикалық сүзгілерді алдауға әлі байсалды түрде әрекеттенген жоқ. Олар кіріскен кезде не болады?

Желі деңгейінде жұмыс істейтін сүзгілерге мен аса сеніммен қарамаймын [13]. Егер айналып өтуге тұрарлық статикалық кедергі болса, спамерлер оны айналып өтуде өте епті келеді. Қазірдің өзінде Assurance Systems деп аталатын компания бар, ол сіздің хатыңызды Spamassassin арқылы өткізіп, оның сүзгіден өтіп-өтпейтінін айтып береді.

Желілік деңгейдегі сүзгілер мүлдем пайдасыз болмайды. Олар «opt-in» спамның барлығын, яғни Virtumundo және Equalamail сияқты шын мәнінде келісімге негізделген тізімдерді жүргізіп жатырмыз деп мәлімдейтін компаниялардың спамын жоюға жеткілікті болуы мүмкін. Оларды мәтінде не жазылғанына қарамастан, тек тақырыптамаларына қарап сүзуге болады. Бірақ тақырыптамаларды бұрмалауға немесе ашық релейлерді (open relay) пайдалануға дайын кез келген адам, соның ішінде порно спамерлердің көпшілігі, егер қаласа, белгілі бір хабарламаны желілік деңгейдегі сүзгілерден өткізе алады. (Әрине, бұл олар жібергісі келген хабарлама болмайды, бірақ бұл да бір нәтиже.)

Мен сенім артатын сүзгілер түрі — бұл әрбір жеке пайдаланушының хаттарына негізделіп ықтималдықтарды есептейтін сүзгілер. Олар тек жалған оң нәтижелерден аулақ болуда ғана емес, сонымен қатар сүзуде де әлдеқайда тиімді бола алады: мысалы, хабарламаның кез келген жерінен base-64 форматында кодталған алушының электрондық пошта мекенжайын табу — өте жақсы спам индикаторы.

Бірақ жеке сүзгілердің басты артықшылығы — олардың барлығы әртүрлі болады. Егер әркімнің сүзгілерінде әртүрлі ықтималдықтар болса, бұл спамерлердің оңтайландыру циклін — бағдарламашылар «түзету-компиляциялау-тестілеу» циклі деп атайтын процесті — өте баяулатады. Олар жұмыс үстеліндегі сүзгі көшірмесінен өткенше спамды жай ғана өзгертіп отырудың орнына, әрбір түзету үшін сынақ таратылымын жасауға мәжбүр болады. Бұл интерактивті ортасы (interactive toplevel) жоқ тілде бағдарламалау сияқты болар еді және мен мұны ешкімге тілемес едім.

Ескертпелер

[1] Пол Грэм. «Спамға қарсы жоспар» (A Plan for Spam). Тамыз 2002. http://paulgraham.com/spam.html.

Бұл алгоритмдегі ықтималдықтар Байес ережесінің дегенеративті жағдайын қолдану арқылы есептеледі. Мұнда екі жеңілдетілген болжам бар: белгілердің (яғни сөздердің) ықтималдықтары тәуелсіз және біз хаттың спам болуының априорлы ықтималдығы туралы ештеңе білмейміз.

Бірінші болжам мәтінді жіктеуде кең таралған. Оны қолданатын алгоритмдер «қарапайым Байестік» (naive Bayesian) деп аталады.

Екінші болжамды мен мына себепті жасадым: менің кіріс поштамдағы спамның үлесі күннен күнге (шын мәнінде, сағаттан сағатқа) қатты құбылып тұрғандықтан, жалпы априорлы қатынас болжаушы фактор ретінде пайдасыз болып көрінді. Егер сіз P(spam) және P(nonspam) екеуін де .5 деп қабылдасаңыз, олар қысқарып кетеді де, оларды формуладан алып тастауға болады.

Егер сіз Байестік сүзуді спамның спам емес хаттарға қатынасы тұрақты түрде өте жоғары немесе (әсіресе) өте төмен жағдайда қолданатын болсаңыз, априорлы ықтималдықтарды енгізу арқылы сүзгі өнімділігін жақсартуға болады. Мұны дұрыс істеу үшін қатынасты тәулік уақыты бойынша бақылау қажет болар еді, өйткені спам да, заңды хаттар көлемі де айқын тәуліктік заңдылықтарға ие.

[2] Патрик Пантел және Деканг Лин. «SpamCop-- A Spam Classification & Organization Program.» Proceedings of AAAI-98 Workshop on Learning for Text Categorization.

[3] Мехран Сахами, Сьюзан Дюмей, Дэвид Хекерман және Эрик Хорвиц. «A Bayesian Approach to Filtering Junk E-Mail.» Proceedings of AAAI-98 Workshop on Learning for Text Categorization.

[4] Ол кезде менде шамамен 4000 заңды хаттың ішінде нөлдік жалған оң нәтиже болды. Егер келесі заңды хат жалған оң нәтиже болса, бұл бізге .03% берер еді. Бұл жалған оң нәтижелер деңгейіне сенуге болмайды, бұл туралы кейінірек түсіндіремін. Мен бұл санды жалған оң нәтижелер деңгейі қандай болса да, оның 1,16%-дан аз екенін көрсету үшін ғана келтіріп отырмын.

[5] Билл Еразунис. «Sparse Binary Polynomial Hash Message Filtering and The CRM114 Discriminator.» Proceedings of 2003 Spam Conference.

[6] «Спамға қарсы жоспарда» мен .99 және .01 шекті мәндерін қолдандым. Корпустардың көлеміне пропорционалды шекті мәндерді пайдалану орынды сияқты. Қазір менде хаттың әрбір түрінен шамамен 10 000 шамасында болғандықтан, мен .9999 және .0001 қолданамын.

[7] Мұнда мен түзетуім керек кемшілік бар. Қазіргі уақытта «Subject*foo» жай «foo» болып дегенерацияланғанда, бұл сіз мен белгілегендерден басқа негізгі мәтіндегі немесе тақырыптама жолдарындағы «foo» кездесулерінің статистикасын алып жатқаныңызды білдіреді. Мен нақты нұсқалармен қатар жалпы «foo» статистикасын қадағалап, «Subject*foo» сөзін «foo»-ға емес, «Anywhere*foo»-ға дегенерациялауым керек. Регистр үшін де дәл солай: мен бас әріптерден кіші әріпке емес, кез келген регистрге дегенерациялауым керек.

Мұны бағалармен де жасау ұтымды болар еді, мысалы, «$129.99»-ды «$--9.99», «$--.99» және «$--»-ға дегенерациялау.

Сондай-ақ сөздерден олардың түбіріне дегенерациялауға болады, бірақ бұл корпустарыңыз аз болған алғашқы кезеңде ғана сүзу жылдамдығын жақсартуы мүмкін.

[8] Стивен Хаузер. «Statistical Spam Filter Works for Me.» http://www.sofbot.com.

[9] Жалған оң нәтижелердің барлығы бірдей емес және спамды тоқтату әдістерін салыстырған кезде мұны есте ұстаған жөн. Сүзгілер тудырған көптеген жалған оң нәтижелер сіз жіберіп алуға қарсы болмайтын спамға жақын хаттар болса, мысалы, қара тізімдер тудырған жалған оң нәтижелер жай ғана қате интернет-провайдерін таңдаған адамдардың хаттары болады. Екі жағдайда да сіз спамға жақын хаттарды ұстайсыз, бірақ қара тізімдер үшін бұл жақындық — физикалық, ал сүзгілер үшін — мәтіндік.

[10] Егер спам таратушылар токендерді бұлыңғырлауды шектен тыс меңгеріп, бұл проблемаға айналса, біз бос орындарды, нүктелерді, үтірлерді және т.б. алып тастап, шыққан бірізділіктен сөздерді сөздік көмегімен теріп алу арқылы жауап қайтара аламыз. Әрине, бұл тәсілмен бастапқы мәтінде көрінбеген сөздерді тауып алудың өзі спамның дәлелі болмақ.

Сөздерді теріп алу оңай болмайды. Бұл жай ғана сөз шекараларын қалпына келтіруден де көп нәрсені талап етеді; өйткені спам таратушылар әріптерді әрі қосады (``xHot nPorn cSite''), әрі тастап кетеді (``P#rn''). Мұнда машиналық көру саласындағы зерттеулер пайдалы болуы мүмкін, өйткені мұндай айла-шарғылар жететін шек — адамның көру қабілеті.

[11] Жалпы, спам хаттар кәдімгі электрондық хаттарға қарағанда көбірек қайталанады. Олар өз хабарламасын санаңызға әбден сіңдіргісі келеді. Қазіргі уақытта мен алғашқы 15 токенде қайталануларға жол бермеймін, себебі жіберуші белгілі бір жаман сөзді бірнеше рет қолданған жағдайда, жалған қателік туындауы мүмкін. (Менің қазіргі сүзгімде ``dick'' сөзінің спам ықтималдығы 0,9999-ға тең, бірақ ол сонымен бірге адамның есімі де.) Дегенмен, біз кем дегенде қайталануларды байқауымыз керек сияқты, сондықтан мен SpamProbe жүйесіндегі Brian Burton сияқты әр токеннен екеуге дейін рұқсат етіп көруім мүмкін.

[12] Спам таратушылар хабарламадағы қалған барлық нәрсені құрастыру үшін mad-lib әдістерін қолдануға көшкен кезде, Brightmail сияқты тәсілдер міне осы деңгейге дейін тоқырайтын болады.

[13] Кейде желі деңгейінде сүзгілеумен айналысуымыз керек, өйткені ол тиімдірек деген пікір айтылады. Мұны айтқанда адамдардың көбіне меңзейтіні: біз қазіргі уақытта желі деңгейінде сүзгілейміз және бәрін басынан бастағымыз келмейді. Бірақ сіз өз шешіміңізге сәйкестендіріп проблеманы бейімдей алмайсыз.

Тарихта ресурстардың тапшылығына қатысты дәйектер бағдарламалық жасақтаманы жобалау туралы пікірталастарда үнемі жеңіліс тауып келген. Адамдар оларды көбінесе басқа себептермен жасалған таңдауларын (әсіресе әрекетсіздікті) ақтау үшін ғана қолдануға бейім.

Осы мақаланың нобайларын оқып шыққаны үшін Sarah Harlin-ге, Trevor Blackwell-ге және Dan Giffin-ге, сондай-ақ осы сүзгі жұмыс істеп тұрған инфрақұрылымның басым бөлігі үшін Dan-ге қайта алғыс білдіремін.

Қатысты: