Нейросеть сократила время подачи объявления о продаже авто в два раза — кейс Drom.ru

В избранное

В избранном

Привет, друзья.

Сегодня Drom.ru хочет рассказать вам про то, как с помощью бигдаты и машинного обучения мы смогли принести пользу живым людям, упростив решение их бытовых задач. Для этого нам потребовалось перелопатить очень-очень много данных, написать нейросетку, обучить её (два раза). Не то чтобы настоящий рокетсайенс, но написать есть о чём.

Вы когда-нибудь пробовали разместить объявление о продаже машины? На первый взгляд — тривиальная задача, однако обычному человеку требуется в среднем десять минут для того, чтобы заполнить данные о своей машине на Drom.ru. Выбрать модель, указать параметры автомобиля, переписать VIN, перепроверить на два раза. Ему несколько облегчают задачу функции автозаполнения, которые мы в своё время внедрили, но всё равно — десять минут что с компьютера, что с телефона. Это много, это долго и это утомительно. Нам всегда хотелось сократить время подачи объявления до минимума, чтобы можно было на Дроме разместить объявление так же быстро, как завести мотор в машине. Раз и поехали.

Идея, которую мы в итоге реализовали, была у нас давно, но технологии и объем накопленных данных только сейчас дошли до нужного уровня. Теперь продавец делает фотку свидетельства о регистрации (СТС, или иначе СОР), мы её на лету распознаём и заполняем нужные поля в объявлении автоматом. «Нашли, чем удивить в 2017 году», — скажет кто-то, — «Распознаванием текста». Не спешите с выводами. Одним распознаванием текста наша задача не решается.

Правильное решение потребовало от нас создания системы проверки данных в СТС на ошибки

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

Всё началось с подготовки обучающей выборки

Где найти гору СТС для анализа данных? Сперва собрали все те, которые были в наших объявлениях. Таких оказалось мало. Думали распарсить выдачу Гугла, но там много мусора и повторов. Тогда решили попробовать краудсорсинг — при подаче объявления просили пользователей присылать фото своих СТС. Люди не просто откликнулись, нам за несколько дней накидали тысячи фотографий. Настроение сразу улучшилось.

Следующий шаг — выбор инструментария для работы. Есть готовые библиотеки для распознавания текста. С ними сразу начались проблемы. Во-первых, в СТС смешиваются латинский и русский алфавиты, во-вторых, используются разные шрифты. Значительный объём информации приходится на цифры, для которых нет готовых словарей. К тому же данные в документах крайне неаккуратно печатаются. Информацию в бланк СТС вносят сами гаишники, печатают на принтере, который есть в наличии. О выравнивании строк никто не заботится, если что-то не допечаталось или едва видно, то это тоже «не проблема». Данные сплошь и рядом наползают на чужие поля. Без навыка даже человек с трудом понимает, что к чему. Мы смотрели глазами на СОРки и, бывало, сами не могли разобрать, что же там написано.

Готовые решения нам не подходят, надо пилить свой кастомный вариант. Разработчики запели от счастья, им предстояло писать нейросеть.

Довольно быстро мы сделали инструмент разметки полей и данных в СТС, в который загрузили фотки, полученные от пользователей. Инструмент быстро разошёлся по компании — сотрудники сами охотно размечали СОРки.

С помощью простого функционала мы быстро выделили из общей массы СТС те, которые подходили для формирования обучающей выборки

После этого мы оцифровали данные. Это оказалось сложнее, дольше и нуднее. Зато ручной работы больше не требовалось.

Сведения из нескольких тысяч сорок руками переводились в цифровой формат

Полученных данных было достаточно, чтобы обучить и протестировать две модели компьютерного зрения по распознаванию документов.

Что за модели, и что они могут?

Для работы мы взяли TensorFlow от Google. С его помощью мы обучили одну модель, которая занимается распознаванием прямо на телефоне пользователя, а вторая работает на нашем сервере.

В приложении на телефоне мы обрабатываем видеопоток с камеры в реальном времени, это позволяет снизить влияние освещённости и проблем с фокусировкой. Задача первой модели — точно распознать символы. Обучили мы её за три дня на одном GPU. Дальше в дело вступает уже нейросеть.

Вторая модель работает на нашем сервере, мы научили её определять, к какому полю какие значения относятся. Модель знает словари возможных значений, может исправлять ошибки, а также выполняет валидацию данных, вдруг кто-то случайно или по умыслу захочет исказить информацию в СТС. Точность модели на среднестатистических данных составляла около 97%. Для запуска в прод на Drom.ru достаточно, решили мы. Дообучим по ходу работы.

Как показал недавний опрос среди наших пользователей, почти 80% продавцов делают фото машины для объявлений с телефона.

Стартовали, конечно, мы с обновления нашего приложения ДромАвто

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

В чем же магия?

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

За бигдату у нас база VIN-кодов из объявлений Дрома. VIN — это 17-значный номер, который выбит на кузове каждой машины. У одинаковых модификаций автомобилей он, как правило, имеет общую часть, поэтому, скормив миллионы значений нейронной сети, мы теперь по VIN умеем определять модель автомобиля, объем двигателя и другие параметры, а заодно проверять корректность заполнения СТС.

Вот так камера телефона видит СТС

Мы научились автоматом исправлять часть ошибок в полях СТС, понимать, какие параметры плохо пропечатаны или вышли за поля документа. Например, довольно распространённая ошибка в ГИБДД — недопечатана мощность мотора в лошадиных силах, она не влезает и переносится на оборотную сторону документа. Мы вычисляем «лошадей» по киловаттам, которые идут в той же строке. Это просто. А вот пример посложнее. ГИБДД использует свою систему наименования автомобилей, которую можно охарактеризовать «как бог на душу положит». Chevrolet Aveo может в зависимости от эстетических предпочтений гаишников называться ШЕВРОЛЕ КLАS или СНЕVRОLЕТ КL1Т. С Hyundai Solaris такая же петрушка. Как только не склоняют: ХЕНДЭ СОЛЯРИС, ХЕНДАЙ Solaris, ХУНДАЙ СОЛЯРИС. Где-то даже проскакивал ожидаемый ХРЕНДАЙ. Список перлов от ГИБДД пополняется постоянно, там на месте никто не сидит, творчески подходят к работе. С напором креатива справляемся с помощью роботов.

Результат распознавания данных СТС из предыдущего скрина

В результате система научилась распознавать, проверять и при неблагоприятных обстоятельствах восполнять следующие данные:

— VIN

— Марка и модель. Преимущественно определяем по VIN, но если по нему уверенности нет, то модель распознаёт название по данным из СОР и проводит их валидацию через каталоги Дрома.

— Серию и номер СТС.

— Госномер автомобиля.

— Тип кузова. Седан, например. Бывает ситуация, когда по VIN невозможно получить эти данные, или есть только номер кузова.

— Цвет. Тут тоже всё не тривиально. ГИБДД использует свои цвета. Нам пришлось составить специальный словарь для работы с ними.

— Объем двигателя, мощность в л.с. и кВт, тип привода и коробки передач.

И вот спустя 5 месяцев разработки на drom.ru появился мощный инструмент, который не только сам заполняет объявление, но и может распознать, когда в СТС содержатся серьёзные ошибки или намеренно искаженные данные. Посмотрим на примере, как это работает.

В мае 2014 года Дром купил на тест-драйв новенький Skoda Rapid. В пылу радости от новой машины мы даже не обратили внимания, что в документах нам написали не Шкода Рапид, а Шкода Фабия. А это две разные модели. И на взгляд любого инспектора ДПС у нас «левые» документы. Пришлось ехать в ГИБДД, писать заявление и переделывать СТС.

А фишка в том, что такие случаи мы теперь можем обнаружить при анализе VIN и других данных из СТС. Если «скормить» тот неправильный документ нашей системе, она поймет, что это не Фабия, а Рапид.

Проверка корректности названия автомобиля в СТС

Результаты спустя месяц эксплуатации сервиса в реальных условиях:

1. За первые дни работы сервиса мы получили несколько сот положительных отзывов о новом функционале и ноль отрицательных. «Классно то что заполнять ничего не надо, все происходит на порядок быстрее особенно если ты пьяный маляр))))»

2. Заполнение формы новым способом занимает 4 минуты против прежних 10. Основное время теперь люди тратят на творческое описание машины. А полет фантазии, понятное дело, уже сложно оптимизировать.

3. Постоянные пользователи привыкают и довольны. Количество людей, которые выбирают подачу в один клик, на старте было 7%, сейчас уже 20% и растёт.

Система пока не идеальна, мы продолжаем её подкручивать. Например, на днях столкнулись с тем, что Tesla Model S почему-то определялась как Опель. Маску бы это не понравилось =)

Протестировать подачу «В один клик» можно в Приложении ДромАвто (Android | iOS) или через браузер.

Что в планах?

Довести до ума распознаватель. Есть сложные случаи в СТС, которые мы прямо сейчас учимся разруливать. Затем, когда сервис «Подача в один клик» будет работать сам собой и требовать редкого саппорта, займёмся чем-нибудь другим, не менее интересным.

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

Drom.ru

©  vc.ru