Как и у кого учатся машины?
Методы машинного обучения используются в решении задач в самых разных сферах, например в распознавании изображений и речи, в рекомендательных системах, в рекламе и в беспилотных автомобилях.
Мы поговорили с Константином Бабаляном, руководителем команды аналитики и эффективности Яндекс Услуг, и с Андреем Нарцевым, руководителем команды онтологии и развития перспективных идей отдела качества рекламы, о том, для чего нужно машинное обучение (machine learning, ML), как с его помощью решать задачи бизнеса и какие навыки необходимы, чтобы им овладеть.
Зачем и кому нужны ML-специалисты
Специалисты по машинному обучению занимаются поиском закономерностей в сложных данных. Одна из типичных прикладных задач, которую можно решать с помощью алгоритмов — определение наилучшего варианта из предложенных, например, оценка различных факторов, влияющих на стоимость аренды, и выведение оптимального предложения. Благодаря машинному обучению можно автоматизировать получение результата: алгоритм анализирует данные о расположении квартиры, ремонте, сезонности спроса и аналогичные предложения на рынке и находит закономерности — иногда даже те, о которых человек бы не догадался самостоятельно.
Из всего многообразия методов машинного обучения в продуктовых задачах чаще всего применяется классический ML и глубокое обучение (deep learning, DL).
Классический ML используется в таких задачах:
— классификация — для разделения музыки по жанрам или определения кредитного рейтинга;
— регрессия — при предсказании стоимости ценных бумаг или пробок на дорогах;
— кластеризации — например, при сжатии изображений. Алгоритмы кластеризации используются также для группировки фотографий в галерее смартфона;
— обобщение и ассоциации — они встречаются в товарных рекомендациях в Яндекс Маркете.
Эти и другие задачи решаются при помощи готовых фреймворков, таких как scikit-learn или разработанный Яндексом CatBoost.
Глубокое обучение используется тогда, когда необходимо обработать сложные неструктурированные данные. Например, свёрточные нейронные сети лучше справляются с задачей классификации изображений, чем классические алгоритмы. Они используются в том числе для улучшения качества и генерации изображений, а также для распознавания лиц.
В глубоком обучении, в отличие от классического ML, алгоритм самостоятельно определяет, какие признаки, присутствующие в данных, ему интересны. Обучение распознаванию объектов (например, животных) на изображениях устроено так:
— Сначала нейросеть выделяет изменение яркости на изображении.
— Затем обобщает замеченные признаки в паттерны. Если на изображениях были кошки и собаки, то паттернами могут быть уши, шерсть, хвост и тому подобнее.
— По мере обучения нейросети уровень абстракции возрастает, а в финале классификатор решает, кошка это или собака.
Другая популярная архитектура в DL — рекуррентные нейронные сети. С их помощью инженеры решают задачи, связанные с текстовыми и голосовыми последовательностями: распознавание и синтез речи, машинный перевод. Например, к таким задачам относятся автоматический видеоперевод в Яндекс Браузере или распознавание речи Алисой.
Для решения типовых задач в глубоком обучении также существуют фреймворки: TensorFlow и PyTorch. В них реализованы блоки, из которых строятся нейронные сети, и методы их обучения.
ML-разработчику в своей работе предстоит столкнуться как с классическими алгоритмами, так и с глубоким обучением. Всё зависит от специфики задачи и предметной области. В Яндексе есть команды, в которых в основном используются модели для работы с табличными данными, есть специалисты, которые фокусируются только на deep learning, а есть сервисы, в архитектуре которых совмещены оба подхода.
Ещё одно направление работы в машинном обучением — аналитика. Если разработчик имеет дело с алгоритмами, то задача аналитика — связать бизнес и технические решения: сформулировать исходную задачу по наращиванию бизнес-метрик в терминах конкретного технического решения. Подробнее о том, какие задачи решает аналитик и какие инструменты он использует, читайте в нашей статье.
Из каких этапов состоят задачи в ML
Первым делом нужно определить задачу, которая стоит перед продуктом, и перевести её на технический язык. Предположим, нам нужно повысить продажи интернет-магазина, предлагая сопутствующие товары к текущей покупке. Это продуктовая задача. Её техническая реализация — создать рекомендательный движок, самостоятельно подбирающий товары, которые могут заинтересовать пользователя.
Следующий этап — сбор и подготовка обучающих данных. Необходимо описать, какие данные будут собираться и как их чистить и хранить. В случае с рекомендательным сервисом в интернет-магазине, полезными данными могут быть:
— профиль пользователя и список продуктов, которые он обычно выбирает;
— список продуктов, которые пользователи часто покупают в одной корзине;
— описание различий пользователей, которые покупают разные продукты.
После того, как данные собраны, проводится построение признаков (feature engineering). На этом этапе эксперт описывает, на что именно алгоритм должен обратить внимание. В случае с рекомендательными сервисами во время feature engineering формируется портрет пользователя. Это нужно, чтобы найти пользователя, который ещё не совершил целевого действия (в нашем случае — не купил продукт), но похож на пользователя, который такое действие совершил.
Задачи для алгоритма формируются в виде фич. Например, мы можем отслеживать, сколько раз пользователь интересовался конкретным товаром за предыдущий месяц. Из значений каждой фичи составляется числовой вектор, который и будет искомым описанием пользователя. Это важная задача, она вполне может занять большую часть времени подготовки модели, ведь недостаточно проработанные признаки приведут к низкому качеству модели.
И только после всех подготовительных этапов начинается обучение. Команда решает, какие алгоритмы использовать, как менять их параметры и как измерять качество модели.
Для того чтобы давать подходящие рекомендации, модель должна уметь предсказывать потребности пользователя, опираясь на его портрет и описание товара. То есть в первую очередь подбирать те товары, которые с большей вероятностью купит конкретный человек. Для решения такой задачи может быть использован подход фильтрации по содержимому. Он состоит в том, что из текстового описания товара, его фотографий и его категории извлекаются значимые признаки, которые сопоставляются с предсказанными предпочтениями пользователя. Таким признаком может быть бренд или соответствие ключевых характеристик товара какой-то из категорий каталога.
В предпочтениях пользователя учитываются демографическая информация, история просмотров и покупок. Когда пользователь просматривает товары, алгоритм фиксирует важные для него товарные характеристики. Чем больше товаров просмотрит пользователь, тем точнее алгоритм опишет профиль его интересов.
Обученная модель интегрируется в продакшн. ML-разработчик подключает модель к продукту и смотрит, как она работает с реальными данными. В нашем случае результат внедрения модели — персональная лента для каждого посетителя сайта. Разработчик собирает данные о действиях пользователей и передаёт их в модель, которая предлагает на их основе рекомендации.
Когда модель подключена к продакшену и есть первые живые данные, мы можем измерить её эффективность. Для этого проводится A/B-тестирование, в котором пользователей делят на две группы, каждой из которых показывают версию сайта с определённой конфигурацией модели. Для того чтобы понять, какая модель лучше, вводятся бизнес-метрики, оценивается конверсия из показов товара в покупку. На этом этапе вновь подключается аналитик. Он отвечает на вопрос: «Как с точки зрения бизнеса измерить, что ситуация стала лучше?».
И, наконец, когда модель протестирована, можно её улучшать: ускорять работу и повышать эффективность. Один из способов — улучшение признаков, заложенных в модель. Допустим, команда разработала алгоритм, который позволяет лучше оценивать соответствие профилей пользователей и товаров и, соответственно, делать более точные рекомендации. Этот алгоритм нужно реализовать, причём так, чтобы он срабатывал в продакшене за десятки миллисекунд.
Что нужно, чтобы попасть в ML
Специфика машинного обучения состоит в том, что разработчик использует математические модели данных, которые обучаются самостоятельно. Когда разработчик пишет классическую программу, которая составляет прогноз погоды на основе информации за прошедшую неделю, ему нужно разработать систему с огромным количеством условных конструкций и прописать все закономерности вручную. В машинном обучении программа самостоятельно анализирует закономерности и строит корреляции. Задача разработчика — создать алгоритм для её обучения и оценки.
Поэтому, кроме свободного владения одним из основных языков программирования (Python, C++ или Java), ML-разработчику требуются обширные знания в области математического анализа, линейной алгебры, теории вероятностей и математической статистики. А чтобы написанные модели были полезны для бизнеса, нужно учиться переводить бизнес-требования на язык задач машинного обучения.
Сейчас в Яндексе практически нет сервисов, в которых бы не задействовалось машинное обучение: алгоритмы используются в рекламе, поиске, языковых сервисах, беспилотном транспорте и много где ещё. Наши эксперты составили небольшую подборку полезных материалов, которая поможет разобраться в этой обширной теме и определиться с карьерным вектором:
— Лекции курса «Машинное обучение» профессора кафедры интеллектуальных систем факультета управления и прикладной математики МФТИ К. В. Воронцова для Школы анализа данных Яндекса.
— Lean Analytics: Use Data to Build a Better Startup Faster (Alistair Croll, Benjamin Yoskovitz) — хорошее подспорье для начинающего аналитика, в котором на примерах реальных бизнес-кейсов показано, как анализ данных помогает достигать целей компании.
— Книга Data Science for Business: What You Need to Know about Data Mining and Data-Analytic Thinking (Foster Provost, Tom Fawcett) рассказывает об основных приёмах работы с данными, направленных на извлечение пользы для бизнеса.
— В книге Machine Learning in Action (Peter Harrington) базовые теории машинного обучения совмещены с примерами использования.