В рубрике DOU Проекторвсе желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем рассказать — приглашаем поучаствовать. Если нет — возможно, серия вдохновит на создание собственного made in Ukraine продукта. Вопросы и заявки на участие присылайте на editors@dou.ua.
Меня зовут Дмитрий Литавский, я Head of Big Data SEO в компании Promo — первом украинском агентстве Performance Marketing. В этой статье хочу рассказать о нашем новом продукте — DeepCaptcha. Сервис разработан с помощью технологий машинного обучения. Он упростит и ускорит работу SEO-специалистов, веб-мастеров, маркетинговых агентств и пользователей крупных сервисов по парсингу поисковых систем.
Идея
При анализе потоковой выдачи, парсинге больших объемов информации, мониторинге уникальности текстов, съеме позиций, поиске маркетинговых инсайтов, просмотре эффективности маркетинговых работ мы, команда Big Data SEO, стараемся максимально оптимизировать процессы. Google распознает автоматизированные действия и пытается защитить систему от атаки роботов, выкидывая капчу. Капча, в свою очередь, существенно тормозит работу: например, разгадывание одной картинки занимает около 30 секунд, а при парсинге 10 тысяч страниц выскакивает до 1000 капч. SEO-специалист мог потратить целый рабочий день на разгадывание капчи.
Мы решили обратиться к сервисам по обходу капчи — AntiCaptcha и RuCaptcha. Они работают в полуавтоматическом режиме:
- Вы загружаете капчу.
- Сервер сохраняет капчу и передает ее работнику (чаще всего это житель стран третьего мира).
- Работник решает капчу и отправляет ответ на сервер.
Из плюсов такого подхода: человек может разгадать все виды капч. Из минусов: сотрудник должен быть внимательным — от этого зависит скорость и качество разгадывания капчи.
Также не стоит забывать о стоимости таких услуг. За тысячу разгаданных капч придется заплатить 2—3$. При больших объемах, например,
Проанализировав ситуацию на рынке, мы увидели потребность именно в автоматизированном сервисе, который улучшит, удешевит и ускорит разгадывание капчи.
Сервис сейчас работает reCAPTCHA v2, поскольку капчи с картинками встречаются все чаще, а текстовые и цифровые уходят на задний план. К тому же такая визуальная капча является более сложной для программ, так как связана с анализом изображений.
История создания
Мы приняли решение собрать две команды Data Science и устроить между ними соревнование. С каждой группой специалистов обсудили задачи, вид капчи и Definition of Done. В итоге команда-победитель — 4 лучших специалиста по машинному обучению — перешла к нам в штат. Также над проектом трудились 3 Scala-разработчика, которые отвечали за внутреннюю работу сервиса.
Команда DeepCaptcha
У ребят было видение, что нам нужны многослойные нейронные сети под каждый тип изображений. Да, можно было бы использовать одну сеть для всех классов, которая будет на выходе давать столько вариантов, сколько существует: или это машины, или это велосипеды, или это пешеходный переход. Но мы решили сделать нечто специализированное, которое будет говорить «машина» или «не машина», «светофор» или «не светофор». Таким образом мы убили двух зайцев:
- при появлении нового класса не переучивать старую сеть, а просто научить новую;
- это дает больше точности — ориентируясь только на свой класс, нейронка не путается.
Цикл обучения:
- Сбор данных. Back-end-разработчики скачали изображения из reCAPTCHA demo, которые сгруппировали по категориям: пожарные гидранты, автомобили, пешеходные переходы, автобусы и т. д. Вышло более 20 000 картинок.
- Тренировка нейронной сети. Специалисты по Data science предоставили сети последовательность размеченных обучающих примеров. В полуавтоматическом режиме размечали элементы на картинке и обучали нейросеть распознавать изображения для каждой категории. Если Google обновит базу картинок, мы обучим новые нейронки.
- Оценка качества модели. На данном этапе мы при помощи наших Validation dataset оценивали точность натренированных моделей и вносили изменения в алгоритм для улучшения качества.
Средняя точность классификации изображений нейронными сетями составляет 98%. Пришлось пожертвовать точностью ради увеличения скорости разгадывания капчи.
Разработка сервиса
Изначально мы использовали более глубокую сеть, и она давала результат лучше и точнее. Впоследствии мы решили от нее отказаться: чем больше слоев, тем больше вычислений и времени тратится на классификацию. Сотые проценты точности в контексте того, сколько времени уходит на разгадывание, не приоритетны. Куда важнее скорость.
Сервис DeepCaptcha состоит из трех блоков:
- Back-end — часть.
- Кликер.
- Собственно нейронная сеть.
Back-end-часть принимает задачи и отправляет на кликеры. Кликер запускает браузер, открывает капчу и распознает требуемый класс, загружает картинку и отправляет ее в определенную нейронную сеть. Бинарная нейронка идентифицирует класс и подтверждает, присутствует ли на данном изображении искомый объект. Получив «Да», кликер нажимает на нужные изображения капчи и выдает решение.
Кликер — сервис, который напрямую «борется» с капчей. Принцип работы довольно прост. На удалённом сервере кликер, приняв задачу, открывает в новом потоке браузер, переходит на заданный пользователем сайт, обнаруживает капчу и начинает её разгадывание. Кликер умеет взаимодействовать со всеми элементами капча фрейма и соответствующе реагировать на его поведение. Благодаря нейронной сети наша программа знает, какая картинка «правильная» в предложенном наборе. Кликер нажимает по каждой, пока таких картинок не останется. Далее идет кнопка submit — и либо мы получаем результат, либо продолжаем разгадывание. В конечном итоге, Google reCAPTCHA v2 сдается и верит роботу. Мы забираем ключ капчи, с помощью которого пользователь может пройти проверку уже в своём браузере на соответствующем запросу сайте.
Таким образом, наша программа проходит Completely Automated Public Turing test to tell Computers and Humans Apart (CAPTCHA) — тест, нацеленный на то, чтобы отличить действия робота от действий реального человека. Кликер взаимодействует с браузером посредством драйвера и нескольких библиотек, использует нестандартные решения для взаимодействия с интерфейсом капчи и обходит целый ряд элементов защиты Google.
Мы используем микросервисную архитектуру, где кликер, нейронная сеть и back-end — отдельные сервисы, число которых может варьироваться в зависимости от нагрузки. Такая архитектура позволяет нашим stateless-микросервисам легко масштабироваться и обновлять систему по частям. То есть в момент обновления уже запущенные задания разгадывания не будут прерваны, а новые будут запущены на новых версиях. Кроме того, все компоненты системы являются кросс-платформенными. Кликер и нейронная сеть быстро и эффективно обмениваются между собой сообщениями посредством месседж-брокера Apache Kafka, таким образом кликер и нейросети масштабируются независимо и гибко подстраиваются под реальные показатели нагрузки.
Над чем работаем
Команда работает над увеличением скорости и точности, чтобы уменьшить количество повторных разгадываний капч. Для этого необходимо очеловечить кликер. Серверный браузер отдает информацию о том, что он серверный браузер, и Google выдает повторные капчи на решение. Это тормозит процесс, забирает дополнительную вычислительную мощность и скорость.
Сейчас на одну капчу уходит
Хочется максимально оптимизировать этот процесс, чтобы как можно меньше серверов привлекать для разгадывания, увеличить количество потоков капч и пропускную способность.
В планах работа над reCAPTCHA v3. Раньше команда успешно трудилась над аудиокапчей, но Google не разрешает выбирать ее для разгадывания в промышленных масштабах. Поэтому мы продолжим работать над обходом систем распознавания автоматического разгадывания, которые мешают нам выбирать аудиокапчу вместо графической.
На сегодня DeepCaptcha — рабочий продукт, который:
- одновременно запускает более 100 потоков разгадывания — количество зависит от нагрузки на облачном сервере. После тестирования количество будет неограниченным;
- стоит 30 грн за 1000 разгаданных капч.
Сервис является абсолютно законным относительно политики конфиденциальности Google. DeepCaptcha разработан для получения информации с поисковой системы Google. Капча появляется из-за ограничений Google потока данных, во избежании перегрузки его серверов.
Наша цель — вывести продукт на международный рынок, потому что хотим поделиться уникальной разработкой. Также это огромный стимул двигаться дальше и помогать специалистам IT-сферы, создавая все более крутые и полезные штуки.
Сервис DeepCaptcha находится в тестовом режиме. Мы работаем над тем, чтобы сделать его максимально удобным и эффективным. Предлагаем протестировать наш продукт. Для этого авторизуйтесь на сайте. Получите на почту персональный промокод, с помощью которого можно разгадать 1000 капч бесплатно. Ждем ваших комментариев и отзывов, которые помогут нам улучшить работу сервиса.