— Истории делаем, количество пользователей растёт, служба модерации начала работу, стало полегче, — отчитался парнишка.
Ева молодец.
Помимо того, что она взяла на себя мой график, поиск информации и часть переговоров в сети и по почте, она ещё и нашла троих модераторов из десяти.
Ими стали три смешливые девчушки, которые сейчас ответственно сидели перед компьютерами в соседнем помещении и занимались делом. Судя по сосредоточенным лицам, работа довольно быстро выбила из них желание хихикать. На одном экране мелькали фотографии с вечеринок, на другом — жалобы пользователей, на третьем — список публикаций, ожидающих проверки.
— Кроме модераторов, довели до ума алгоритм.
Матео развернул монитор в мою сторону.
На экране была открыта фотография девушки на пляже. Поверх изображения располагалась полупрозрачная сетка, а отдельные участки тела выделялись красным. Вся картинка выглядела так, будто девушку изучали через прицел какого-то странного медицинского прибора.
— Это и есть твой распознаватель порнографии? — уточнил я.
— Не порнографии, — поморщился Матео. — Обнажённой кожи. Программа не понимает, что изображено на фотографии. Для неё нет девушки, купальника, пляжа или чего-то непристойного. Есть только пиксели.
Он увеличил изображение. Лицо девушки распалось на цветные квадраты, превратившись в мозаику оттенков.
— Каждый пиксель имеет цвет. Мы берём его показатели и проверяем, насколько они похожи на оттенок человеческой кожи. Если похожи, отмечаем. Потом программа смотрит не на отдельные точки, а на области, которые они образуют.
Матео провёл курсором по красному пятну, покрывавшему плечи, живот и ноги девушки.
— Один пиксель телесного цвета ничего не значит. Стена может быть бежевая, диван — коричневый, а платье — розовое. Но если рядом находятся десятки тысяч похожих пикселей, соединённых в крупные области, вероятность того, что перед нами человек без одежды, становится выше.
— Она в купальнике, — заметил я.
— Именно поэтому программа не должна ничего удалять самостоятельно.
Он нажал клавишу, и рядом с фотографией появилась надпись:
«Вероятность откровенного содержания: 62 %».
— Шестьдесят два процента, — прочитал я. — И что происходит дальше?
— Фотография отправляется модератору. Он смотрит на неё и за несколько секунд принимает решение. Программа не заменяет человека, сеньор. Она сортирует изображения, чтобы людям не приходилось проверять всё подряд.
Это уже звучало разумнее.
— Сколько фотографий она сможет пропускать через себя?
— Зависит от мощности серверов и размера изображения. Проверять оригинал глупо. Пользователь загружает фотографию, мы создаём уменьшенную копию, допустим, двести на двести пикселей. Для поиска крупных областей кожи этого достаточно. Оригинал сохраняется отдельно.
Матео открыл следующее изображение.
На нём стояла женщина в длинном бежевом платье. Почти вся ткань окрасилась красным, отчего прилично одетая дама теперь выглядела для программы опаснее девушки в купальнике.
— Вот проблема, — сказал он. — Цвет подходит, площадь большая, форма тоже примерно человеческая. Программа решает, что женщина раздета.
— Значит, система не идеальна.
— Нет. Она просто глупая.
Матео сказал это так буднично, словно речь шла о младшем сотруднике, которого ещё можно было обучить и поставить на путь истинный.
— Мы добавим дополнительные признаки. Например, лицо. Если программа находит лицо, она примерно понимает, где должны располагаться шея, плечи и тело. Затем сравнивает размеры открытых участков. Можно учитывать контуры, симметрию, положение областей кожи относительно друг друга.
— И тогда она отличит платье от голого тела?
— Иногда.
Я посмотрел на него.
— Очень обнадёживает.
— Она будет ошибаться, — спокойно ответил Матео. — Пляжи, бассейны, спортсмены, младенцы — всё это станет для неё проблемой. Кроме того, освещение меняет оттенок кожи. Чёрно-белые фотографии она почти не поймёт. Если человек частично закрыт тканью или стоит в необычной позе, точность тоже упадёт.
Он переключился на фотографию мужчины без рубашки. Красным окрасились торс, лицо и руки. Несколько пятен появились даже на деревянной стене за его спиной.
— Но явную обнажёнку она сможет находить?
— Большую часть самой очевидной — да. Особенно если изображение хорошего качества, тело занимает заметную часть кадра и ничем не закрыто. Сложные случаи всё равно останутся людям.
— Как она будет учиться?
— Сначала никак. Мы зададим ей правила вручную: допустимые оттенки, размеры областей, их расположение, соотношение кожи ко всей фотографии. Потом соберём базу примеров.
— Какую базу?
— Несколько тысяч разрешённых изображений и столько же запрещённых. Прогоним через программу, посмотрим, где она ошибается, изменим параметры. Можно подключить статистический классификатор. Он будет искать сочетания признаков, которые чаще встречаются у откровенных изображений.
— То есть мы покажем ей несколько тысяч голых людей, и после этого она начнёт узнавать остальных?
Матео задумался, нахмурившись так серьёзно, будто вопрос требовал глубокого философского осмысления.
— Если объяснять совсем примитивно — да. Только она не узнаёт людей. Она вычисляет вероятность.
Он открыл таблицу с тремя строками.
'До 30 % — публикация.
От 30 % до 70 % — дополнительная проверка.
Выше 70 % — очередь модерации до публикации'.
— Порог можно менять, — объяснил Матео. — Если сделаем систему слишком строгой, модераторы захлебнутся в пляжных фотографиях. Если слишком мягкой — пользователи успеют увидеть то, чего не должны.
— А жалобы?
— Обязательны. Машина проверяет фотографию при загрузке, пользователи сообщают о том, что она пропустила, а модераторы принимают окончательное решение. Каждая подтверждённая жалоба пополняет нашу базу примеров.
— Получается, чем больше фотографий загружают пользователи, тем лучше становится фильтр?
— Если мы будем сохранять решения модераторов и использовать их для настройки — да. Но чудес не ждите. Он не станет разумным. Просто будет реже ошибаться.
Я снова посмотрел на фотографию девушки в купальнике.
Красная сетка покрывала почти всё её тело, словно программа уже вынесла приговор.
— Сколько людей это нам сэкономит?
— Много. Фильтр отсеет основную массу обычных снимков и оставит модераторам несколько тысяч подозрительных.
— Несколько тысяч всё равно немало.
— Зато это не сто тысяч.
Логично.
В соседней комнате одна из девчушек что-то раздражённо пробормотала и отправила очередную фотографию в корзину. Судя по тому, как быстро росло число пользователей, без автоматической сортировки мы действительно очень скоро утонем в чужих снимках.
— А пользователи заметят проверку?
— Обычные — нет. Фотография появится сразу. Подозрительная может несколько минут или часов ждать решения. Можно написать, что изображение обрабатывается.
— Часов нельзя. Люди не любят ждать.
— Тогда придётся нанять больше модераторов.
— Или сделать программу точнее.
— Или сделать программу точнее, — не стал спорить Матео.
— Отличная работа.
Я похлопал парня по плечу и тише добавил:
— Как Лунтик?
Матео оценивающе посмотрел на занятого парня в другом конце помещения.
Лунтик сидел к нам боком, почти не обращая внимания на окружающий грохот. Пальцы быстро бегали по клавиатуре. На мониторе сменяли друг друга строки кода, а рядом лежала исписанная мелким почерком стопка листов. Казалось, шум стройки существовал где-то в другой реальности и до него просто не доходил.
— Слишком хорош. Даже непонятно, почему он работает именно у нас, — поделился Матео. — Я спрашивал, даже позвонил на прежнее место работы. Узнал, что он просто встал в один день и ушёл. И больше его никто там не видел.
— Очевидно, он ушёл к нам, — кивнул я. — Главное, чтобы от нас он так не ушёл.