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

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

На сегодняшний день антиспам по-прежнему является одной из основных задач, которую решает наш отдел. Мы детектируем и снимаем с выдачи многообразные дорвеи, клоакинг, всевозможные сетки псевдосайтов, мы защищаем алгоритмы ранжирования от компрометации – здесь речь идет о поисковой оптимизации: находим так именуемые портянки (тексты, набитые ключевыми словами), определяем SEO-ссылки, которые закупаются с целью имитации авторитетности сайта-акцептора. Детектируем так именуемые мотивированные клики (всевозможные накрутки ПФ) и очищаем сигналы, которые поступают к ранжированию, от всего этого. Кроме того, мы мастерим проект Антиробот, который защищает доступность Яндекса, защищает от всевозможных DDos’ов и парсинга контента.

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

В первую очередь мы, конечно, находим вирусы на сайтах. У нас есть собственный антивирусный проект, какой находит зараженные сайты и предупреждает пользователей об этом. Есть группа проектов, которая занимается интернет-мошенничеством (фишинг, кликджекинг, GSM-подписки, SMS-фрод и т.д.). Также кушать группа «нежелательного контента», которая делает так, чтобы в выдаче было как можно меньше сайтов с желтой рекламой, кликандерами и иным подобным контентом. Ну и наконец, мы также занимаемся фильтрацией так называемого неуместного контента (порно и разной «жести» — контента, какой может вызывать острую негативную реакцию пользователя, к которой тот не готов). Разница между нежелательным контентом и несвоевременным заключается в том, что в зависимости от запроса, неуместный контент может быть очень даже уместным, так например, на запрос [порно], порно это будет собственно то, что поиск должен показать, а в других ситуациях подобный контент будет попросту неуместен. Нежелательный контент же является нежелательным вечно.

GSM-подписки

Основной трюк здесь состоит в том, чтобы всеми правдами и неправдами подписать пользователя мобильного интернета на кое-какую «услугу». Происходит это чаще всего так:

Обычно партнерская реклама уводит пользователя на специальный лендинг, где и происходит эта самая подписка, линией клика на совершенно безобидную кнопку вида «скачать», «смотреть», «войти». Возможно там даже где-то тонким шрифтом прописаны последствия этого действия, но давайте будет честными, никто этот мелкий шрифт не будет декламировать. Пользователь не ждет никакой опасности от кнопок с таким названием, мы все кликаем по ним ежедневно в интернете множество раз.

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

По нашим оценкам, распорядка 80 тысяч пользователей ежедневно попадают на лендинги и рискуют подписаться на платную услугу. Оборот в этой районы составляет десятки миллионов рублей ежедневно.

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

Вот примерно так работают все антимошеннические проекты Отдела неопасного поиска Яндекса.

Неуместный контент

Как известно, в Яндексе есть несколько режимов поиска: «семейный», «умеренный» и «без ограничений». В порядке «семейного поиска» мы не должны показывать порно, даже если пользователь эксплицитно задал вопрос про порно. В «умеренном» порядке поиска мы показываем порноконтент исключительно по запросам, содержащим явный порноинтент. В режиме «без ограничений» Яндекс показывает все, что отыскалось. Таким образом мы получаем некоторое пространство решений, учитывающее режим поиска, класс запроса и класс документа, исходя из какого должны принять решение, какую же выдачу нужно отдать пользователю.

Задача вроде кажется очень несложный – мы разделили запросы на два класса, разделили на два класса контент, и в зависимости от режима поиска показываем соответствующий контент. На самом деле все не так, и трудности начинаются уже при попытке отозваться на вопрос: «А что же такое порнозапрос?». Если учитывать всевозможные серые зоны, то ответ на этот вопрос оказывается вовсе не таким несложным. Некоторые люди говорят, что порнозапрос – это запрос по которому есть порно (Все знают про 34 правило интернета? О нем ниже). Что же прикасается классификации документа, то здесь тоже есть свои трудности. Документ может содержать картинки, видео, текст, на нем может быть какая-то реклама, и любой из этих сигналов может содержать порноконтент.

34-е правило гласит, что если нечто существует, то про это уже есть порно. Мы с ребятами разрешили проверить этот тезис, и подняли такую бету (поиск, который недоступен пользователям, а доступен аналитикам), какая ищет исключительно по порнодокументам. Далее мы произвольно надергали какое-то количество запросов из общего потока обращений к Яндексу и сбросили по ним SERP’ы. Оказалось, что только 8,7% SERP’ов были пустыми, поэтому у нас есть дополненная редакция 34-го правила интернета:

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

Чтобы решать эту задачу, группа классифицированию неуместного контента использует огромное количество всевозможных инструментов, технологий и библиотек – среди них и Vowpal wabbit, и Word2vec, и собственные технологии Яндекса, такие как MatrixNet, DaNet, Ethos.

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

Также увлекательный «хак» применяется в видео. Если пользователь находится внутри порносесси и, допустим, первый ролик – это порноролик, и третий ролик – тоже порноролик, то скорее итого второй ролик тоже был не про котят. И мы можем это использовать.

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

Как же все эти инструменты и хаки нам помогают:

У нас кушать метрика Adult leakage – мы берем некоторый семпл запросов, удаляем из него то, что является порнозапросами, оставляем распорядка 10 тыс. запросов и отдаем их на разметку асессорам. Асессоры по этим запросам размечают топ, и потом мы количество порнодокументов делим на число всех документов, которые были в разметке. Значение этой метрики, приведенное на слайде, говорит нам о том, что лишь 85 документов из 100 тыс. является порнодокументами. Представлялось бы – прекрасный результат. Но нет предела совершенству, как говорится, и кроме того, не нужно забывать про существование так называемой серой пояса, где и возникает у поискв большое количество проблем.

Теперь из мира медитативного анализа данных мы переместимся в стремительный рантайм и поговорим про проект

Антиробот

Зачем Яндексу необходим Антиробот? Дело в том, что до 30% запросов поступающих к поиску, задаются программами. Это не просто высокая нагрузка, это неконтролируемая нагрузка на розыск. Ничто не мешает роботу в любой момент удвоить, утроить количество своих запросов или вообще умножить его на n. Кроме того выходят попытки реверс-инжиниринга поисковых алгоритмов, многие SEO-сообщества еще не верят в то, что алгоритмы настолько сложные, что парсинг любого числа запросов вряд ли поможет понять, как это на самом деле работает. Ну и наконец, для сервисов, предоставляющих контент, например, Маркета, парсинг контента является нежелательным явлением. Потому мы и делаем Антиробот.

Этот проект – самый настоящий High Load, 400-500 k RPS – это абсолютно нормальная дневная нагрузка, он весьма быстрый – 98% запросов обрабатывается всего за 1 мс, его составляют десятки машин.

Как это работает:

Первое, что встречает запрос пользователя, это так именуемый «балансер», который балансирует нагрузку на все бэкэнды. Но прежде, чем запрос попадает на сервис, он попадает в Антиробот на проверку. Если запрос был от человека, Антиробот отвечает балансеру – «все пять, пропускай» — и только тогда запрос попадает уже на сервис. Если Антиробот считает, что запрос роботный, он возвращает капчу и запрос до сервиса попросту не доходит.

Так как Антиробот встроен в поиск, он должен отвечать супер быстро, поэтому мы пришли к необходимости асинхронной обработки запросов. Вначале запрос попадает в так называемый «кэшер», который содержит в себе базу уже известных роботов, она отвечает балансеру, и уже после этого отправляет запрос на немало медленную обработку в так называемый процессор, а там уже и происходит вся магия определения, является ли запрос роботным или нет.

Антиробот Яндекса трудится на MatrixNet-формуле, он машинно обучен, у нас нет ни одной эвристики «если …, то робот». Запрос, прилетая в этот процессор, разбивается на строку факторов, там немало 4 тыс. факторов и при таком их количестве у нас автоматический сбор и разметка выборок, потому что нам нужны большие выборки. Кроме того, Антиробот поддерживает мультиформульность, а собственно – пользователь, который является роботом на поиске, не всегда является роботом на Маркете, поэтому к пользователям этих двух сервисов должны применяться различные формулы, так как там разные паттерны поведения пользователей и роботов.

А самое прекрасное в этом проекте то, что он весь принадлежит нашей команде. Мы осуществляем не лишь аналитику, разработку, тестирование этого проекта, мы сами администрируем тот самый кластер из десятка машин, сами осуществляем деплой, мониторинги и алерты, это все тоже наша пояс ответственности. У нас не много фронтэнда, до десятка страниц, но мы тоже сами это пишем, и, кроме того, мы анализируем жалобы пользователей, потому что для нас весьма важны требования к точности. Если мы показываем капчу человеку, то обязательно производим тщательный анализ, почему это случилось.

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

В конце доклада Екатерина привела несколько фактов, которые «всплыли» во время подготовки этого доклада и какими просто нельзя не поделиться с общественностью:

  • Самый популярный объект в желтой рекламе – пищевая сода. Секрет успеха – она у всех кушать дома, она непонятно для чего – вроде бы и что-то про лекарства, а вроде бы и про кухню, ею можно что-то мыть. Зачастую на картинках даже не обозначается проблема, какую эта сода решает, там просто изображена пачка, а пользователь уже сам додумывает проблему. Главное, что у него эта сода есть, а значит, надо кликнуть и посмотреть, что же с ней можно здорового сделать.
  • Чемпионом по умиранию в 2016 году, по мнению желтой рекламы, был Олег Газманов. В том году он покидал нас пуще других. Но сейчас, совершенно очевидно, что он теряет свои позиции, потому что лидерство захватил Леонид Якубович. Если с Олегом Газмановым пуще всего случались автомобильные катастрофы, то про Леонида Якубовича просто известно, что страна скорбит.
  • Самый сложный стальной порнозапрос – [ролики для взрослых]. Что на него показывать пользователю, колдунщик видео или спорттовары?

Текст подготовлен по материалам мероприятия «Как организован поиск Яндекса»

Источник: searchengines.ru