Ուբերատիպնները Հայաստանում /Убер /The Uber-types in Armenia: ggTaxi, aria BlackCar and Яндекс.Такси
minas_a
Չնայած Հայաստանում էլի կան Uber-ի տիպի տաքսիներ բայց ստեղ միայն սրանցից խոսքը կգնա

"Step-by-step with successful people" - https://www.facebook.com/events/1702595826691828/
event-ում Viktor Mnatsakanyan–ը պատմեց ի թիվս այլ բաների իր aria BlackCar (http://www.blackcar.am/) տաքսի ծառայության մասին, նա aria–ի/BlackCar-ի հիմնադիր–տնօրենն է։

Սկզբից ճիշտն ասած մի տեսակ անհասկանանլի էր ինչն ա տարբերությունը վերընշված տաքսիյից և նաև մի տեսակ անսովոր էր
լսել Uberատիպ տաքսիյից Հայաստանում ու չհնչի ggtaxi (https://www.ggtaxi.com/) բառը, բայց վերջում, հարցերի ժամանակ վերկացավ մի աղջիկ ու հարցրեց,
ու պարզ դառձավ ինչ ի նկատի ուներ Վիկտորը, երբ ասում էր, որ իրանցը «Լիմուզին–սերվիս» ա։
Նրա կարծիքով. հիմնավորելով որ 90–ականներից տաքսիների կիլոմետրի գինը 100դրամ չի փոխվել
արժեքը պետք ա լինի մինիմում 150 դրամ իսկ ցանկալի ա 300, իրենց մոտի գինն ա` 350 դրամ մի կիլոմետրի համար…
ետ պահին հարցերից մեծ մասը պրծան։

Ինչ–որ անհասկանալի քննադատություն էր թե ggTaxi–ի մեքենաները համարյա բոլորը տարբեր մակնիշի են և (о ужас!)
տարբեր գույների,
Առավելություն էր նշվում որ նրանց մեքենաները սև են, իսկ վարորդները ընտրված և հագնում են կոստյում և «գալստոկ–բաբոչկա»
Որ վարորդներին կարելի ա վստահել, և որ վարորդները անցել են հատուկ էթիկայի կուրսեր, օրինակ, ով

Ամենացավալին էն եր որ app-ը չթույլատրվեց քաշել ոչ Հայաստանի ոչ ԱՄՆ–ի Apple-Store account-ներից (դա հետո պարզեցի)
իսկ սայթը մոբայլների համար չեր. – ետ տեսա տեղում.

Այդ հարցիս պատասխանն եր, որ բանակցությունների մեջ են Яндекс.Такси-ի հետ (https://taxi.yandex.ru/), Яндекс.Такси-ն գալու է Հայաստան, մինչև ետ կայքը չեն կարգավորելու։
Պարզվեց որ Яндекс.Такси–ն ունի տարբեր սերվիսի մակարդակներ, տարբեր գներոով ու նրանց "limo service"–ի համար էլ ինչ–որ
բարձր մակարդակ կա։

Հետաքրքիր և "գաղթնի" նյուանս էր որ բուն օրիգինալ Uber-ի app-ը ինչ–որ կերպ Հայաստանում (եթե ճիշտ հասկացա) ցույց ա
տալիս Yandex.taxi-ի առաջարկները։

Հիմա էլ իրոք Яндекс.Такси–ն ուզում ա գալ Հայաստան և փնտրում ա директор.
https://www.facebook.com/tigrankh/posts/10153326793226403

(Google-ում որոնելիս միշտ առաչինն ա բերում http://mobitaxi.am/ սրանց մասին ընդհանրապես բան չգիտեմ, բացի այն որ գովազդի վրա Google adwords-ի միջոցավ մեծ խախսեր են անում։)

Ուրեմն կշարունակենք հետևել Ուբերատիպ տաքսիների շուկային

***
Ընդմիջման ժամանակ խոսացի նույն ինքը Viktor Mnatsakanyan–ի հետ, արդեն հարցրեցի aria Realty-ի մասին,
որի մասին չհասցրեց պատմել, և որը ավելի հետաքրքիր էր։
էս մեկը ոնց որ լիներ AirBnB-Հայաստանում տարբերակը,
+ կարելի ա հենց app–ից զանգել բնակարանի տիրոջը, փնտրեք iOS–ում հենց "aria Realty" բառերով app։

***
Ընդմիջման վերջում հայտնվեցին նրան պաշտեղ կարյերիստ երիտասարդները իսկ հետո էլ եկավ Հայկոն (դերասան–սցենարիստ
Հայկ Մարությանը) երիտասարդները շատացան ու անցան իրենց սովորական «սելֆի աստղերի հետ» սեսսիաին։

План для спама - Пол Грэм, 2002, перевод на русский. Часть 3/3
minas_a
План для спама. Пол Грэм, Август 2002
 Перевод на русский - Minas Abrahamyan, 2015
 Оригинал "A Plan for Spam - Paul Graham, 2002" тут: http://www.paulgraham.com/spam.html
#часть 3/3. окончание

Мои благодарности Саре Харлин за чтение эскизов этого эссе; Дэниелу Гиффину (который также пишет продакшн версию интерпретатора языка Arc) за нескольких хороших идей о фильтрации, и создание нашей почтовой инфраструктуры; Роберту Моррису, Тревору Блэкуэллу и Эранн Гэт за многочисленные дискуссии о спаме; Рафу Левину за совет о метриках доверия; а также Чипу Колдуэллу и Сэм Стейнголд за совет о статистике.

---
Вы найдете эту статью и 14 других в книге "Hackers & Painters"[*] ("Хакеры и Художники")
[*] http://www.amazon.com/gp/product/0596006624

Дополнительную информацию см. в статьях:

 * FAQ План для спама - Plan for Spam FAQ - http://www.paulgraham.com/spamfaq.html
 * Улучшенная байесовская фильтрация - Better Bayesian Filtering - http://paulgraham.com/better.html
 * Фильтры, способные отбиваться - Filters that Fight Back -  http://www.paulgraham.com/ffb.html
 * Уничтожат ли фильтры спам? - Will Filters Kill Spam? - http://www.paulgraham.com/wfks.html
 * Японский перевод - Japanese Translation - http://www.shiro.dreamhost.com/scheme/trans/spam-j.html
 * Испанский перевод - Spanish Translation - http://kapcoweb.com/p/docs/translations/a_plan_for_spam/a_plan_for_spam-es.html
 * Китайский перевод http://people.brandeis.edu/%7Eliji/_private/translation/plan.htm - Chinese Translation
 * Вероятность - Probability  http://www.paulgraham.com/naivebayes.html
 * Спам - это другое - Spam is Different  http://www.paulgraham.com/spamdiff.html
 * Фильтры против Чёрных Списков - Filters vs. Blacklists http://www.paulgraham.com/falsepositives.html
 * Метрики доверия - Trust Metrics- http://www.levien.com/free/tmetric-HOWTO.html
 * Исследование фильтрации - Filtering Research http://www.paulgraham.com/bayeslinks.html
 * Патент Microsoft - Microsoft Patent http://www.paulgraham.com/msftpatent.html
 * Статья в Slashdot - Slashdot Article http://developers.slashdot.org/article.pl?sid=02/08/16/1428238&mode=thread&tid=156
 * Неверный путь - The Wrong Way http://office.microsoft.com/Assistance/9798/newfilters.aspx
 * LWN: Сравнение фильтров - LWN: Filter Comparison  http://lwn.net/Articles/9460/
 * Фильтр CRM114 достиг точности в 99,87% - CRM114 gets 99.87% http://www.paulgraham.com/wsy.html

#конец части 3/3. конец всего эссе.
## не помещалось все в одном посте LJ и пришлось резать на куски и публиковать так

План для спама - Пол Грэм, 2002, перевод на русский. Часть 2/3
minas_a
План для спама. Пол Грэм, Август 2002
 Перевод на русский - Minas Abrahamyan, 2015
 Оригинал "A Plan for Spam - Paul Graham, 2002" тут: http://www.paulgraham.com/spam.html
#продолжение, часть 2/3

С точки зрения получателя, спам легко распознаваем. Если бы вы наняли кого-нибудь, чтобы читать вашу почту и игнорировать спам, у него не было бы с этим никаких проблем. Если не прибегать к созданию ИИ, насколько многое мы должны проделать, чтобы автоматизировать этот процесс?

Я думаю, мы сможем решить эту проблему довольно простыми алгоритмами. На самом деле, я обнаружил, что вы можете вполне приемлемо фильтровать современный спам, используя ничего больше, чем байесовскую комбинацию вероятностей спамовости отдельных слов. Используя немного настроенный (как описано ниже) байесовский фильтр, мы теперь промахиваемся менее чем на 5 сообщений из 1000 спамовых сообщений (неправильно распознавая спам как не-спам), с 0 количеством ложных срабатываний.

Статистический подход  обычно не является тем первым подходом, который пробуют, когда пишут фильтры спама. Первым инстинктом большинства хакеров будет попробовать написать программу, которая распознает индивидуальные свойства спама. Вы смотрите на спамовые письма, и думаете, про наглость этих парней, пытающихся отправить мне письмо, начинающееся на "Дорогой Друг", или с темой письма, сплошь состоящей из прописных букв и завершающейся восемью восклицательными знаками. Я могу отфильтровать такие штуки практически одной строчкой кода.

Вы так и делаете, и сначала это работает. Несколько простых правил откусят большой кусок от вашего входящего спама. Простой поиск слова "click"("щелкните") поймает 79,7% электронных писем в моем корпусе спамовых текстов, выдавая лишь 1,2% ложноположительных результатов.

Я потратил почти шесть месяцев в написании программы, которая искала бы индивидуальные характеристики (features) спама, до того, как я попробовал статистический подход. Я обнаружил, что распознование нескольких последних процентов спама стало очень трудным, и что усиливая строгость фильтров, я получал больше ложных срабатываний.

Ложные срабатывания (ложноположительные результаты, false positives) – это нормальные ("невиновные") письма, которые были ошибочно распознаны как спам. Для большинства пользователей пропажа нормального ("законного") письма на порядок хуже получения спама, так что фильтр, выдающий ложные срабатывания, это как лечение угрей, несущее с собой также и риск смерти пациента.

Чем больше спама пользователь получает, тем менее вероятно, что он заметит одно нормальное ("невиновное") письмо, лёжащее в папке для спама. И, как ни странно, чем лучше становятся ваши спамовые фильтры, тем более опасными становятся ложные срабатывания, потому что, когда фильтры действительно хороши, пользователи всё больше больше склонны игнорировать всё, что они поймают.

Я не знаю, почему я так долго избегал попытки статистического подхода. Я думаю, это было из-за того, что я пристрастился к попыткам самому определить спамовые характеристики, как будто я играл в какую-то состязательную игру со спамерами. (Не-хакеры часто не осознают этого, но большинство хакеров являются весьма соревнующимися.) Когда я попробовал статистический анализ, я сразу обнаружил, что он был намного умнее меня. Он обнаружил, конечно, что такие термины как "virtumundo" (спамовая контора в США, аналог "Центра изучения английского" -прим.пер.) и "teens"("подростки") являются хорошими показателями спама. Но он также обнаружил, что слова "per" и "FL" и "ff0000" тоже являются хорошими показателями спама. На самом деле оказалось, что "ff0000" (HTML код для цвета "ярко-красный") является настолько же хорошим показателем спама, как и любое порнографическое слово.

_ _ _


Вот набросок того, как я делаю статистическую фильтрацию. Я начинаю с одного корпуса спамовых и одного корпуса неспамовых писем. В этот момент в каждом из них есть около 4000 сообщений. Я сканирую весь текст, включая заголовки и встроенный 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. Это помогает различать слова, которые иногда возникают в "добропорядочной" ("законной") почте, и слова, которые там почти никогда не встречаются. Я рассматриваю только слова, которые встречаются всего более пяти раз (на самом деле, из-за удвоения, вхождение трех раз в неспамовой почте будет достаточно). И затем есть вопрос о том, какой вероятность задать словам, которые встречаются в одном корпусе, но не встречаются в другом. Снова методом проб и ошибок я выбрал 0.01 и 0.99. Здесь может быть пространство для настройки, но, с ростом корпуса, такая настройка, в любом случае, произойдёт автоматически.

Особенно наблюдательные отметят, что, в то время как я рассматриваю, в целях счёта частот, каждый корпус как сплошной длинный поток текста, я использую количество писем в каждом вместо использования их общей длины в качестве делителя в вычислении спамовых вероятностей. Это добавляет еще одно небольшое смещение для защиты от ложных срабатываний.

Когда новая письмо приходит, оно сканируется в токены (лексемы), и самые интересные пятнадцать токенов, в которых интересность измеряется тем, насколько далёка их спамовая вероятность, от нейтрального 0.5, используются для того, чтобы вычислить вероятность того, что почта является спамом. Положим probs – это список из пятнадцати индивидуальных вероятностей, тогда вычисление скомбинированной[*] вероятности будет таким:

[*] http://www.paulgraham.com/naivebayes.html

(let  ((prod (apply #'* probs)))
  (/ prod (+ prod (apply #'* (mapcar #'(lambda (x)
                                         (- 1 x))
                                     probs)))))

Один вопрос возникает на практике – какую вероятность присвоить слову, которое вы никогда не встречали, т. е. такому, которое отсутствует в хэш-таблице вероятностей слова. Я нашел, снова путем проб и ошибок, что является 0,4 хорошим числом для этого. Если вы никогда не видели слово прежде, это, вероятно, довольно "невиновное" слово; спамовые слова, как правило, все слишком знакомы.

В приложении в конце есть примеры этого алгоритма, примененного к реальным письмам.

Я считаю письмо спамом, если вышеприведенный алгоритм даёт ей вероятность быть спамом более 0.9. Но на практике это не очень важно каким этот порог я поставлю, потому что лишь несколько значений вероятности для писем оказываются в середине диапазона.

_ _ _


Одним большим преимуществом статистического подхода является то, что вы не вынуждены читать так много спама. За последние шесть месяцев, я читал буквально тысячи спамовых писем, и это, действительно, своего рода деморализует. Норберт Винер сказал, если вы конкурируете с рабами, то вы становитесь рабом, и есть что-то аналогично унизительное в соперничестве со спамерами. Чтобы распознать индивидуальные характеристики спама, вы должны попытаться проникнуть в мозг спамера, и, честно говоря, я хочу, потратить как можно меньше времени в умах спамеров, как это возможно.

Но реальное преимущество байесовского подхода, конечно, состоит в том, что вы знаете, что вы измеряете. Фильтры, распознающие характеристики, такие как признание SpamAssassin назначают электронным письмам некие спамовые "баллы". Байесовский подход присваивает настоящую вероятность. Проблема с "баллами" состоит в том, что никто не знает, что они означают. Пользователь не знает что они означают, но что еще хуже, этого не знает и сам разработчик фильтра. Сколько баллов должно получить письмо за то, что в нем есть слово "секс"? Вероятность, конечно, может быть ошибочной, но  мало двусмысленности в том, что она означает, или в том, как данные (признаки) должны быть скомбинированы для её вычисления. Основываясь на моем корпусе, слово "секс" указывает вероятность 0,97 того, что  содержащее его письмо будет спамом, в то время как "сексуальные" ("sexy") выдает вероятность 0,99. И правило Байеса, столь же недвусмысленное, гласит, что письмо, содержащее оба слова имело бы, в (маловероятном) отсутствии  каких-либо других доказательств, 99,97% шансов быть спамом.

Потому что это измерение вероятности, и байесовский подход учитывает все улики в электронной почте, и хорошие, и плохие. Непропорционально редко возникающие в спаме слова (такие как "though"("однако") или "сегодня вечером" или "очевидно"), так же способствуют снижению спамовой вероятности, как плохие слова, такие как "отписаться" и "подписаться" способствуют её увеличению. Так что, "невиновное" в других отношениях письмо, которое, как вдруг оказалось, содержит слово «секс», не будет помечено как спам.

В идеале, конечно, вероятности должны рассчитываться индивидуально для каждого пользователя. Я получаю много писем, содержащих слово "Lisp", и (пока) ни одного спамового, у которого оно бы было. Так что, такое слово, это как своего рода настоящий пароль для отправки мне почты. В моём более раннем программе для фильтрации спама пользователь мог  настроить список таких слов, и почта, содержащая их, автоматически прошла бы фильтры. В свой список я ставил такие слова, как "Lisp", а также мой почтовый индекс  для того, чтобы такие письма, (в другом отношении считаемые за спам) подтверждающие онлайн заказы смогли бы дойти. Я думал, что я очень умён, но я счёл, что байесовский фильтр сделал для меня такую же вещь, но более того, он обнаружил много слов о которых я и не думал.

Когда я сказал в начале, что наши фильтры пропускают менее 5 сообщений спама на 1000, с 0 ложных срабатываний, я говорил о фильтрации мою почты на основе корпуса моей почты. Но эти цифры не вводят в заблуждение, потому что это тот подход который я защищаю: фильтровать письма каждого пользователя на основе спамовых и неспамовых писем, которые он получает. По сути, каждый пользователь должен иметь две кнопки удаления писем: обычное удаление и "удалить как спам". Все удаленное как спам идет в спамовый корпус, а все остальное идет в неспамовый корпус.

Вы можете начать фильтровать для пользователей с начального фильтра, но в конечном счете каждый пользователь должен иметь свои собственные пословные вероятности основанные на той почте что он получает. Это (a) делает фильтры более эффективными, (b) позволяет каждому пользователю задать свое собственное точное определение спама и (c) возможно, самое лучшее, это делает трудным для спамеров настройку писем для обхода через фильтры. Если большинство "мозгов" фильтра будут находиться в индивидуальных базах данных, то тогда простая настройка спамовых писем на пробитие через изначальные настроенные  фильтры не будет ничего гарантировать в том, как хороши они будут в  прохождении фильтров отдельных пользователей, изменчивых. от пользователя к пользователю, и гораздо более натренированных.

Фильтрация спама на основе содержания часто сочетается с белым списком, т.е. списком отправителей, сообщения от которых могут быть приняты без фильтрации. Простой способ построения такого белого списка это содержать список адресов, которым пользователь когда-либо посылал письмо. Если читалка почты имеет кнопку "удаление как спам", тогда вы можете также добавлять туда (в белый список) адреса отправителей (поле "От:") каждого письма, которое  пользователь удалил как обычный мусор (т.е. не спам).

Я сторонник белых списков, но, больше как способ сэкономить вычислений, чем как способ улучшать фильтрацию. Раньше я думал, что белые списки сделали бы фильтрацию проще, потому что вам пришлось бы фильтровать электронную почту только от людей, о которых вы никогда не слышали, и некто отправляющий вам почту в первый раз был бы вынужден придерживаться некоей конвенции в том, что он может написать вам. Кто-то, кого вы уже знаете, мог бы послать вам письмо, с разговорами о сексе, но кто-то отправляющий вам почту в первый раз не будет, скорее всего так делать. Проблема в том, люди могут иметь более одного адреса электронной почты, так что новый адрес отправителя ("От:") не гарантирует, что отправитель пишет вам в первый раз. Это не является необычным для старого друга (особенно, если он хакер) внезапно отправить вам письмо с новым адресом отправителя, так что вы не можете рисковать ложными срабатываниями путем особенно строгой фильтрации почты от неизвестных адресов.

В некотором смысле, однако, мои фильтры сами воплощают что-то вроде белого списка (и чёрного списка), потому что они основаны на целых сообщениях, включая заголовки. Так что в этой мере, они "знают" адреса электронной почты надежных отправителей и даже маршрутов, по которым почта приходит от них ко мне. И они знают столько же о спаме, включая имена серверов, почтовых программ, версий и протоколов.

_ _ _


Если бы я думал, что я могу поддерживать постоянными текущие процентные доли фильтрации спама, я бы считал, что эта проблема решена. Но уметь отфильтровывать большинство современного спама, не очень большое достижение, так как спам эволюционирует. В самом деле, большинство антиспамовых техник[*] до сих пор были как пестициды, которые делают не более того, что создают новую, устойчивую породу жучков.

[*] http://www.paulgraham.com/falsepositives.html

Но я больше надеюсь на байесовские фильтры, потому что они эволюционируют вместе со спамом. Так что, в то время как спамеры начинают использовать "c0ck" вместо "cock", чтобы уклониться от простодушных спам-фильтров, основанных на отдельных словах, байесовские фильтры обнаружат это автоматически. Даже более того, «c0ck» является гораздо более изобличающим доказательством, чем «cock» и байесовские фильтры точно знают насколько более.

Тем не менее, каждый, кто предлагает план для фильтрации спама, должен уметь ответить на вопрос: если бы спамеры знали что именно вы делаете, насколько успешно они могли бы пройти через ваш фильтр? Например, я думаю, что, если фильтрация спама основанная на контрольной сумме станет серьёзным препятствием, спамеры просто переключатся на техники mad lib* для генерации тела сообщений. (* mad lib -- американская игра в процессе которой игроки заменяют слова в тексте c сохранением части речи или иного контекста http://en.wikipedia.org/wiki/Mad_Libs -пер.)

Чтобы победить  байесовске фильтры, спамерам не было бы достаточно сделать свои письма уникальными или прекратить использование отдельных неприличных слов. Им бы пришлось сделать свои письма неотличимыми от вашего обычного письма. И это, я думаю, будет серьезно их сдерживать. Спам в большинстве своем это торговые презентации (pitches), так что, если ваша обычная почта не вся целиком состоит из торговых презентаций, спам будет неизбежно иметь другой характер. И спамерам также, конечно, пришлось бы изменить (и продолжать изменять) всю свою инфраструктуру, потому что иначе заголовки выглядели бы так же плохо как когда-то байесовские фильтры, независимо от того что они сделали с телом сообщений. Я недостаточно знаю об инфраструктуре, которую спамеры используют, чтобы знать, насколько трудным было бы заставить выглядеть "невиновными" заголовки, но моя догадка состоит в том, что это было бы ещё труднее, чем заставлять выглядеть "невиновным" тело сообщения.

Предполагая, что они могли бы решить проблему заголовков, спам будущего, вероятно, выглядел бы чем-то вроде этого:

  Привет всем. Думаю, вы должны посмотреть это:
  http://www.27meg.com/foo

потому, что это примерно столько же торговой презентации сколько пространства оставит спамерам фильтр на основе содержания. (На самом деле, даже этому будет трудно пройти фильтры, потому что, если все остальное в электронной почте является нейтральным, вероятность спамовости будет зависеть от URL, и потребуются некоторые усилия, чтобы сделать его выглядящим нейтрально.)

Диапазон спамеров - от бизнеса работающего c так называемыми списками подписки (opt-in lists), которые даже не пытаются скрыть кем они являются, до ребят, которые угоняют почтовые сервера для отправки спама по продвижению порносайтов. Если мы используем фильтрацию, чтобы сократить его выбор до писем подобных приведенному выше, это должно почти поставить спамеров в "законный" конец спектра, выдавив их за рамки бизнеса; спамеры будут чувствовать себя вынужденными согласно различным государственным законам, включить стандартный текст, про то, почему что их спам не является спамом, и как отменить вашу "подписку", и такого рода текст легко распознавать.

(Раньше я думал, что было бы наивно полагать, что строгие законы будут уменьшать количество спама. Сейчас я думаю, что, в то время как более строгие законы не могут уменьшать количество спама, который спамеры отправляют, они безусловно могут помочь фильтрам уменьшить количество спама, которое получатели действительно увидят.)

Вдоль всего спектра, если ограничить коммерческие презентации, которые могут делать спамеры, вы неизбежно будете стремится вывести их из бизнеса. Слово "бизнес" является важным, чтобы запомнить. Спамеры – бизнесмены. Они шлют спам, потому что это работает. Это работает, потому что, хотя доля откликнувшихся  отвратительно низкая (в лучшем 15 на миллион, против 3000 на миллион для рассылки писем по каталогу), стоит это им практически ничего. Стоимость огромна для получателей, около 5 человеко-недель на каждый миллион получателей, которые проводят секунду чтобы удалить спам, но спамеры не будут оплачивать это.

Однако, отправка спама все же чего-то стоит спамеру. [2] Так что, чем меньшей мы сможем сделать долю откликнувшихся, или фильтруя, или используя фильтры вынуждающие спамеров разбавить свои торговые презентации, тем меньше бизнесов сочтёт стоящим своих хлопот посылать спам.

Причина, по которой спамеры используют те виды торговых презентаций[*] которые они используют в том, что они это делают для увеличения доли отклика. Это, возможно, даже более отвратительно, чем проникновение в мозги спамера, но давайте быстро взглянем изнутри в мозги кого-то, кто откликается на спам. Этот человек либо поразительно доверчив либо находится в глубоком отрицании своих сексуальных интересов. В любом случае, спам, отталкивающий либо идиотской, каким он нам кажется, для них он вдохновляющий. Спамеры не писали бы таких вещей, если бы они не звучали волнующе. И тексты вроде таких: "думаю, что вы должны посмотреть это" просто близко не имели бы рычага влияния на получателя спама, так же как и другие вещи того сорта, которые спамеры сейчас говорят. Результат: если он не может содержать продающих коммерческих презентаций, спам становится менее эффективным в качестве маркетингового движка, и меньше фирм хотят его использовать.
[*] http://www.milliondollaremails.com/

Это – крупная победа в конце концов. Я начал писать программное обеспечение для фильтрации спама, потому что я не хочу больше быть вынужденным смотреть на некоторые вещи. Но, если мы станем достаточно хорошими в фильтрации спама, он перестанет работать, и спамеры на самом деле перестанут слать его.

_ _ _


Из всех подходов борьбы со спамом, от программного обеспечения до законов, я считаю, что байесовская фильтрация будет просто наиболее эффективным. Но я также думаю, что чем больше различных видов антиспамовых усилий мы предпринимем, тем лучше, потому что любая мера, которая сдерживает спамеров, будет вести к тому чтобы делать фильтрацию более лёгкой. И даже в мире фильтрации, основанной на содержании, я думаю, что это будет хорошо, если есть много различных видов программного обеспечения, используемого одновременно. Чем больше есть разных  фильтров, тем труднее будет для спамеров настроить свой спам, чтобы пройти через них.



Приложение: Примеры фильтрации

Вот[*] пример спама, который пришёл в то время, как я писал эту статью. Пятнадцать самых интересных слов в этом спама являются:
[*] http://lib.store.yahoo.net/lib/paulgraham/spam1.txt

qvp0045
indira
mx-05
intimail
$7500
freeyankeedom
cdo
bluefoxmedia
jpg
unsecured
platinum
3d0
qves
7c5
7c266675

Слова – смесь материала из заголовков и тела сообщений, что типично для спама. Также типично для спама, что каждое из этих слов имеет спамовую вероятность, в моей базе данных, 0,99. На самом деле есть более пятнадцати слов с вероятностями 0,99, а эти -  просто первые пятнадцать встреченных.

К сожалению, это делает это письмо скучным примером использования правила Байеса. Чтобы увидеть интересное разнообразие вероятностей мы должны посмотреть на этот[*] на самом деле довольно нетипичный спам.
[*] http://lib.store.yahoo.net/lib/paulgraham/spam2.txt

Пятнадцатью самых интересных слов в этом спаме, с их вероятностями, являются:

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" такое же доказательство невиновности, как слово вроде "мадам" или "продвижение" -- доказательство вины. Но всё еще доводы за вину более вески. Если вы скомбинируете эти числа в соответствии с правилом Байеса, в результирующая вероятность будет 0,9027.

"Мадам" явно из спама начинающегося на: "Дорогой Сэр или Мадам". Они не очень распространены, но слово "мадам" никогда не встречается в моих "законных" письмах, и такое соотношение говорит о всем.

"Республика" имеет высокие баллы, потому что это слово часто появляется в спамовых письмах нигерийских мошенническов, а также встречается один или два раза в спаме, ссылающемся на Корею и Южную Африку. Вы могли бы сказать, что это случайность, что это, таким образом, помогает идентифицировать этот спам. Но я обнаружил, при детальном рассмотрении спамовой вероятности, что есть много таких случайностей, и они имеют необъяснимую тенденцию толкать вещи в правильном направлении, а не в неправильном. В таком случае, это не совсем случайно, что слово "Республика" встречается у нигерийском спаме и также в этом спаме. Есть целый класс сомнительных деловых предложений, включающих менее развитые страны, а те, в свою очередь, скорее будут иметь имена, которые явно указывают (потому что они ими не являются), что они - республики.[3]

С другой стороны, "enter" – настоящий промах. Слово встречается обычно в инструкциях по отписке от  рассылок, но здесь оно используется полностью невиновным образом. К счастью статистический подход является довольно устойчивым и может терпеть немало промахов, прежде чем результаты начинают становиться совсем негодными.

Для сравнения, вот[*] пример той редкой птицы, спама, который проходит через фильтры. Почему? Потому что по чистой случайности письмо оказалось заполненным словами, которые встерчаются в моей реальной электронной почте:
[*] http://lib.store.yahoo.net/lib/paulgraham/hostexspam.txt

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" сама была бы распознана в качестве спамового термина.

Наконец, вот[*] невиновное письмо. Его пятнадцать самых интересных слов следующие:
[*] http://lib.store.yahoo.net/lib/paulgraham/legit.txt

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 спамовых писем. Данные, оказывается, полны таких сюрпризов. Одна из вещей, вы узнаете, когда вы анализируете спамовые тексты, это как сузить подмножество языка в котором спамеры работают. Этот факт, взятый вместе с не менее характерным "словарем" почты каждого отдельного пользователя, и делает байесовую фильтрацию хорошим выбором.

Приложение: Больше идей

Одна идея, которую я ещё не пробовал, состоит в том, чтобы профильтроваться по парам слов или даже по тройкам, а не по отдельным словам. Это должно дать гораздо более точную оценку вероятности. Например, в моей текущей базе данных, слово "предложения" имеет вероятность 0,96. Если бы вы основывали вероятности на парах слов, в конечном счете получились бы "специальные предложения" и "ценные предложения"  с вероятностями 0.99 и предположим "подход предлагает" (как часть "этот подход предлагает"), имеющими вероятность 0.1 или меньше.

Причина, по которой я не сделал это, состоит в том, что фильтрация по отдельным словам уже работает и так хорошо. Но это означает, что есть место, чтобы усилить фильтры, если спам станет обнаруживать все труднее. (Любопытно, что фильтр на основе пар слов будет в на самом деле текстовым генератором как цепью Маркова, работающей в обратном направлении.)

Специфические характеристики спама (например, скрытый адрес получателя в поле письма "Кому:") имеет, конечно, ценность в распознавании спама. Их можно рассматривать в этом алгоритме, рассматривая их в качестве виртуальных слов. Я, наверное, сделаю это в будущих версиях, по крайней мере, для нескольких из самых вопиющих показателей спама. Фильтры. распознающие характеристики спама правы во многих деталях; чего им недостаёт – общей дисциплины для комбинирования доказательств.

Распознавание характеристик не-спама может быть важнее, чем распознавание характеристик спама. Ложные срабатывания - это такое беспокойство что они требуют чрезвычайных мер. Я, вероятно, в будущих версиях добавлю второй уровень тестирования, сконструированный специально, чтобы избежать ложноположительных результатов. Если письмо инициирует этот второй уровень фильтров, то оно будет принято, даже если его спамовая вероятность будет выше порога.

Я не ожидаю, что этот второй уровень фильтрации будет байесовским. Это неизбежно будет не только созданным специально для этой цели, этого уровня, но также основанным на предположениях, потому что число ложных срабатываний не будет стремиться быть достаточно большим, чтобы обнаружить закономерности. (Во всяком случае, хорошо, чтобы резервная система не полагалась на те же технологии, что и основная система).

Другая вещь, которую я могу попробовать в будущем, состоит в том, чтобы сосредоточить дополнительное внимание на конкретных частях письма. Например, около 95% от текущего спама включает в себя URL сайта, который они хотят чтобы вы посетили. (Остальные 5% хотят, чтобы вы назвали номер телефона, ответили по емейлу или на почтовый адрес США, или в некоторых случаях, чтобы купить определенные акции.) Гиперссылки в таких случаях практически достаточно самой по себе, чтобы определить, является ли адрес электронной почты спамом.

Доменные имена отличаются от остального текста в электронной почте (если она не на немецком), в том, что они часто состоят из нескольких слов склеенных вместе. Хотя это в общем случае вычислительно дорого, но может стоит попытаться разделить их. Если фильтр никогда не видел раньше лексему "xxxporn", он будет иметь отдельную спамовую вероятность 0,4, в то время как "xxx" и "porn" по отдельности имеют вероятности (в моём корпусе) 0,9889 и 0,99 соответственно и совместную вероятность 0,9998.

Я ожидаю, что разложение доменных имен станет более важным, как спамеры постепенно будут вынуждены прекратить использование компрометирующих слов в тексте своих сообщений. (Гиперссылка с IP-адресом, конечно, крайне уличающий знак, за исключением почты небольшого количества системных администраторов.)

Может быть хорошей идеей, иметь совместно поддерживаемый список URL-адресов, которые продвигают спамеры. Мы тогда нуждылись бы в метрике доверия типа той, что исследовались Рэф-Левиеном, чтобы предотвратить злонамеренные или некомпетентные заявки в такой список, но, если бы у нас была такая вещь, она бы предоставила поддержку любой программе фильтрации. Она также являлась бы удобной основой для бойкотов.

Другой способ проверить сомнительные URL состоял бы в том, чтобы послать паука веб-робота посетить сайт до того, как пользователь заглянул в письмо, упоминающее его. Вы могли бы так же использовать байесовский фильтр, чтобы оценить сайт так, как вы использовали бы для письма, и всё, что находилось на сайте, могло бы быть включено в вычисление вероятности письма быть спамом. Гиперссылка, которая ведет к редиректу, конечно, была бы особенно подозрительной.

Совместный проект, который я думаю, действительно был бы хорошей идеей  - это был бы сбор гигантский корпуса спама. Большой, чистый корпус является ключом к тому, чтобы сделать байесовскую фильтрацию хорошо работающей. Байесовские фильтры на самом деле могли бы использовать корпус, как входные данные. Но такой корпус был бы так же полезным для других типов фильтров, потому что он мог бы использоваться, чтобы протестировать их.

Создание такого корпуса представляет некоторые технические проблемы. Конечно, нам были бы нужны метрики доверия, чтобы предотвратить злонамеренные или некомпетентные вписывания. Нам также нужны были бы способы стирания личной информации (не только лишь адреса-кому и в полях CC (копия-кому), но также, например, в параметрах URL для отписки, которые часто содержат "адреса-Кому" в закодированной форме) из писем в корпусе. Если кто-то захочет взяться за этот проект, это будет хорошо для мира.

Приложение: Определение спама

Я думаю, есть примерный консенсус по поводу того, что есть спам, но было бы полезно иметь явное определение. Нам нужно будет сделать это, если мы захотим создать центральный корпус спама или даже содержательно сравнить показатели фильтрации спама.

Во-первых, спам не коммерческая нежелательная почта. Если кто-то в моем районе слышал, что я искал старый 3-скоростной Raleigh в  хорошем состоянии и прислал мне по электронной почте письмо с предложением продать мне такую штуку, я был бы в восторге, и все же это письмо, как коммерческое, так и непрошеное. Определяющая особенность спама (фактически, её смысл существования) не состоит в том, что он непрошен, но в том что он создан автоматически.

Кроме того, это просто случайность, что спам, обычно, коммерческой. Если бы кто-нибудь начал массовой рассылку электронной почты, чтобы поддержать какое-нибудь политическое движение, например, она бы являлась настолько же спамом как и электронная почта, продвигающая порносайт.

Я предлагаю определить спам как нежелательную автоматизированную электронную почту. Таким образом, это определение включает в себя некоторые письма, которые многие юридические определения спама не содержат. Юридические определения спама, на которые повлияли, возможно, лоббисты, предрасположены исключать письмо, отправленное компаниями, которые имеют "существующее отношение" к получателю. Но покупка чего-то у компании, например, не подразумевает, что вы просили у них постоянного прихода электронной писем. Если я заказываю что-нибудь из веб-магазина и они затем шлют мне поток спама, это всё еще спам.

Компании рассылающие спам часто дают вам возможность "отписаться", или просят вас пойти на их сайт и изменить ваши "настройки учетной записи", если вы хотите перестать получать спам. Но этого недостаточно, чтобы перестать считать письмо спамом. Не отписываться не то же самое, что подписаться. Если получатель явно не отмечал галочкой в четко описанном поле формы (умолчанием которого было "нет") с просьбой получить письмо, то тогда это спам.

Есть случаи деловых отношений, когда вы неявно запрашиваете некоторые виды писем. Когда вы заказываете что-то онлайн, я думаю, что вы неявно просите получить квитанцию заказа, а также уведомление об отгрузке товара. Я не возражаю, когда Verisign посылает мне письмо с предупреждением, что срок доменного имени истекает (по крайней мере, если они действительно его регистратор). Но когда VeriSign отправляет мне письмо с предложением "БЕСПЛАТНОГО Руководства по Созданию Моего Веб-Сайта с Электронной Коммерцией", то это спам.

Примечания:

[1] Примеры этой статьи переведены на Common Lisp для (верите или нет) большей доступности. Приложение, описанное здесь, мы написали, чтобы протестировать новый диалект Lisp, под названием Arc, который ещё не выпущен.

[2] Сейчас самая низкая ставка, кажется, почти $200 для отправки миллиона спамовых писем. Это очень дешево, 1/50 цента за спамовое письмо. Но фильтрация 95% спама, например, увеличила бы затраты спамеров на достижение заданной аудитории в 20 раз. Немногие могут иметь достаточно большую маржу, чтобы вынести это.

[3] Как эмпирическое правило, чем больше эпитетов перед названием страны, тем более коррумпированны ее правители. Страна, называемая Социалистическая Народная Демократическая Республика X, является, вероятно, последним местом в мире, в котором вы хотели бы жить.

#конец части 2

План для спама - Пол Грэм, 2002, перевод на русский. Часть 1/3
minas_a
План для спама. Пол Грэм, Август 2002
 Перевод на русский - Minas Abrahamyan, 2015
 Оригинал "A Plan for Spam - Paul Graham, 2002" тут: http://www.paulgraham.com/spam.html
 часть 1/3

 (Эта статья описывает техники фильтрации спама, используемые в спамоустойчивой читалке веб-почты, которую мы создали для тренировки языка программирования Arc[*]. Усовершенствованный алгоритм описан в статье "Улучшенная байесовская фильтрация"[*]
 [*] http://www.paulgraham.com/arc.html
 [*] http://www.paulgraham.com/better.html
 ).

Я думаю, что спам остановить возможно, и что фильтры на основе содержимого являются способом это сделать. Ахиллесова пята спамеров — это их сообщение. Они могут обойти любой другой барьер, который вы создадите. Обходят пока что, по крайней мере. Но они должны доставить своё сообщение, каким бы оно ни было. Если мы сможем написать программу, которая распознает их сообщения, то не будет никакого способа, чтобы они смогли это обойти.

_ _ _


С точки зрения получателя, спам легко распознаваем. Если бы вы наняли кого-нибудь, чтобы читать вашу почту и игнорировать спам, у него не было бы с этим никаких проблем. Если не прибегать к созданию ИИ, насколько многое мы должны проделать, чтобы автоматизировать этот процесс?

Я думаю, мы сможем решить эту проблему довольно простыми алгоритмами. На самом деле, я обнаружил, что вы можете вполне приемлемо фильтровать современный спам, используя ничего больше, чем байесовскую комбинацию вероятностей спамовости отдельных слов. Используя немного настроенный (как описано ниже) байесовский фильтр, мы теперь промахиваемся менее чем на 5 сообщений из 1000 спамовых сообщений (неправильно распознавая спам как не-спам), с 0 количеством ложных срабатываний.

Статистический подход  обычно не является тем первым подходом, который пробуют, когда пишут фильтры спама. Первым инстинктом большинства хакеров будет попробовать написать программу, которая распознает индивидуальные свойства спама. Вы смотрите на спамовые письма, и думаете, про наглость этих парней, пытающихся отправить мне письмо, начинающееся на "Дорогой Друг", или с темой письма, сплошь состоящей из прописных букв и завершающейся восемью восклицательными знаками. Я могу отфильтровать такие штуки практически одной строчкой кода.

Вы так и делаете, и сначала это работает. Несколько простых правил откусят большой кусок от вашего входящего спама. Простой поиск слова "click"("щелкните") поймает 79,7% электронных писем в моем корпусе спамовых текстов, выдавая лишь 1,2% ложноположительных результатов.

Я потратил почти шесть месяцев в написании программы, которая искала бы индивидуальные характеристики (features) спама, до того, как я попробовал статистический подход. Я обнаружил, что распознование нескольких последних процентов спама стало очень трудным, и что усиливая строгость фильтров, я получал больше ложных срабатываний.

Ложные срабатывания (ложноположительные результаты, false positives) – это нормальные ("невиновные") письма, которые были ошибочно распознаны как спам. Для большинства пользователей пропажа нормального ("законного") письма на порядок хуже получения спама, так что фильтр, выдающий ложные срабатывания, это как лечение угрей, несущее с собой также и риск смерти пациента.

Чем больше спама пользователь получает, тем менее вероятно, что он заметит одно нормальное ("невиновное") письмо, лёжащее в папке для спама. И, как ни странно, чем лучше становятся ваши спамовые фильтры, тем более опасными становятся ложные срабатывания, потому что, когда фильтры действительно хороши, пользователи всё больше больше склонны игнорировать всё, что они поймают.

Я не знаю, почему я так долго избегал попытки статистического подхода. Я думаю, это было из-за того, что я пристрастился к попыткам самому определить спамовые характеристики, как будто я играл в какую-то состязательную игру со спамерами. (Не-хакеры часто не осознают этого, но большинство хакеров являются весьма соревнующимися.) Когда я попробовал статистический анализ, я сразу обнаружил, что он был намного умнее меня. Он обнаружил, конечно, что такие термины как "virtumundo" (спамовая контора в США, аналог "Центра изучения английского" -прим.пер.) и "teens"("подростки") являются хорошими показателями спама. Но он также обнаружил, что слова "per" и "FL" и "ff0000" тоже являются хорошими показателями спама. На самом деле оказалось, что "ff0000" (HTML код для цвета "ярко-красный") является настолько же хорошим показателем спама, как и любое порнографическое слово.

_ _ _


Вот набросок того, как я делаю статистическую фильтрацию. Я начинаю с одного корпуса спамовых и одного корпуса неспамовых писем. В этот момент в каждом из них есть около 4000 сообщений. Я сканирую весь текст, включая заголовки и встроенный 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. Это помогает различать слова, которые иногда возникают в "добропорядочной" ("законной") почте, и слова, которые там почти никогда не встречаются. Я рассматриваю только слова, которые встречаются всего более пяти раз (на самом деле, из-за удвоения, вхождение трех раз в неспамовой почте будет достаточно). И затем есть вопрос о том, какой вероятность задать словам, которые встречаются в одном корпусе, но не встречаются в другом. Снова методом проб и ошибок я выбрал 0.01 и 0.99. Здесь может быть пространство для настройки, но, с ростом корпуса, такая настройка, в любом случае, произойдёт автоматически.

Особенно наблюдательные отметят, что, в то время как я рассматриваю, в целях счёта частот, каждый корпус как сплошной длинный поток текста, я использую количество писем в каждом вместо использования их общей длины в качестве делителя в вычислении спамовых вероятностей. Это добавляет еще одно небольшое смещение для защиты от ложных срабатываний.

Когда новая письмо приходит, оно сканируется в токены (лексемы), и самые интересные пятнадцать токенов, в которых интересность измеряется тем, насколько далёка их спамовая вероятность, от нейтрального 0.5, используются для того, чтобы вычислить вероятность того, что почта является спамом. Положим probs – это список из пятнадцати индивидуальных вероятностей, тогда вычисление скомбинированной[*] вероятности будет таким:

[*] http://www.paulgraham.com/naivebayes.html

(let  ((prod (apply #'* probs)))
  (/ prod (+ prod (apply #'* (mapcar #'(lambda (x)
                                         (- 1 x))
                                     probs)))))

Один вопрос возникает на практике – какую вероятность присвоить слову, которое вы никогда не встречали, т. е. такому, которое отсутствует в хэш-таблице вероятностей слова. Я нашел, снова путем проб и ошибок, что является 0,4 хорошим числом для этого. Если вы никогда не видели слово прежде, это, вероятно, довольно "невиновное" слово; спамовые слова, как правило, все слишком знакомы.

В приложении в конце есть примеры этого алгоритма, примененного к реальным письмам.

Я считаю письмо спамом, если вышеприведенный алгоритм даёт ей вероятность быть спамом более 0.9. Но на практике это не очень важно каким этот порог я поставлю, потому что лишь несколько значений вероятности для писем оказываются в середине диапазона.

_ _ _


Одним большим преимуществом статистического подхода является то, что вы не вынуждены читать так много спама. За последние шесть месяцев, я читал буквально тысячи спамовых писем, и это, действительно, своего рода деморализует. Норберт Винер сказал, если вы конкурируете с рабами, то вы становитесь рабом, и есть что-то аналогично унизительное в соперничестве со спамерами. Чтобы распознать индивидуальные характеристики спама, вы должны попытаться проникнуть в мозг спамера, и, честно говоря, я хочу, потратить как можно меньше времени в умах спамеров, как это возможно.

Но реальное преимущество байесовского подхода, конечно, состоит в том, что вы знаете, что вы измеряете. Фильтры, распознающие характеристики, такие как признание SpamAssassin назначают электронным письмам некие спамовые "баллы". Байесовский подход присваивает настоящую вероятность. Проблема с "баллами" состоит в том, что никто не знает, что они означают. Пользователь не знает что они означают, но что еще хуже, этого не знает и сам разработчик фильтра. Сколько баллов должно получить письмо за то, что в нем есть слово "секс"? Вероятность, конечно, может быть ошибочной, но  мало двусмысленности в том, что она означает, или в том, как данные (признаки) должны быть скомбинированы для её вычисления. Основываясь на моем корпусе, слово "секс" указывает вероятность 0,97 того, что  содержащее его письмо будет спамом, в то время как "сексуальные" ("sexy") выдает вероятность 0,99. И правило Байеса, столь же недвусмысленное, гласит, что письмо, содержащее оба слова имело бы, в (маловероятном) отсутствии  каких-либо других доказательств, 99,97% шансов быть спамом.

Потому что это измерение вероятности, и байесовский подход учитывает все улики в электронной почте, и хорошие, и плохие. Непропорционально редко возникающие в спаме слова (такие как "though"("однако") или "сегодня вечером" или "очевидно"), так же способствуют снижению спамовой вероятности, как плохие слова, такие как "отписаться" и "подписаться" способствуют её увеличению. Так что, "невиновное" в других отношениях письмо, которое, как вдруг оказалось, содержит слово «секс», не будет помечено как спам.

В идеале, конечно, вероятности должны рассчитываться индивидуально для каждого пользователя. Я получаю много писем, содержащих слово "Lisp", и (пока) ни одного спамового, у которого оно бы было. Так что, такое слово, это как своего рода настоящий пароль для отправки мне почты. В моём более раннем программе для фильтрации спама пользователь мог  настроить список таких слов, и почта, содержащая их, автоматически прошла бы фильтры. В свой список я ставил такие слова, как "Lisp", а также мой почтовый индекс  для того, чтобы такие письма, (в другом отношении считаемые за спам) подтверждающие онлайн заказы смогли бы дойти. Я думал, что я очень умён, но я счёл, что байесовский фильтр сделал для меня такую же вещь, но более того, он обнаружил много слов о которых я и не думал.

Когда я сказал в начале, что наши фильтры пропускают менее 5 сообщений спама на 1000, с 0 ложных срабатываний, я говорил о фильтрации мою почты на основе корпуса моей почты. Но эти цифры не вводят в заблуждение, потому что это тот подход который я защищаю: фильтровать письма каждого пользователя на основе спамовых и неспамовых писем, которые он получает. По сути, каждый пользователь должен иметь две кнопки удаления писем: обычное удаление и "удалить как спам". Все удаленное как спам идет в спамовый корпус, а все остальное идет в неспамовый корпус.

Вы можете начать фильтровать для пользователей с начального фильтра, но в конечном счете каждый пользователь должен иметь свои собственные пословные вероятности основанные на той почте что он получает. Это (a) делает фильтры более эффективными, (b) позволяет каждому пользователю задать свое собственное точное определение спама и (c) возможно, самое лучшее, это делает трудным для спамеров настройку писем для обхода через фильтры. Если большинство "мозгов" фильтра будут находиться в индивидуальных базах данных, то тогда простая настройка спамовых писем на пробитие через изначальные настроенные  фильтры не будет ничего гарантировать в том, как хороши они будут в  прохождении фильтров отдельных пользователей, изменчивых. от пользователя к пользователю, и гораздо более натренированных.

Фильтрация спама на основе содержания часто сочетается с белым списком, т.е. списком отправителей, сообщения от которых могут быть приняты без фильтрации. Простой способ построения такого белого списка это содержать список адресов, которым пользователь когда-либо посылал письмо. Если читалка почты имеет кнопку "удаление как спам", тогда вы можете также добавлять туда (в белый список) адреса отправителей (поле "От:") каждого письма, которое  пользователь удалил как обычный мусор (т.е. не спам).

Я сторонник белых списков, но, больше как способ сэкономить вычислений, чем как способ улучшать фильтрацию. Раньше я думал, что белые списки сделали бы фильтрацию проще, потому что вам пришлось бы фильтровать электронную почту только от людей, о которых вы никогда не слышали, и некто отправляющий вам почту в первый раз был бы вынужден придерживаться некоей конвенции в том, что он может написать вам. Кто-то, кого вы уже знаете, мог бы послать вам письмо, с разговорами о сексе, но кто-то отправляющий вам почту в первый раз не будет, скорее всего так делать. Проблема в том, люди могут иметь более одного адреса электронной почты, так что новый адрес отправителя ("От:") не гарантирует, что отправитель пишет вам в первый раз. Это не является необычным для старого друга (особенно, если он хакер) внезапно отправить вам письмо с новым адресом отправителя, так что вы не можете рисковать ложными срабатываниями путем особенно строгой фильтрации почты от неизвестных адресов.

В некотором смысле, однако, мои фильтры сами воплощают что-то вроде белого списка (и чёрного списка), потому что они основаны на целых сообщениях, включая заголовки. Так что в этой мере, они "знают" адреса электронной почты надежных отправителей и даже маршрутов, по которым почта приходит от них ко мне. И они знают столько же о спаме, включая имена серверов, почтовых программ, версий и протоколов.

_ _ _


Если бы я думал, что я могу поддерживать постоянными текущие процентные доли фильтрации спама, я бы считал, что эта проблема решена. Но уметь отфильтровывать большинство современного спама, не очень большое достижение, так как спам эволюционирует. В самом деле, большинство антиспамовых техник[*] до сих пор были как пестициды, которые делают не более того, что создают новую, устойчивую породу жучков.

[*] http://www.paulgraham.com/falsepositives.html

Но я больше надеюсь на байесовские фильтры, потому что они эволюционируют вместе со спамом. Так что, в то время как спамеры начинают использовать "c0ck" вместо "cock", чтобы уклониться от простодушных спам-фильтров, основанных на отдельных словах, байесовские фильтры обнаружат это автоматически. Даже более того, «c0ck» является гораздо более изобличающим доказательством, чем «cock» и байесовские фильтры точно знают насколько более.

Тем не менее, каждый, кто предлагает план для фильтрации спама, должен уметь ответить на вопрос: если бы спамеры знали что именно вы делаете, насколько успешно они могли бы пройти через ваш фильтр? Например, я думаю, что, если фильтрация спама основанная на контрольной сумме станет серьёзным препятствием, спамеры просто переключатся на техники mad lib* для генерации тела сообщений. (* mad lib -- американская игра в процессе которой игроки заменяют слова в тексте c сохранением части речи или иного контекста http://en.wikipedia.org/wiki/Mad_Libs -пер.)

Чтобы победить  байесовске фильтры, спамерам не было бы достаточно сделать свои письма уникальными или прекратить использование отдельных неприличных слов. Им бы пришлось сделать свои письма неотличимыми от вашего обычного письма. И это, я думаю, будет серьезно их сдерживать. Спам в большинстве своем это торговые презентации (pitches), так что, если ваша обычная почта не вся целиком состоит из торговых презентаций, спам будет неизбежно иметь другой характер. И спамерам также, конечно, пришлось бы изменить (и продолжать изменять) всю свою инфраструктуру, потому что иначе заголовки выглядели бы так же плохо как когда-то байесовские фильтры, независимо от того что они сделали с телом сообщений. Я недостаточно знаю об инфраструктуре, которую спамеры используют, чтобы знать, насколько трудным было бы заставить выглядеть "невиновными" заголовки, но моя догадка состоит в том, что это было бы ещё труднее, чем заставлять выглядеть "невиновным" тело сообщения.

Предполагая, что они могли бы решить проблему заголовков, спам будущего, вероятно, выглядел бы чем-то вроде этого:

  Привет всем. Думаю, вы должны посмотреть это:
  http://www.27meg.com/foo

потому, что это примерно столько же торговой презентации сколько пространства оставит спамерам фильтр на основе содержания. (На самом деле, даже этому будет трудно пройти фильтры, потому что, если все остальное в электронной почте является нейтральным, вероятность спамовости будет зависеть от URL, и потребуются некоторые усилия, чтобы сделать его выглядящим нейтрально.)

Диапазон спамеров - от бизнеса работающего c так называемыми списками подписки (opt-in lists), которые даже не пытаются скрыть кем они являются, до ребят, которые угоняют почтовые сервера для отправки спама по продвижению порносайтов. Если мы используем фильтрацию, чтобы сократить его выбор до писем подобных приведенному выше, это должно почти поставить спамеров в "законный" конец спектра, выдавив их за рамки бизнеса; спамеры будут чувствовать себя вынужденными согласно различным государственным законам, включить стандартный текст, про то, почему что их спам не является спамом, и как отменить вашу "подписку", и такого рода текст легко распознавать.

(Раньше я думал, что было бы наивно полагать, что строгие законы будут уменьшать количество спама. Сейчас я думаю, что, в то время как более строгие законы не могут уменьшать количество спама, который спамеры отправляют, они безусловно могут помочь фильтрам уменьшить количество спама, которое получатели действительно увидят.)

Вдоль всего спектра, если ограничить коммерческие презентации, которые могут делать спамеры, вы неизбежно будете стремится вывести их из бизнеса. Слово "бизнес" является важным, чтобы запомнить. Спамеры – бизнесмены. Они шлют спам, потому что это работает. Это работает, потому что, хотя доля откликнувшихся  отвратительно низкая (в лучшем 15 на миллион, против 3000 на миллион для рассылки писем по каталогу), стоит это им практически ничего. Стоимость огромна для получателей, около 5 человеко-недель на каждый миллион получателей, которые проводят секунду чтобы удалить спам, но спамеры не будут оплачивать это.

Однако, отправка спама все же чего-то стоит спамеру. [2] Так что, чем меньшей мы сможем сделать долю откликнувшихся, или фильтруя, или используя фильтры вынуждающие спамеров разбавить свои торговые презентации, тем меньше бизнесов сочтёт стоящим своих хлопот посылать спам.

Причина, по которой спамеры используют те виды торговых презентаций[*] которые они используют в том, что они это делают для увеличения доли отклика. Это, возможно, даже более отвратительно, чем проникновение в мозги спамера, но давайте быстро взглянем изнутри в мозги кого-то, кто откликается на спам. Этот человек либо поразительно доверчив либо находится в глубоком отрицании своих сексуальных интересов. В любом случае, спам, отталкивающий либо идиотской, каким он нам кажется, для них он вдохновляющий. Спамеры не писали бы таких вещей, если бы они не звучали волнующе. И тексты вроде таких: "думаю, что вы должны посмотреть это" просто близко не имели бы рычага влияния на получателя спама, так же как и другие вещи того сорта, которые спамеры сейчас говорят. Результат: если он не может содержать продающих коммерческих презентаций, спам становится менее эффективным в качестве маркетингового движка, и меньше фирм хотят его использовать.
[*] http://www.milliondollaremails.com/

Это – крупная победа в конце концов. Я начал писать программное обеспечение для фильтрации спама, потому что я не хочу больше быть вынужденным смотреть на некоторые вещи. Но, если мы станем достаточно хорошими в фильтрации спама, он перестанет работать, и спамеры на самом деле перестанут слать его.

_ _ _
#конец части 1/3

Беседа с Ричардом Столлменом о социализме движения отрытых исходников
minas_a
Сегодня (написано 18.11.2010) говорил с Ричардом Столлменом, известном как гуру и глава движения
свободных исходников. Он приехал в Ереван, и сегодня, после второй лекции, посвященной
обществу, я задал свой вопрос.

Вопрос, в переводе:

-Движение свободных исходников делает людей свободными путем обобществления средств
производства, (перебивает: "Не согласен-1") потому, что все эти инструменты - средства производства(Не согласен-2), начиная от
компиляторов, от gcc и заканчивая программами редактирования изображений, как GIMP
и Inkscape.
А раз тут происходит обобществление средств производства, то движение свободных
исходников является частью социалистического движения. Что Вы думаете в этой связи?

Ответ (в переводе:)

-"Не согласен-1"
 тут нет обобществления...
-"Не согласен-2"
 Свободными являются не только программы-средства производства...

-Свободными являются не только программы-средства производства, но и множество
совершенно других. Например, программы для просмотра фильмов; или браузер в котором я
пишу Вам сообщение - это свободная программа, но не средство производства.

-Да, говорю, свободные программы шире, чем 'свободные программы-только средства производства', но что с того? Всё равно обобществление средств производства движение
свободных исходников совершает, а значит это социализм.

- Нет,- говорит,- это не социализм.

- Тогда это только первый шаг.

- Нет, и это не первый шаг тоже. Тут нету одного центра, как было при Советах, когда
была (бы) одна центральная институция, котрая говорит всем какую программу использовать
и ограничивает ею, поэтому так называемого "обобществления средств производства" не происходит.
Тут на самом деле есть анархизм.
Ведь программа, по лицензии GPL принадлежит пользователю, Вам принадлежит,
и каждому пользователю у которого она есть принадлежит.
(Тут он начал долго объяснять, что Microsoft - это зло, и Apple это зло. Потому, что их
программа, даже проданная - все равно принадлежит соответственно Microsoft-у и Apple-у, а не пользователю.)

А по GPL, программа принадлежит каждому пользователю владеющему ею, и он волен с нею:
узнавать устройство, т.е. читать исходники, менять ее, дарить другу, и возвращать ее в комьюнити, создателям программы. И делать это бесконтрольно, будучи ограничен только лицензией GPL.

А на самом деле тут три аспекта: есть социализм, есть анархизм, и есть капитализм.

- В чем заключается капитализм?
- Капитализм возникает тут, когда Вы хотите поменять программу, но не хотите делать
этого сами, своими руками. Тогда Вы платите мне, и я делаю это для Вас за деньги.
Или кому-то другому платите, тут уже рынок услуг, а раз свободный рынок, то это есть и капитализм тоже. Есть множество компаний, работающих по такой модели бизнеса, когда они
делают, меняют что-то, что кто-то другой менять сам не хочет.


***
По-моему Столман под социализмом только Советский союз понимает, почему и логика в случае социализма полностью не срабатывает ("протекает"). Хотя про наличие анархизма и капитализма, пожалуй соглашусь. Только вот капитализм - это свойство окружающего FS-движения общества, государственного строя, в которое оно погружено; а анархизм тут возникает только по недосмотру государственных патентных служб, и по сравнению с фоном патентного права проприетарного ПО.

P.S.
История вопроса. Впервые похожий вопрос встретил в другом интервью, тоже кстати, опубликованном на русском,
http://citkit.ru/articles/48/ (или тут) - точное место не находится, но суть комментария была, что по духу распространение исходников бесплатно с одной стороны конечнонапоминает коммунизм, а с другой подтекст был, что это жульничество как у Остапа Бендера - жульничество не нарушающее УК.
Выяснилось, про анархическую сторону есть целая статья:
http://xbb.uz/anarchy_and_sourcecode.html - "Анархия и исходный код.Что есть движение за свободное программное обеспечение и как оно соотносится с анархизмом?"

-Минас Абрамян, 18.11.2010

?

Log in