(Бу мәкаләдә Arc телен сынап карау өчен без төзегән спамнан сакланган веб-почта уку программасында кулланылган спам-фильтрлау алымнары тасвирлана. Яхшыртылган алгоритм Better Bayesian Filtering мәкаләсендә бәян ителә.)
Минемчә, спамны туктатырга мөмкин, һәм моны эчтәлеккә нигезләнгән фильтрлар ярдәмендә эшләргә кирәк. Спам җибәрүчеләрнең Ахиллес үкчәсе — аларның хәбәре. Сез куйган башка теләсә нинди киртәне алар урап уза ала. Кимендә, хәзергәчә шулай булды. Ләкин алар нинди генә булмасын, барыбер үз хәбәрләрен җиткерергә тиешләр. Әгәр без аларның хәбәрләрен таный торган программа яза алсак, моны урап узуның бернинди дә юлы калмаячак.
_ _ _
Алучы кеше өчен спам бик тиз таныла. Әгәр сез хатларыгызны укып, спамны чүпкә ташлап тору өчен берәр кешене ялласагыз, ул моны бернинди авырлыксыз эшләр иде. Бу процессны автоматлаштыру өчен, ясалма интеллектка барып җитмичә, безгә күпме эш башкарырга кирәк соң?
Минемчә, без бу проблеманы шактый гади алгоритмнар белән чишә алачакбыз. Хәтта ачыклавымча, хәзерге заман спамын аерым сүзләрнең спам булу ихтималлыкларының бары тик Байес комбинациясен генә кулланып та канәгатьләнерлек дәрәҗәдә яхшы фильтрларга була. Бераз көйләнгән (түбәндә тасвирланганча) Байес фильтрын кулланып, без хәзер 1000 спамнан 5-тән дә кимрәген генә үткәреп җибәрәбез һәм 0 ялган уңай нәтиҗәгә (false positive) иябез.
Статистик алым — кешеләр спам-фильтрлар язганда гадәттә беренче булып куллана торган алым түгел. Күпчелек хакерларның беренче инстинкты — спамның аерым сыйфатларын таный торган программа язарга тырышу. Сез спам хатларына карыйсыз да уйлыйсыз: бу бәндәләрнең миңа «Хөрмәтле дус» дип башланган яки бары тик баш хәрефләрдән генә торган һәм ахырында сигез өндәү билгесе куелган темалы хат җибәрергә нинди кыюлыклары җитте икән. Мин бу чүп-чарны кодның якынча бер юлы белән генә сөзеп чыгара алам.
Һәм сез шулай эшлисез дә, башта бу нәтиҗә бирә. Берничә гади кагыйдә сезгә килә торган спамның зур өлешен юк итәчәк. Хәтта бары тик «click» сүзен генә эзләү дә минем спам корпусындагы хатларның 79.7% өлешен эләктерәчәк, шул ук вакытта ялган уңай нәтиҗәләр нибары 1.2% тәшкил итәчәк.
Статистик алымны сынап караганчы, мин якынча алты ай буе спамның аерым билгеләрен эзләүче программа язу белән шөгыльләндем. Һәм шуны аңладым: спамның соңгы берничә процентын тану бик нык катлауланды, ә фильтрларны катгыйландырган саен мин күбрәк ялган уңай нәтиҗәләр ала башладым.
Ялган уңай нәтиҗәләр — ул ялгышлык белән спам дип билгеләнгән гаепсез хатлар. Күпчелек кулланучылар өчен чын кирәкле хатны югалту — спам алуга караганда бер тәртипкә начаррак, шуңа күрә ялган уңай нәтиҗәләр бирә торган фильтр — пациент өчен үлем куркынычы булган сыткы даруы кебек ул.
Кулланучы күбрәк спам алган саен, аның спам папкасында яткан бер гаепсез хатны күреп калу ихтималы шулкадәр кими. Һәм гаҗәп булса да, сезнең спам-фильтрларыгыз яхшырган саен, ялган уңай нәтиҗәләр тагын да куркынычрак була бара, чөнки фильтрлар чыннан да яхшы эшләгәндә, кулланучылар алар тоткан барлык нәрсәгә игътибар итми башлаячак.
Нигә мин статистик алымны сынап караудан шулкадәр озак тартынып йөргәнемне үзем дә белмим. Минемчә, бу үземнең спам билгеләрен танырга тырышуга бәйлелек барлыкка килүеннән иде, әйтерсең лә мин спам җибәрүчеләр белән ниндидер көндәшлек уены уйный идем. (Хакер булмаганнар моны еш кына аңламый, ләкин хакерларның күбесе бик көндәшлекчән.) Әмма мин статистик анализны сынап карагач, аның миңа караганда күпкә зирәгрәк булуын шундук күрдем. Әлбәттә, ул «virtumundo» һәм «teens» кебек сүзләрнең яхшы спам күрсәткечләре булуын ачыклады. Ләкин ул шулай ук «per», «FL» һәм «ff0000» да яхшы спам индикаторлары булуын тапты. Чынлыкта, «ff0000» (ачык кызыл төснең html коды) теләсә кайсы порнографик сүз кебек үк көчле спам күрсәткече булып чыкты.
_ _ _
Мин статистик фильтрлауны ничек башкаруымның кыскача сызымы монда. Мин бер спам корпусыннан һәм бер спам булмаган хатлар корпусыннан башлыйм. Хәзерге вакытта аларның һәрберсендә якынча 4000 хәбәр бар. Мин һәр корпустагы һәр хәбәрнең бөтен текстын, шул исәптән башлыкларны (headers) һәм эченә урнаштырылган html һәм javascript-ны сканерлыйм. Хәзерге вакытта мин хәреф-сан тамгаларын, сызыкчаларны, апострофларны һәм доллар билгеләрен токеннарның бер өлеше дип, ә калган бөтен нәрсәне токен аеручы дип саныйм. (Бәлки, монда яхшырту өчен урын бардыр.) Мин бары тик цифрлардан гына торган токеннарны санга сукмыйм, шулай ук html комментарийларын да төшереп калдырам, хәтта аларны токен аеручы дип тә исәпләмим.
Мин һәр токенның (хәзерге вакытта регистрны исәпкә алмыйча) һәр корпуста ничә тапкыр очравын саныйм. Бу этапта мин ике зур хэш-таблица алам: һәр корпус өчен берәр, алар токеннарны аларның очрашу саны белән бәйли.
Аннары мин өченче хэш-таблица ясыйм, бу юлы ул һәр токенны аны үз эченә алган хатның спам булу ихтималлыгы белән бәйли, мин аны түбәндәгечә исәплим [1]: (let ((g (* 2 (or (gethash word good) 0))) (b (or (gethash word bad) 0))) (unless (< (+ g b) 5) (max .01 (min .99 (float (/ (min 1 (/ b nbad)) (+ (min 1 (/ g ngood)) (min 1 (/ b nbad))))))))) монда word — ихтималлыгын исәпләгән токен, good һәм bad — беренче этапта мин ясаган хэш-таблицалар, ә ngood һәм nbad — яраклаштырылганча спам булмаган һәм спам хатлар саны.
Мин моны ике мөһим детальне күрсәтү өчен код рәвешендә аңлаттым. Мин ялган уңай нәтиҗәләрдән качу өчен ихтималлыкларны бераз тайпылдырырга (ягъни яхшы хатлар файдасына үзгәртергә) телим, һәм сынаулар аша good таблицасындагы барлык саннарны икеләтә арттыру яхшы ысул булуын таптым. Бу гадәти хатларда очраклы рәвештә очрый торган сүзләр белән беркайчан да очрамый диярлек сүзләрне аерырга ярдәм итә. Мин бары тик барысы бергә биштән артык тапкыр очраган сүзләрне генә исәпкә алам (чынлыкта, икеләтә арттыру сәбәпле, спам булмаган хатларда өч тапкыр очрау да җитә). Һәм аннары бер корпуста булып, икенчесендә бөтенләй булмаган сүзләргә нинди ихтималлык билгеләргә дигән сорау туа. Тагын да сынаулар аша мин .01 һәм .99 саннарын сайладым. Бәлки, монда да көйләү өчен урын бардыр, ләкин корпус үскән саен, андый көйләү үзлегеннән үк барыбер башкарылачак.
Аеруча игътибарлылар шуны күрер: очрашулар санын исәпләү максатында һәр корпус бердәм озын текст агымы дип саналса да, спам ихтималлыгын исәпләгәндә бүлүче сыйфатында мин аларның гомуми озынлыгын түгел, ә һәрберсендәге хатлар санын кулланам. Бу ялган уңай нәтиҗәләрдән саклану өчен тагын бер кечкенә өстәмә саклык бирә.
Яңа хат килгәч, ул токеннарга бүленеп сканерлана, һәм иң кызыклы унбиш токен — кызыклылык аларның спам ихтималлыгы нейтраль .5 кыйммәтеннән никадәр ерак булуы белән үлчәнә — хатның спам булу ихтималлыгын исәпләү өчен кулланыла. Әгәр probs унбиш аерым ихтималлыкның исемлеге булса, сез берләштерелгән ихтималлыкны түбәндәгечә исәплисез: (let ((prod (apply #'* probs))) (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x)) probs))))) Гамәлдә туа торган сорауларның берсе — элек беркайчан да күрмәгән сүзгә, ягъни сүз ихтималлыкларының хэш-таблицасында булмаган сүзгә нинди ихтималлык билгеләргә. Мин, тагын да сынап карау юлы белән, моның өчен .4 санының яхшы булуын таптым. Әгәр сез беркайчан да бер сүзне күрмәгәнсез икән, ул, мөгаен, шактый зыянсыздыр; спам сүзләре барыбызга да бик яхшы таныш булырга омтыла.
Әлеге мәкалә азагындагы кушымтада бу алгоритмның реаль хатларга кулланылу мисаллары бар.
Хатны спам булу ихтималлыгы югарыдагы алгоритм буенча .9-дан артса, мин аны спам дип исәплим. Ләкин гамәлдә бу чикне кая куюым бик зур роль уйнамас иде, чөнки бик аз ихтималлыклар гына диапазон уртасына туры килә.
_ _ _
Статистик алымның бер зур өстенлеге — сезгә шулкадәр күп спам укырга кирәк түгел. Соңгы алты ай эчендә мин туры мәгънәсендә меңләгән спам укыдым, һәм бу чыннан да кешенең күңелен төшерә торган нәрсә. Норберт Винер әйткәнчә, коллар белән көч сынашсаң, үзең дә колга әйләнәсең, һәм спам җибәрүчеләр белән ярышуда да шуңа охшаш хурлыклы бер нәрсә бар. Спамның аерым сыйфатларын тану өчен спамчының башына керергә омтылырга кирәк, ә мин, дөресен әйткәндә, спамчыларның башында мөмкин кадәр азрак вакыт үткәрергә телим.
Әмма Байес алымының чын өстенлеге, әлбәттә, нәрсәне үлчәгәнегезне төгәл белүегездә. SpamAssassin кебек билгеләрне танучы фильтрлар хатка ниндидер спам «баллы» куялар. Байес алымы исә реаль ихтималлык билгели. «Балл» белән бәйле проблема шул: аның нәрсәне аңлатканын беркем дә белми. Кулланучы аның нәрсәне аңлатканын белми, ләкин иң начары — фильтрны эшләүче үзе дә белми. Эчендә «sex» сүзе булган хатка ничә балл бирелергә тиеш? Ихтималлык, әлбәттә, ялгыш булырга мөмкин, ләкин аның нәрсәне аңлатуы яки аны исәпләү өчен дәлилләрне ничек берләштерергә кирәклеге турында бернинди каршылык юк. Минем корпусым нигезендә, «sex» сүзе хатның спам булуының .97 ихтималлыгын күрсәтә, шул ук вакытта «sexy» сүзе .99 ихтималлыгын күрсәтә. Һәм шулай ук һичшиксез булган Байес кагыйдәсе буенча, ике сүзне дә үз эченә алган хат, башка дәлилләр булмаган (ихтималы аз булган) очракта, 99.97% спам булу мөмкинлегенә ия.
Ихтималлыкларны үлчәгәнгә күрә, Байес алымы хаттагы барлык дәлилләрне дә — яхшыларын да, начарларын да исәпкә ала. Спамда гадәттән тыш сирәк очрый торган сүзләр (мәсәлән, «though», «tonight» яки «apparently») ихтималлыкны киметүгә, «unsubscribe» һәм «opt-in» кебек начар сүзләрнең аны арттыруы кебек үк тигез өлеш кертә. Шуңа күрә, очраклы рәвештә эченә «sex» сүзе кергән гади, гөнаһсыз хат спам дип тамгаланмаячак.
Иң яхшысы, әлбәттә, ихтималлыклар һәр кулланучы өчен аерым исәпләнергә тиеш. Мин эчендә «Lisp» сүзе булган бик күп хатлар алам һәм (хәзергәчә) бу сүз кергән бер генә дә спам алганым юк. Димәк, андый сүз асылда миңа хат җибәрү өчен бер төр серсүз булып тора. Минем элегрәк эшләгән спам-фильтрлау программамда кулланучы шундый сүзләр исемлеген төзи ала иде, һәм алар кергән хатлар фильтрларны автомат рәвештә узып китә иде. Үз исемлегемә мин «Lisp» кебек сүзләрне, шулай ук үземнең почта индексымны керттем, шуңа күрә онлайн-заказлардан килгән (башка очракта шактый спамга охшаш булып яңгыраучы) квитанцияләр үтә ала иде. Мин үземне бик зирәк дип уйладым, ләкин Байес фильтрының минем өчен шул ук нәрсәне эшләвен, өстәвенә мин уйламаган бик күп сүзләрне табуын күрдем.
Мин башында безнең фильтрлар 1000 хаттан 5-тән дә кимрәк спам үткәрә һәм 0 ялган уңай нәтиҗә бирә дигәндә, үз хатларымның корпусына нигезләнеп үз почтамны фильтрлау турында әйтәм. Ләкин бу саннар алдавыч түгел, чөнки мин нәкъ менә шул алымны яклыйм: һәр кулланучының почтасын ул үзе ала торган спам һәм спам булмаган хатларга нигезләнеп фильтрларга кирәк. Асылда, һәр кулланучының ике бетерү төймәсе булырга тиеш: гади бетерү һәм спам дип бетерү. Спам дип бетерелгән һәр нәрсә спам корпусына китә, ә калган бар нәрсә спам булмаган корпуска керә.
Сез кулланучыларга башлангыч база фильтры бирә аласыз, ләкин ахыр чиктә һәр кулланучының ул чынбарлыкта ала торган хатларына нигезләнгән үз сүз ихтималлыклары булырга тиеш. Бу (а) фильтрларны нәтиҗәлерәк итә, (б) һәр кулланучыга спамның үз төгәл билгеләмәсен билгеләргә мөмкинлек бирә, һәм (в) бәлки иң мөһиме, спамчыларга хатларны фильтрлар аша үтәрлек итеп көйләүне кыенлаштыра. Әгәр фильтрның «акылының» зур өлеше аерым мәгълүмат базаларында булса, спамнарны бары тик башлангыч база фильтрлары аша гына үтәрлек итеп көйләү аларның аерым кулланучыларның төрле һәм күпкә яхшырак өйрәтелгән фильтрлары аша ничек үтүенә бернинди гарантия бирмәячәк.
Эчтәлеккә нигезләнгән спам-фильтрлау еш кына «ак исемлек» (whitelist) — хатлары бернинди фильтрлаусыз кабул ителә торган җибәрүчеләр исемлеге белән берләштерелә. Андый ак исемлек төзүнең бер гади ысулы — кулланучы кайчан да булса хат язган һәр адресның исемлеген саклау. Әгәр почта уку программасында спам дип бетерү төймәсе бар икән, сез шулай ук кулланучы гади чүп буларак бетергән һәр хатның җибәрүче адресын өсти аласыз.
Мин ак исемлекләрне яклыйм, ләкин фильтрлауны яхшырту ысулы буларак түгел, ә исәпләү куәтен саклап калу ысулы буларак. Элек мин ак исемлекләр фильтрлауны җиңеләйтер дип уйлый идем, чөнки сезгә бары тик сез элек беркайчан да ишетмәгән кешеләрнең генә хатларын фильтрларга туры килер иде, ә сезгә беренче тапкыр хат җибәрүче кеше сезгә нәрсә әйтә алуында әхлак кагыйдәләре белән чикләнгән. Сез инде таный торган кеше сезгә җенси мөнәсәбәтләр турында сөйләп хат яза ала, ләкин беренче тапкыр язучы кешенең алай эшләве шикле. Проблема шунда: кешеләрнең берничә электрон почта адресы булырга мөмкин, шуңа күрә яңа җибәрүче адресы аның сезгә беренче тапкыр язуын гарантияләми. Иске дустыгызның (бигрәк тә ул хакер булса) сезгә кинәт кенә яңа адрес аша хат җибәрүендә бернинди гаҗәп нәрсә юк, шуңа күрә таныш булмаган адреслардан килгән хатларны артык кырыс фильтрлап, ялган уңай нәтиҗәләр куркынычы тудырырга ярамый.
Нигездә, минем фильтрларым үзләре үк билгеле бер ак исемлекне (һәм кара исемлекне) үз эченә ала, чөнки алар бөтен хәбәргә, шул исәптән башлыкларга нигезләнгән. Шуңа күрә алар ышанычлы җибәрүчеләрнең электрон почта адресларын һәм хәтта алардан миңа хат килә торган юлларны да «беләләр». Һәм алар спам турында да нәкъ шуны ук, шул исәптән сервер исемнәрен, почта программасы версияләрен һәм протоколларын беләләр.
_ _ _
Әгәр мин спам-фильтрлауның хәзерге темпларын саклап кала алам дип уйласам, бу проблеманы чишелгән дип санар идем. Ләкин бүгенге спамның күпчелек өлешен фильтрлый алу зур нәрсәне аңлатмый, чөнки спам эволюция кичерә. Чыннан да, бүгенге көнгә кадәр күпчелек антиспам алымнары яңа, чыдам бөҗәкләр төрен барлыкка китерүдән башка бернәрсә дә эшләмәгән пестицидлар кебек булды.
Мин Байес фильтрларына күбрәк өмет баглыйм, чөнки алар спам белән бергә үсә. Шуңа күрә спамчылар аерым сүзләргә нигезләнгән гади фильтрларны алдау өчен «cock» урынына «c0ck» куллана башлагач, Байес фильтрлары моны автоматик рәвештә сизә. Чынлыкта, «c0ck» «cock» сүзенә караганда күпкә фаш итүче дәлил булып тора, һәм Байес фильтрлары моның никадәр көчлерәк икәнен төгәл беләләр.
Шулай да, спам-фильтрлау планын тәкъдим итүче һәркем шушы сорауга җавап бирә белергә тиеш: әгәр спамчылар сезнең нәкъ нәрсә эшләгәнегезне белсәләр, алар сезне ничек җиңә алырлар иде? Мәсәлән, минемчә, әгәр тикшерү суммасына (checksum) нигезләнгән спам-фильтрлау җитди киртәгә әйләнсә, спам җибәрүчеләр хәбәр текстын тудыру өчен mad-lib алымнарына күчәчәкләр.
Байес фильтрларын җиңәр өчен, спамчыларга үз хатларын кабатланмас итү яки начар сүзләр кулланудан туктау гына җитмәячәк. Аларга үз хатларын сезнең гадәти хатларыгыздан аерылгысыз итәргә туры киләчәк. Һәм бу, минемчә, аларны бик каты чикләячәк. Спам күбесенчә реклама тәкъдимнәреннән тора, шуңа күрә, әгәр сезнең даими почтагыз тулысынча сату тәкъдимнәреннән тормаса, спам хатлары барыбер башка характерда булачак. Һәм спам җибәрүчеләргә, әлбәттә, үзләренең бөтен инфраструктурасын үзгәртергә (һәм даими үзгәртеп торырга) туры киләчәк, чөнки югыйсә хәбәр текстына ни генә эшләсәләр дә, башлыклар Байес фильтрлары өчен элеккечә үк начар күренәчәк. Башлыкларны гаепсез итеп күрсәтү никадәр кыен булачагын белер өчен спамчылар кулланган инфраструктура турында белемем җитми, ләкин минем фаразлавымча, бу хәбәрнең үзен шиксез итеп ясауга караганда да катлаулырак булачак.
Алар башлыклар проблемасын чишә алдылар дип уйласак та, киләчәкнең спамы якынча шушындый булачак: «Сәлам. Сезгә моны карарга кирәк дип уйладым: http://www.27meg.com/foo» — чөнки эчтәлеккә нигезләнгән фильтрлау спамчыга сату тәкъдиме ясау өчен якынча шуның кадәр генә урын калдырачак. (Чынлыкта, хәтта моны да фильтрлар аша үткәрү кыен булачак, чөнки хаттагы калган бар нәрсә нейтраль булса, спам ихтималлыгы тулысынча сылтамага (url) бәйле булачак, ә аны нейтраль күрсәтү өчен шактый көч куярга туры киләчәк.)
Спам җибәрүчеләр — үз шәхесләрен яшерергә дә тырышмаган «opt-in» исемлекләрен йөртүче бизнес вәкилләреннән алып, порносайтларны алга сөрүче спам тармаклары өчен почта серверларын кулга төшерүче бәндәләргә кадәр төрле кешеләр. Әгәр без фильтрлау ярдәмендә аларның мөмкинлекләрен өстә китерелгән хатлар дәрәҗәсенә кадәр киметсәк, бу спектрның «легаль» өлешендәге спамчыларны бизнестан чыгарырга тиеш; алар төрле штат законнары аркасында үз спамнарының ни өчен спам түгеллеге һәм «язылудан» ничек баш тартырга кирәклеге турында стандарт текстларны кертергә тиешләр, ә андый текстны тану бик җиңел.
(Элек мин катгыйрак законнар спамны киметәчәк дип ышану беркатлылык дип уйлый идем. Хәзер исә уйлавымча, катгыйрак законнар спамчылар җибәрә торган спам күләмен киметмәсә дә, алар фильтрларга алучылар чынбарлыкта күрә торган спам күләмен киметергә һичшиксез ярдәм итә ала.)
Бөтен спектр буенча караганда, әгәр сез спамчылар ясый алган сату тәкъдимнәрен чикләсәгез, сез аларны һичшиксез бизнестан мәхрүм итәчәксез. Бу бизнес сүзе — истә тотарга кирәк булган мөһим сүз. Спамчылар — эшмәкәрләр. Алар спам җибәрәләр, чөнки ул эшли. Ул эшли, чөнки җавап бирү дәрәҗәсе коточкыч түбән булса да (иң яхшы очракта бер миллионга 15, чагыштыру өчен — каталоглар таратуда бер миллионга 3000), аларга төшкән чыгымнар гамәлдә юк дәрәҗәсендә. Бу чыгым алучылар өчен бик зур — спамны бетерүгә бер секунд вакыт сарыф иткән һәр миллион алучы өчен якынча 5 кеше-атна, ләкин спамчы моның өчен түләргә тиеш түгел.
Шулай да спам җибәрү спамчыга билгеле бер чыгымнар китерә. [2] Шуңа күрә без җавап бирү күрсәткечен никадәр төшерә алсак — фильтрлау ашамы, әллә спамчыларны үз тәкъдимнәрен сыекландырырга мәҗбүр итүче фильтрлар ярдәмендәме — спам җибәрүне үзен аклый дип тапкан бизнес төрләре шулкадәр азрак калачак.
Спамчыларның нәкъ шундый төр сату алымнарын куллану сәбәбе — җавап бирү дәрәҗәсен арттыру. Бу спамчының башына керүгә караганда да җирәнгечерәк булырга мөмкин, ләкин әйдәгез спамга җавап бирүче кешенең башына күз салыйк. Бу кеше я гаҗәп дәрәҗәдә беркатлы, яисә үзенең җенси кызыксынуларын тирәнтен кире кагучы. Теләсә кайсы очракта да, спам безгә никадәр җирәнгеч яки акылсыз тоелса да, аларга ул дулкынландыргыч тоела. Әгәр алар дулкынландыргыч булып яңгырамаса, спамчылар бу сүзләрне әйтмәс иделәр. Ә «сезгә моны карарга кирәк дип уйладым» дигән сүз спам алучыны хәзер спамчылар әйтә торган нәрсәләр кебек үзенә тарта алмаячак. Нәтиҗә: әгәр дулкынландыргыч сату тәкъдимнәре кертә алмаса, спам маркетинг коралы буларак азрак нәтиҗәле була бара, һәм аны кулланырга теләүче бизнес вәкилләре азая.
Ахыр чиктә төп җиңү әнә шунда. Мин спам-фильтрлау программасын бу чүп-чарга башка карарга теләмәгәнгә яза башладым. Ләкин әгәр без спамны фильтрлап чыгаруны җитәрлек дәрәҗәдә яхшы үзләштерсәк, ул эшләми башлаячак, һәм спам җибәрүчеләр чыннан да аны җибәрүдән туктаячак.
_ _ _
Спам белән көрәшүнең программалардан башлап законнарга кадәр барлык ысуллары арасында Байес фильтрлавы иң нәтиҗәлесе булачак дип ышанам. Ләкин спамга каршы төрле алымнарны никадәр күбрәк куллана башласак, шулкадәр яхшырак булыр дип тә уйлыйм, чөнки спамчыларны кысучы теләсә кайсы чара фильтрлауны җиңеләйтәчәк. Һәм хәтта эчтәлеккә нигезләнгән фильтрлау кысаларында да, берьюлы күп төрле программа тәэминаты кулланылса, яхшы булачак дип исәпләмим. Төрле фильтрлар никадәр күбрәк булса, спамчыларга аларны үтәр өчен спамнарны көйләү шулкадәр авыррак булачак.
Кушымта: Фильтрлау мисаллары
Мин бу мәкаләне язган вакытта килгән спамның бер мисалы монда. Бу спамдагы иң кызыклы унбиш сүз: qvp0045 indira mx-05 intimail $7500 freeyankeedom cdo bluefoxmedia jpg unsecured platinum 3d0 qves 7c5 7c266675. Бу сүзләр — спамга хас булганча, башлыклар һәм хәбәр текстының катнашмасы. Шулай ук спам өчен типик нәрсә — бу сүзләрнең һәрберсенең минем базадагы спам ихтималлыгы .99 булуы. Чынлыкта, ихтималлыгы .99 булган сүзләр унбиштән артык, һәм болар — беренче күренгән унбише генә.
Кызганычка каршы, бу әлеге хатны Байес кагыйдәсен куллануның кызыксыз бер мисалы итә. Ихтималлыкларның кызыклы төрлелеген күрү өчен безгә бу чыннан да бик үзенчәлекле спамга карарга кирәк.
Бу спамдагы иң кызыклы унбиш сүз, үзләренең ихтималлыклары белән бергә: madam 0.99 promotion 0.99 republic 0.99 shortest 0.047225013 mandatory 0.047225013 standardization 0.07347802 sorry 0.08221981 supported 0.09019077 people's 0.09019077 enter 0.9075001 quality 0.8921298 organization 0.12454646 investment 0.8568143 very 0.14758544 valuable 0.82347786. Бу юлы дәлилләр — яхшы һәм начарның катнашмасы. «Shortest» кебек сүз — «madam» яки «promotion» гаепне раслаган кебек үк, гаепсезлек өчен дәлил булып тора. Ләкин барыбер гаепләү ягы көчлерәк. Әгәр сез бу саннарны Байес кагыйдәсе буенча берләштерсәгез, килеп чыккан ихтималлык .9027 тәшкил итә.
«Madam» сүзе, һичшиксез, «Dear Sir or Madam» дип башланган спамнардан алынган. Алар бик таралмаган, ләкин «madam» сүзе минем гадәти хатларымда беркайчан да очрамый, һәм бөтен мәсьәлә чагыштырмада тора.
«Republic» югары балл ала, чөнки ул Нигерия мошенникларының хатларында еш очрый, шулай ук Корея һәм Көньяк Африка телгә алынган спамнарда бер-ике тапкыр күренә. Сез аны бу спамны ачыкларга очраклы рәвештә генә ярдәм итә дип әйтә аласыз. Ләкин спам ихтималлыкларын тикшергәндә, мин мондый очраклылыкларның бик күп булуын һәм аларның ялгыш юнәлешкә түгел, ә нәкъ менә дөрес якка тарту гадәтенә ия булуларын күрдем. Бу очракта, «Republic» сүзенең Нигерия хатларында һәм бу спамда очравы бөтенләй дә очраклы түгел. Аз үскән илләр белән бәйле шикле эш тәкъдимнәренең тулы бер сыйныфы бар, һәм үз чиратында аларның үзләренең республика булуларын ачыктан-ачык күрсәткән (чөнки алар асылда алай түгел) атамаларга ия булу ихтималы зуррак.[3]
Икенче яктан, «enter» — чын хата. Ул күбесенчә язылудан баш тарту күрсәтмәләрендә очрый, ләкин монда бөтенләй гөнаһсыз мәгънәдә кулланылган. Бәхеткә, статистик алым шактый тотрыклы һәм нәтиҗәләр бозыла башлаганчы бик күп хаталарга түзә ала.
Чагыштыру өчен, монда фильтрлар аша үтеп кергән шул сирәк кошның — спамның бер мисалы бирелгән. Ни өчен? Чөнки бары тик сукыр очраклык аркасында гына анда минем чын хатларымда очрый торган сүзләр бик күп булып чыкты: perl 0.01 python 0.01 tcl 0.01 scripting 0.01 morris 0.01 graham 0.01491078 guarantee 0.9762507 cgi 0.9734398 paul 0.027040077 quite 0.030676773 pop3 0.042199217 various 0.06080265 prices 0.9359873 managed 0.06451222 difficult 0.071706355. Монда берничә яхшы хәбәр бар. Беренчедән, бу хат, мөгаен, программалаштыру телләре буенча белгеч булмаган һәм Моррис исемле яхшы дусты булмаган кешенең фильтрлары аша үтә алмас иде. Гадәти кулланучы өчен мондагы беренче биш сүзнең барысы да нейтраль булыр иде һәм спам ихтималлыгына йогынты ясамас иде.
Икенчедән, сүз парларына нигезләнгән фильтрлау (түбәндә карагыз) моны бик җиңел эләктерер иде дип уйлыйм: «cost effective», «setup fee», «money back» — шактый фаш итүче нәрсәләр. Һәм, әлбәттә, алар миңа (яки мин әгъзасы булган челтәргә) спам җибәрүне дәвам итсәләр, «Hostex» үзе үк спам сүзе буларак танылыр иде.
Ниһаять, монда гаепсез бер хат үрнәге китерелә. Аның иң кызыклы унбиш сүзе түбәндәгечә: continuation 0.01 describe 0.01 continuations 0.01 example 0.033600237 programming 0.05214485 i'm 0.055427782 examples 0.07972858 color 0.9189189 localhost 0.09883721 hi 0.116539136 california 0.84421706 same 0.15981844 spot 0.1654587 us-ascii 0.16804294 what 0.19212411. Мондагы сүзләрнең күбесе хатның гаепсез икәнен күрсәтә. Ике начар исле сүз бар: «color» (спамчылар төсле шрифтларны яраталар) һәм «California» (ул фикерләрдә һәм формалардагы менюларда очрый), ләкин алар «continuation» һәм «example» кебек ачыктан-ачык гаепсез сүзләрне җиңәр өчен җитәрлек түгел.
«Describe» сүзенең шулкадәр чиста булып чыгуы кызык. Ул минем 4000 спамның берсендә дә очрамаган. Мәгълүматлар мондый сюрпризлар белән тулы булып чыга. Спам текстларын анализлаганда аңлый торган нәрсәләрнең берсе — спамчылар телнең никадәр тар бер өлешендә эш итәләр. Нәкъ менә шул факт һәм теләсә кайсы кулланучының үз хатларының үзенчәлекле сүзлек составы Байес фильтрлавын яхшы ысул итә.
Кушымта: Башка фикерләр
Мин әлегә сынап карамаган бер фикер — аерым сүзләр буенча түгел, ә сүз парлары, хәтта өчлекләре буенча фильтрлау. Бу ихтималлыкны шактый төгәлрәк билгеләргә мөмкинлек бирергә тиеш. Мәсәлән, минем хәзерге мәгълүматлар базасында "offers" (тәкъдимнәр) сүзенең ихтималлыгы .96 тигез. Әгәр сез ихтималлыкларны сүз парларына нигезләсәгез, "special offers" (махсус тәкъдимнәр) һәм "valuable offers" (кыйммәтле тәкъдимнәр) ихтималлыгы .99 булыр иде, ә, әйтик, "approach offers" ("бу алым тәкъдим итә" дигәндәге кебек) ихтималлыгы .1 яки аннан да кимрәк булыр иде.
Мин моны әлегә эшләмәдем, чөнки аерым сүзләр буенча фильтрлау болай да бик яхшы эшли. Ләкин бу, спамны ачыклау кыенлашса, фильтрларны көчәйтү өчен урын бар дигәнне аңлата. (Кызык, сүз парларына нигезләнгән фильтр, асылда, кирегә эшләүче Марков чылбыры текст генераторы булыр иде.)
Спамның үзенчәлекле билгеләре (мәсәлән, to: кырында алучының адресын күрмәү), әлбәттә, спамны тануда әһәмияткә ия. Аларны бу алгоритмда виртуаль сүзләр буларак карарга мөмкин. Мин, мөгаен, киләчәк версияләрдә моны эшләрмен, ким дигәндә иң ачык спам билгеләре өчен. Үзенчәлекләрне танучы спам-фильтрлар күп кенә детальләрдә дөрес эшли; аларга дәлилләрне берләштерү өчен гомуми система җитми.
Спам булмаган билгеләрне тану спам билгеләрен танудан да мөһимрәк булырга мөмкин. Ялган уңай нәтиҗәләр (false positives) шулкадәр зур борчу тудыра ки, алар гадәттән тыш чаралар таләп итә. Мин, мөгаен, киләчәк версияләрдә махсус ялган уңай нәтиҗәләрдән качу өчен эшләнгән икенче дәрәҗә сынау өстәрмен. Әгәр хат бу икенче дәрәҗә фильтрларны эшләтеп җибәрсә, аның спам ихтималлыгы бусагадан югары булса да, ул кабул ителәчәк.
Бу икенче дәрәҗә фильтрлауның Байес ысулына нигезләнүен көтмим. Ул котылгысыз рәвештә ad hoc кына түгел, ә фаразларга нигезләнгән булачак, чөнки ялган уңай нәтиҗәләр саны закончалыкларны күрерлек дәрәҗәдә зур булмаячак. (Ничек кенә булмасын, резерв система төп система белән бер үк технологиягә таянмаса, яхшырак та.)
Киләчәктә мин сынап карый алырлык тагын бер нәрсә — электрон хатның аерым өлешләренә өстәмә игътибар бирү. Мәсәлән, хәзерге спамның якынча 95% ында алар сезнең керергә теләгән сайтның url-адресы бар. (Калган 5% сездән телефон номерына шалтыратуны, электрон почта яки АКШ почта адресы аша җавап бирүне, яки сирәк очракларда билгеле бер акцияләрне сатып алуны сорый.) Мондый очракларда хатның спам булу-булмавын билгеләү өчен url үзе генә дә гамәлдә җитәрлек.
Домен исемнәре (немец теленнән башка) электрон хаттагы башка тексттан шуның белән аерылып тора: алар еш кына бергә ябыштырылган берничә сүздән тора. Гомуми очракта исәпләү ягыннан кыйммәт булса да, аларны бүлгәләргә тырышып карарга кыйммәт. Әгәр фильтр элек "xxxporn" токенын беркайчан да күрмәгән булса, аның аерым спам ихтималлыгы .4 булачак, ә "xxx" һәм "porn" аерым алганда (минем корпуста) ярашлы рәвештә .9889 һәм .99 ихтималлыкка ия, һәм берләштерелгән ихтималлык .9998 тәшкил итәчәк.
Спамерлар үз хәбәрләренең текстында шикле сүзләрне куллануны туктатырга мәҗбүр булган саен, домен исемнәрен бүлгәләү мөһимрәк булыр дип көтәм. (Ip-адреслы url, әлбәттә, берничә система администраторының хатларыннан кала, үзеннән-үзе гаепләүче билге булып тора.)
Спамерлар таныткан url-адресларның бергәләп алып барыла торган исемлеген булдыру яхшы фикер булыр иде. Начар ниятле яки белдексез кертемнәргә юл куймас өчен, безгә Raph Levien өйрәнгән төр буенча ышаныч метрикасы кирәк булыр иде, ләкин бездә мондый нәрсә булса, ул теләсә кайсы фильтрлау программасына көчле ярдәм бирер иде. Бу шулай ук бойкотлар өчен дә уңайлы нигез булыр иде.
Шикле url-адресларны тикшерүнең тагын бер юлы — кулланучы аны телгә алган хатка караганчы ук сайтка кереп чыгу өчен эзләү краулерын җибәрү булыр иде. Сез электрон хатны бәяләгән кебек үк, сайтны бәяләү өчен дә Байес фильтрын куллана аласыз, һәм сайтта табылган һәр нәрсә хатның спам булу ихтималлыгын исәпләүгә кертелергә мөмкин. Башка биткә җибәрүче (redirect) url, әлбәттә, аеруча шикле булыр иде.
Минемчә, чыннан да яхшы булачак бер уртак проект — спамның гигант корпусын туплау. Зур һәм чиста корпус — Байес фильтрлавын яхшы эшләтүнең ачкычы. Байес фильтрлары бу корпусны турыдан-туры башлангыч мәгълүмат буларак куллана алыр иде. Ләкин мондый корпус башка төр фильтрлар өчен дә файдалы булыр иде, чөнки аны аларны сынау өчен кулланырга мөмкин.
Мондый корпус төзү кайбер техник проблемалар тудыра. Әлбәттә, явыз ниятле яки белдексез кертемнәрне булдырмас өчен безгә ышаныч метрикалары кирәк булачак. Шулай ук корпустагы хатлардан шәхси мәгълүматны (address-to һәм cc кырларын гына түгел, ә, мәсәлән, язылудан баш тарту url-адресларына бирелгән һәм еш кына алучының адресын үз эченә алган аргументларны да) бетерү юллары кирәк булачак. Әгәр кем дә булса бу проектны үз өстенә алырга теләсә, бу дөнья өчен яхшы эш булыр иде.
Кушымта: Спамны билгеләү
Минемчә, спамның нәрсә икәнлеге турында уртак бер караш бар, ләкин ачык билгеләмә булуы файдалы булыр иде. Спамның үзәк корпусын булдырырга яки хәтта спам-фильтрлау күрсәткечләрен мәгънәле чагыштырырга теләсәк, безгә моны эшләргә кирәк булачак.
Башлап җибәргәндә, спам — соралмаган коммерция электрон хаты түгел. Әгәр минем күршеләремнән кемдер яхшы хәлдәге иске Raleigh өч тизлекле велосипедын эзләгәнемне ишетеп, сату турында тәкъдим белән хат язса, мин шатланыр гына идем, әмма бу хат коммерцияле дә һәм соралмаган да булыр иде. Спамның билгеләүче сыйфаты (чынлыкта, аның raison d'etre — яшәү мәгънәсе) аның соралмаган булуында түгел, ә автоматлаштырылган булуында.
Спамның гадәттә коммерцияле булуы да бары тик очраклылык кына. Әгәр кемдер, мәсәлән, ниндидер сәяси идеягә ярдәм итү өчен күпләп хатлар җибәрә башласа, бу порно сайтны рекламалаган хат кебек үк спам булыр иде.
Мин спамны соралмаган автоматлаштырылган электрон почта дип билгеләргә тәкъдим итәм. Димәк, бу билгеләмәгә спамның күп кенә юридик билгеләмәләренә кермәгән кайбер хатлар да керә. Лобистлар йогынтысында булган юридик билгеләмәләр, кагыйдә буларак, алучы белән "гамәлдәге мөнәсәбәтләре" булган компанияләр җибәргән хатларны чыгармый калдыра. Әмма компаниядән нәрсәдер сатып алу, мәсәлән, сез алардан даими хатлар җибәрүне сорадыгыз дигәнне аңлатмый. Әгәр мин онлайн-кибеттән нәрсәдер сатып алсам, һәм алар аннары миңа спам ташкыны яудырса, бу барыбер спам булып кала.
Спам җибәрүче компанияләр еш кына "язылудан баш тарту" (unsubscribe) мөмкинлеге бирә яки, спам алуны туктатырга теләсәгез, сайтларына кереп "хисап язмасы көйләүләрен" үзгәртүне сорый. Бу хатның спам булуын туктату өчен җитәрлек түгел. Баш тартмау — ризалык белдерүгә тиң түгел. Әгәр алучы хат алырга теләвен белдереп, ачык тамгаланган шакмакка (беренче куелышы «юк» булган) үз ихтыяры белән тамга куймаган булса, димәк, бу — спам.
Кайбер эшлекле мөнәсәбәтләрдә сез билгеле бер төр хатларны күз уңында тотып сорыйсыз. Интернет аша заказ биргәндә, сез квитанция һәм заказның җибәрелүе турында белдерү алырга күз уңында тотасыз, дип уйлыйм. Verisign миңа домен исеменең срогы чыгарга торуын кисәтеп хат җибәрсә, каршы түгелмен (һәрхәлдә, алар аның гамәлдәге регистраторы булса). Әмма Verisign миңа электрон коммерция сайтын төзү буенча БУШЛАЙ Кулланма тәкъдим итеп хат җибәрсә, менә бу — спам.
Искәрмәләр:
[1] Бу мәкаләдәге мисаллар, ышанасызмы, юкмы, җиңелрәк аңлашылсын өчен Common Lisp теленә тәрҗемә ителде. Монда сурәтләнгән кушымта без әле чыкмаган яңа Lisp диалекты булган Arc телен сынап карау өчен язган бер кушымта иде.
[2] Хәзерге вакытта бер миллион спам җибәрү өчен иң түбән бәя якынча 200 доллар булып тора. Бу бик арзан, һәр спам өчен центның 1/50 өлеше. Ләкин спамның 95% ын фильтрлап чыгу, мәсәлән, билгеле бер аудиториягә ирешү өчен спамерларның чыгымнарын 20 тапкырга арттырыр иде. Моны капларлык маржа бик азларда гына бар.
[3] Гамәли тәҗрибә кагыйдәсе буенча: ил исеме алдыннан никадәр күбрәк сыйфатлама торса, аның хакимнәре шулкадәр коррупциягә баткан була. «X Социалистик Халык Демократик Республикасы» дип аталган ил, мөгаен, сез яшәргә теләгән соңгы урын булыр иде.
Моның караламаларын укыган өчен Sarah Harlin'га; фильтрлау турындагы берничә яхшы идея өчен һәм безнең почта инфраструктурасын булдырган өчен Daniel Giffin'га (ул шулай ук Arc җитештерү интерпретаторын яза); спам турында күп фикер алышулар өчен Robert Morris, Trevor Blackwell һәм Erann Gat'ка; ышаныч метрикалары буенча киңәшләре өчен Raph Levien'га; статистика буенча киңәшләре өчен Chip Coldwell һәм Sam Steingold'ка рәхмәт белдерәм.
Өстәмә мәгълүмат: