На прошлой неделе произошла масштабная утечка исходного кода сервисов «Яндекса» (компания сама ее подтвердила). Неизвестный обнародовал архивы внутреннего репозитория «Яндекса». Изучив их, можно узнать много новых деталей о том, как устроен крупнейший российский поисковик, который в последние годы постоянно критикуют за сотрудничество с Кремлем. Из утечки, в частности, выяснилось, что «Яндекс» цензурирует поисковую выдачу картинок и видео — так, чтобы изображения Путина и символы Z не появлялись в неприятных для властей контекстах.
Утечка «Яндекса» состоит из 83 архивов, общий объем которых в сжатом виде превышает 40 гигабайт. Ссылки на конкретные файлы из утечки в этом материале «Медузы» оформлены с указанием архива и пути к файлу внутри этого архива (ищите этот адрес в сносках). Вот так:
архив.tar.bz2: путь/к/файлу.txt
Цензурирование запросов пользователей
Когда вы ищете картинки в «Яндексе», в некоторых случаях ваш поисковый запрос автоматически корректируется: компания изымает часть изображений из поисковой выдачи.
За это отвечает специальное правило внутреннего сервиса «Бегемот» под названием ImgPatch (дословно — исправление изображений). Вот такое описание этого правила можно увидеть в его коде:
Позволяет организовать быстрый бан картинок и видео при помощи правки исходных запросов. От небольших изменений до полной переформулировки.
search.tar.bz2: wizard/data/fresh/img_patch/images2.txt
В первых десяти строках текстового файла на скриншоте описана логика правил ImgPatch. «Яндекс» может переписывать запрос пользователя (rewrite) или добавлять к нему какие-то аргументы (patch): например, заминусовывать отдельные слова, чтобы наверняка изъять их из выдачи.
Эти правила можно применять ко всем запросам (*) или ограничить каким-то сегментом интернета — например, российским (tld=ru), белорусским (tld=by) или украинским (tld=ua). Некоторые правила должны срабатывать только при отсутствии конкретного уточнения в запросе (anti marker word).
Попробуем объяснить логику таких исправлений на примерах из файла с тестовыми запросами для проверки их работы.
зелёный слоник -фильм,-видео,-кино patch -«зелёный слоник» -«zeleniy slonik»
Если пользователь ввел в поисковую строку запрос с фразой зеленый слоник, но не уточнил, что ищет видео или кино, то исправление запроса должно гарантировать, что он не наткнется случайно на кадры из одноименного культового треш-фильма.
президент allow-exact,-медведев patch -«Медведев»
Это правило должно помочь россиянам забыть, что заместитель председателя Совбеза РФ Дмитрий Медведев тоже был президентом. Если только пользователь специально не попросит архивные фото президента Медведева.
Чаще всего исправления применяются для того, чтобы убрать из выдачи «Яндекса» порнографические фото и видео (особенно детские). На втором месте по количеству заведенных правил — изъятие изображений президента РФ Владимира Путина. Раньше других на это обратил внимание пользователь твиттера @bantg.
Защита Путина
«Яндекс» постарался, чтобы на изображение действующего российского президента нельзя было наткнуться при поиске по отдельным словам:
- пиздабол
- плешивый
- хуйло / хуйла / хуйлы / хуило / хуила
А также словосочетаниям:
- бункерный дед
- главный вор
- гондон всея руси
- хуй в скафандре
- xуйло в проруби
И целым предложениям:
- как выглядят педофилы
- когда он сдохнет
- странное создание машет рукой
search.tar.bz2: wizard/data/fresh/img_patch/images2.txt
search.tar.bz2: wizard/data/fresh/img_patch/video2.txt
Все эти правила должны применяться вне зависимости от того, где находится пользователь.
Эти правила должны применяться вне зависимости от того, в какой стране находится пользователь. Мы не знаем, когда они появились и действуют ли до сих пор. Перед выходом этого материала нам удалось найти изображения российского президента в поиске «Яндекса» по всем запросам, кроме хуй в скафандре (если не уточнять, что мы ищем именно Путина).
«Медуза» в России теперь не только «иноагент», но еще и «нежелательная» организация. Этот статус гораздо хуже прежнего. Тем не менее мы продолжаем работать. Нас по-прежнему можно читать. Это безопасно. Здесь — все ответы на тревожные вопросы.
Защита символа Z
«Яндекс» оберегает от неприятных ассоциаций и букву Z, ставшую символом российской войны против Украины (и запрещенную в некоторых европейских государствах). Пользователи «Яндекса» не должны увидеть символику нацистской Германии по запросам со словами символ z или z спецоперация логотип. Для этого «Яндекс» автоматически добавляет к ним множество разных заминусованных слов:
символ z * patch -luftwaffe -знак -люфтваффе -emblems -немецкий -german -президент -германский -славянский -army -рейх -вермахт -symboly -нацисты -германия -ss -hitler -nazi -сша -us -germany -сс -postimages -калмыкия -крест -членский -гитлерюгенд -message -ww2 -symbol -фон
z спецоперация логотип * patch -азов -spartan -япония -всу -одесса -спецуха -blackwood -спецназ -фарм -сша -ссо -warface -csgo
Проверить, функционирует ли правило до сих пор, труднее. В случае с Путиным программа должна блокировать изображение президента РФ, если пользователь ищет конкретное слово, словосочетание или предложение. В случае с Z искать программе приходится «запрещенные» символы, что сложнее. Наберите в поиске символ z или z спецоперация логотип — и вы можете встретить в выдаче, например, свастику; но неизвестно, связано ли это с тем, что фильтр уже выключен или он просто плохо работает.
Два последних слова в черном списке капчи
В утечке можно найти списки запрещенных и разрешенных слов для использования в капче «Яндекса».
Запретный список начинается со слов пиндосы!, смерть, смертью, google — а заканчивается словами львов и сдаться. Он не отсортирован по алфавиту: отдельные новые запретные слова или списки, скорее всего, записывали в конец файла.
captcha.tar.bz2: data/blacklist_ru.txt
Оба последних слова, по-видимому, внесли в список после начала полномасштабного вторжения России в Украину. Слово сдаться могли забанить, чтобы его случайно не расценили как скрытый призыв; попадание в список слова львов также трудно объяснить вне военного контекста. Ни в черном, ни в белом списке нет имен собственных, но львов — это одновременно и название города на западе Украины, и родительный падеж множественного числа слова «львы». Ни в каких других формах (львы, львам, львами, львах) это слово в черном списке не встречается, а в белом, наоборот, можно найти это слово в другой форме (львам), а также несколько однокоренных (львиная, львиного и др.).
Так что, по всей вероятности, внести слово львов в запрещенный список могли только из-за его омонима — города Львова, который подвергается ракетным ударам российских войск с самого начала войны.
Обновлено. «Яндекс» 30 января опубликовал первые результаты своего расследования утечки исходного кода. В них говорится, в частности, что в некоторых случаях логику работы сервисов корректировали не алгоритмическим способом, а «костылями». «Через такие „костыли“ исправляли отдельные ошибки системы рекомендаций, которая отвечает за дополнительные элементы поисковой выдачи, и регулировали настройки поиска по картинкам и видео», — заявила компания.
Тут заминусовали не только Путина
Но и слова разведчик, вата, союзник, гопник, закомплексованный, чушкарь, чмо, карлик, крыса, моль и враг (поиск по картинкам), мразь, гнида, сдох и крыса (поиск по видео). Возможно, все эти словосочетания позволяли найти контент с Путиным.
Что это за файл
search.tar.bz2: wizard/data/wizard/ImgPatch/images2.txt
Из утечки можно «узнать» дату смерти Путина по версии «Яндекса»
Она содержится в одном из файлов:
«Q: какая у путина владимира владимировича дата смерти A: Точная дата смерти Путина: 8 сентября 2032»
Мы не знаем, что это такое — и откуда взялась эта дата. Мы также не знаем, могли ли прочесть (или услышать) этот ответ пользователи какого-либо из сервисов «Яндекса». Похоже, этот текст записан в каком-то файле, которым разработчики пользовались для тестирования и отладки (возможно, они хотели посмешить друг друга).
search.tar.bz2: alice/serp_summarizer/runtime/tests/canondata/run.test_baskette/test_baskette_baskette3_jsons.json
Код ImgPatch
search.tar.bz2: begemot/rules/img_patch/img_patch.cpp
Что это за «Бегемот»?
В утечке «Яндекса» ему дается такое определение: «Это сервис для получения переколдовки пользовательского запроса». Переколдовка — это обработка запроса пользователя, изменяющая вес отдельных слов. Теперь мы знаем, что она может применяться и для цензурирования поисковой выдачи.
search.tar.bz2: begemot/Readme.md
Что такое капча?
Сервис, требующий от пользователя выполнить определенные действия. Его задача — отделить людей от роботов. Например, нужно ввести слова, изображенные на картинке.
Черный список
captcha.tar.bz2: data/blacklist_ru.txt
Белый список
captcha.tar.bz2: data/whitelist_ru.txt
Что еще за аргументы?
Слово со знаком минус (для его исключения из результатов поиска). Слово со знаком плюс (оно должно обязательно присутствовать в выдаче). Слово в кавычках (для поиска конкретно этой формы слова и исключения других вариаций).
Что это за репозиторий?
Место, где хранятся данные.
Что это за запрет?
Публичное демонстрирование символа Z запрещено в Украине, Латвии, Литве, Молдове, Польше и Эстонии.
Что это?
Как пояснил «Яндекс», так разработчики называют временное решение, «реализованное неоптимально и впопыхах».