Захватывают объекты, ищут инфлюенсеров и породистых перспективных скакунов. InData Labs: от сервисов к продуктам

Партнёрский материал
21 сентября 2018, 11:05
Захватывают объекты, ищут инфлюенсеров и породистых перспективных скакунов.

Data Science-отдел компании InData Labs за 3,5 года работы выполнил большое количество краткосрочных проектов в сфере анализа данных, машинного обучения и искусственного интеллекта и теперь переходит к реализации «длинных» проектов от британских и американских заказчиков. Открыли представительство в США. В перспективе — выпуск собственных продуктов. 

За два года в InData Labs сформировались четыре основных направления.

Обработка естественных языков, или Natural Language Processing (NLP). На алгоритмах из этой области строятся как внутренние наработки компании, так и некоторые клиентские проекты.

Компьютерное зрение. В компании работают специалисты, разбирающиеся и в классических методах Computer Vision, и в алгоритмах, базирующихся на нейронных сетях. Одна из задач, которую приходится решать в клиентских проектах, — обработка 3D-изображений в формате Point Cloud. Например, обработка 3D-снимков земной поверхности, сделанных с помощью дрона: на них нужно сегментировать разные объекты. 

— Сейчас в работе два проекта от американских компаний, — говорит СТО InData Labs Алексей Циунчик. — Первый — отслеживать объекты, попадающие в кузов микроавтобуса. Как только человек с коробкой появляется в кузове, надо захватить объект, сопровождать его и отслеживать. Заказ поступил от R&D центра автопроизводителя. Там пока не раскрывают, как будут использовать эти наработки: возможно, для наблюдения за состоянием груза в процессе перевозки.

Алексей Циунчик, СТО InData Labs.

Алексей Циунчик, СТО InData Labs.

Другой проект — от компании, разводящей лошадей для скачек. Они хотят выявлять лошадей-чемпионов в «детском возрасте». Для этого у заводчика есть большая база данных, вплоть до УЗИ внутренних органов и ДНК. Идея — в том, чтобы 3D-камерами снимать жеребят и взрослых животных, анализировать их пропорции и на основе этих данных, а также УЗИ сердца и генетики определять будущих победителей забегов.

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

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

— Например, была задача предсказать для рекрутинговой компании наиболее перспективные каналы коммуникации при поиске кандидатов, — говорит Алексей. — Компании было интересно, для какой вакансии какие типы каналов наиболее эффективны. Другой востребованный бизнесом продукт — модель оттока клиентов. Если в бизнесе есть постоянные клиенты и есть данные об их поведении, то можно строить модель, которая предскажет их уход. Это особенно актуально для телеком-операторов или, например, онлайн-игр.

Работа с большими данными, в том числе построение хранилищ данных Data Lake и Data Warehouse.  

— Мы сейчас проходим этап активной работы над клиентскими проектами, назовём это «сервисным направлением», — говорит Алексей Циунчик. — Стараемся брать проекты, максимально релевантные Data Science, машинному обучению и большим данным. Принципиально не берём проекты, которые с этим не связаны. Выполняя внешние заказы, нарабатываем экспертизу и вникаем в проблематику рынка, а дальше аккумулируем опыт и реализуем его в собственных продуктах.

— Так как потенциальных клиентов становится больше, чем мы можем переварить, у нас появляется право выбора. И естественно, мы выбираем самые интересные, продолжительные, стабильные проекты, — добавляет директор по развитию бизнеса InData Labs Сергей Работай.

«При обычном полнотекстовом подходе между автомобилем и машиной — нулевое сходство»

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

— Идея проста. Это платформа для поиска и валидации англоязычных лидеров мнений в соцсетях, — рассказывает о проекте ведущий инженер по машинному обучению InData Labs Роман Меркулов. — Рекламодатель обычно хорошо представляет свой продукт и свою аудиторию, но не знает, как найти людей, которые могут этот продукт продвинуть. На данный момент мы ищем их в Instagram, Twitter, Youtube и Twitch — несколько миллионов аккаунтов.

Мы предлагаем полнотекстовый поиск с элементами семантики с богатым набором фильтров: по геолокации, половозрастному составу аудитории, упоминаемости брендов, наличию спонсорского контента и т. д. Этот набор фильтров и другие показатели аналитики профиля инфлюенсера формируются на основе применения моделей машинного обучения. Это классические задачи обучения с учителем. Для них у нас есть возможность собрать выборку размеченных данных, обучить дискриминативную модель и распространить ее на множество неразмеченных объектов.

С поиском ситуация другая. Тут мы можем ориентироваться только на методы обучения без учителя, что значительно усложняет задачу. Мы пытаемся идти дальше TF-IDF-векторизации и производных от неё алгоритмов вроде BM25. Минус традиционного подхода в том, что если в документе не содержится конкретное слово из поискового запроса, то документ не попадёт в поисковую выдачу. Так, у фраз «Я веду блог об автомобилях» и «Здесь постят видео про машины» сходство будем нулевым.

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

Наивный подход — это использование лексических баз вроде WordNet, в которых слова связаны отношениями синонимии и подмножества-надмножества. Другой подход основан на векторных представлениях слов. Одна из идей проста и не нова: слово в предложении хорошо описывается своим контекстом, так давайте учить модель, которая будет для заданного слова предсказывать контекст.

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

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

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

«Идея рекомендовать зрителю фильм, похожий на тот, что понравился раньше, работает плохо»

Ещё один важный реализованный проект в InData Labs — рекомендательная система для крупного онлайн-кинотеатра, который предоставляет платный контент. Задача была конкурсной: InData Labs соперничал с двумя другими командами, искавшими решение в области AI, а также с группой редакторов.

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

Сначала мы получили сэмпл для ознакомления, чтобы понять, подходят ли данные клиента для решения поставленной задачи. Потом — данные за всю историю существования сервиса, более 500 Гб файлов в формате csv. Это были данные о всех действиях пользователей в системе: простые клики, просмотры, покупки, оценки. Также была информация о фильмах: режиссёры, страна-производитель и т. д.

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

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

Для персонализированных рекомендаций мы пробовали различные варианты: разложение матрицы с оценками пользователей, факторизационные машины, градиентный бустинг. Конечно, можно было пробовать и более сложные подходы, например, с использованием глубоких нейронных сетей, но сроки проекта нас ограничивали.

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

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

«Главное — человек должен иметь интерес к машинному обучению»

Среднесрочная цель InData Labs, лежащая на отрезке между сервисами и продуктом, — это Product development services (PDS).

— Об идее PDS я услышал в 2014 году на конференции EPAM SEC, — вспоминает Алексей Циунчик. — Аркадий Добкин рассказывал о том, что это следующий шаг в эволюции аутсорсеров. Идеей я был очарован, но оказалось, что реализовать её очень сложно. Это процесс, который требует не только активной работы продаж в одной области. Надо собрать и сохранить команду, которая активно работает в одной вертикали индустрии: это не только технические специалисты, но и продуктовые менеджеры, и Subject Matter эксперты, и бизнес-аналитики, и нетехнические консультанты. Двигаться в эту сторону непросто, но мы понимаем, что это направление — правильное.

— PDS на длинной дистанции эффективней классической сервисной модели, — говорит Product Manager InData Labs Илья Шустерман. — Разработку не надо каждый раз создавать заново на пустом месте. Пользуясь накопленным опытом, ты делаешь небольшую надбавку к тому, что у тебя уже есть, соответственно затраты уменьшаются. Если хочется получать прибыль прямо сейчас, надо делать аутсорс-проект. PDS-проект не даст моментальной финансовой отдачи. Но чтобы в долгосрочной перспективе стать более эффективной компанией, стоит выбрать этот не очень простой путь.

Сергей Работай, директор по развитию бизнеса в InData Labs.

Сергей Работай, директор по развитию бизнеса в InData Labs.

Движение по направлению к продукту требует больше талантливых специалистов, поэтому InData Labs активно комплектует штат новыми специалистами.

— Любой наш дата-сайентист может прочитать лекцию о том, как устроены алгоритмы машинного обучения, — говорит Алексей Циунчик. — Но продукт — больше, чем алгоритм. В нём есть инженерная, коммуникационная, маркетинговая составляющие, которые должны быть учтены. Поэтому сейчас мы ищем людей с хорошим инженерным бэкграундом (Java, C++, Python), которые поработали на клиентских проектах и понимают, как устроена эта работа. Но самое главное — они должны иметь интерес к машинному обучению. Ведь всё, что мы делаем, так и иначе вращается вокруг ML.

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

— Важно, чтобы эти люди были проактивными, — добавляет Илья Шустерман, — чтобы они хотели разбираться в бизнесе заказчика и понимать, зачем они делают всю эту магию. Мы ищем людей, которые понимают: с помощью кода они решают задачи бизнеса. Это то, к чему мы идём.

InData Labs рекомендует, что читать и смотреть по теме:

Статьи в блоге InData Labs:

Обсуждение