Каждый сервис компании Яндекс во многом основан на анализе данных и методах машинного обучения. Они требуются и для ранжирования результатов веб-поиска, и для поиска по картинкам, и для формирования рекомендательных блоков. Машинное обучение позволяет нам создавать беспилотные автомобили и голосовых ассистентов, уменьшать время бесполезного простоя для таксистов и уменьшать время ожидания для их клиентов. Все приложения и не перечислить!
Поэтому мы всегда испытываем потребность в специалистах по анализу данных и машинному обучению. Одним из важнейших этапов собеседования в Яндекс для них является общая секция по машинному обучению, о которой я и расскажу в этой статье. Пример модельной задачи для этой секции и возможного содержания ответа по ней я разобрал в видео, которое недавно стало доступно на YouTube. В этой статье я подробнее расскажу о том, чего мы ждём от сильного кандидата на такой секции и почему мы сформулировали именно такие критерии.
1. Собеседования по машинному обучению в Яндексе
Старшие и ведущие сотрудники в Яндексе умеют самостоятельно превращать задачи, сформулированные в бизнес-терминах, в корректно поставленные задачи машинного обучения; выбирать подходящие методы решения, формировать признаковые описания, строить процесс обновления моделей и корректного контроля их качества; наконец, проверять, что полученные решения отвечают изначальным бизнес-требованиям.
В значительной степени эти люди влияют и на //формирование// бизнес-требований: люди, непосредственно работающие с данными, могут лучше всех в мире знать, какие характеристики сервисов влияют на их популярность и полезность, какие проблемы пользователей необходимо решать и на каких показателях это скажется.
Как правило, наши лучшие сотрудники обладают ещё и экспертными знаниями в специфических областях — например, компьютерном зрении, построении языковых моделей или моделей для рекомендательных или поисковых сервисов.
Мы очень ценим наших сотрудников и их экспертизу и хотим, чтобы внешние кандидаты также соответствовали этому уровню. Для проверки этого одна или несколько секций могут быть посвящены специальным вопросам, таким, как компьютерное зрение или методы обучения ранжированию. Одна из секций обязательна посвящена «общим» вопросам: постановке задачи, формированию целевой функции и обучающей выборки, приёмке моделей. Именно о ней сейчас и пойдёт речь.
Разумеется, полный спектр требований применим лишь к тем кандидатам, что претендуют на позиции старших или ведущих специалистов. Кандидатам, рассчитывающим на middle- или junior-позиции, не обязательно уметь всё перечисленное, но им стоит знать, что соответствующие навыки чрезвычайно полезны для карьерного роста – и в Яндексе, и в других компаниях.
В зависимости от требований подразделения также может потребоваться алгоритмическая секция с написанием кода или даже архитектурная секция.
2. Постановка задачи
Итак, основной задачей секции является проверка, насколько кандидат способен самостоятельно разобраться с задачей во всём её объёме, начиная от её постановки и заканчивая вопросами приёмки в пользовательских экспериментах.
Секция начинается с формулировки задачи в бизнес-терминах. Скажем, может потребоваться создать сервис, подсказывающий близлежащие заведения, рекомендующий определённые товары или ранжирующий интересные пользователям фильмы или музыку.
Начать можно с определения возможных приложений рассматриваемой задачи. Сколько пользователей будет у получившегося решения, кто они, для чего им требуется эта функциональность, как они о ней узнают? Кандидат может задать все эти вопросы, а может предложить собственное видение ответов (последний вариант, конечно же, предпочтителен).
Исходя из причин возникновения задачи формулируются бизнес-метрики, а затем и метрики, подходящие для оптимизации в процессе обучения или выбора моделей. Показатель чрезвычайно высокого класса кандидата — если выбор метрик для оптимизации продиктован физическим смыслом решаемой задачи. Простейший пример такого рода — использование DCG-like метрик для задач ранжирования или AUC-like метрик для некоторых специфичных задач классификации.
Здесь же необходимо затронуть вопрос формирования обучающей выборки. Какие данные для её формирования необходимы, как их получать? Что является событием для нашего обучения? Требуется ли осуществлять семплирование? Если да, то как его делать?
3. Методы машинного обучения
После того, как задача в полной мере сформулирована, можно приступать к обсуждению методов её решения.
Здесь необходимо выбрать модель, которая будет строить решение, и обосновать свой выбор. Стоит рассказать о том, какой функционал потерь оптимизируется в процессе построения модели и почему именно он является хорошим выбором для оптимизации тех метрик, о которых шла речь в предыдущем пункте. Также полезно рассмотреть используемый метод оптимизации.
Следующий обязательный для обсуждения пункт — пространство признаков. Классный специалист способен сходу придумать несколько десятков или даже сотен признаков в новой задаче, предварительно разбив их на несколько классов сообразно используемым видам данных (например, признаки могут зависеть только от пользователя, а могут – от пары «пользователь — объект»).
Дополнительным плюсом будет рассмотрение проблемы cold start. Когда сервис Яндекс.Такси уже создан, мы можем использовать информацию о реальных поездках для оптимизации методов маршрутизации по городу; когда уже есть поисковая система Яндекс, можно использовать действия пользователей для получения сигналов о том, какие документы релевантны запросам. Но что делать, если сервис ещё не создан, а решаемая задача критична для его функционирования? Нужно предложить какой-то способ построения достаточно хорошего решения в этом случае.
4. Контроль качества
Наконец, когда решение готово, необходимо удостовериться в том, что оно достаточно хорошо. Если новому решению предшествовало некоторое предыдущее — необходимо понять, является ли новое решение более качественным.
В этот момент кандидату необходимо продемонстрировать свои способности в формулировании экспериментов для проверки соответствующих гипотез. Здесь нужно выбрать модель эксперимента и способ проверки статистической значимости изменений. Скажем, это может быть обычный A/B эксперимент на пользователях сервиса, а может быть экспертное оценивание результатов работы. Какие при этом показатели необходимо отслеживать? За чем и как необходимо следить, чтобы обеспечить корректность эксперимента?
5. Как преуспеть на секции
Уровень кандидата полностью определяется тем, насколько самостоятельно и глубоко ему удалось изложить решение поставленной задачи. Хорошо проведённая секция по машинному обучению неотличима от секции, известной у наших западных коллег как ML System Design, а слабая секция может быть похожа на обсуждение какого-либо специального вопроса — например, оптимизации LLH линейными разделяющими правилами.
При этом мы хорошо понимаем, что в задачах машинного обучения зачастую неясно, какой метод сработает и сработает ли вообще хотя бы какой-нибудь. Поэтому чувствуйте себя свободно, обсуждайте задачу с собеседником так, как будто это ваш коллега, с которым вы решили обсудить возможные варианты решения задачи, возникшей в процессе обычной работы. Мы не требуем, чтобы описанное на секции решение было гарантированно хорошим — мы лишь хотим, чтобы оно имело под собой разумное обоснование, позволяющее поверить, что вы справитесь с подобной задачей в реальных условиях.
Например, мы не требуем досконального знания различных статистических критериев, но ожидаем, что вы осознаёте важность корректной проверки гипотез и обладаете достаточной квалификацией, чтобы при необходимости эти методы применять. Аналогично, на этой секции не требуется подробного описания работы методов машинного обучения, но ожидаем, что вы сумеете обоснованно выбирать те или иные модели для своих задач.
При этом вы вольны углубляться в хорошо известные вам области. Уделяйте им больше времени в своём ответе и меньше говорите о том, в чем ваши знания не так глубоки. Мы понимаем, что невозможно быть специалистом во всех областях и при этом ценим интеллектуальную честность. Если кандидат хорошо понимает свои сильные и слабые стороны и способен открыто об этом говорить — это очень хороший признак. Кроме того, это позволяет эффективно тратить время секции: оно будет в большей степени потрачено на выявление сильных сторон кандидата.
Наконец, приведу несколько источников, изучить которые будет полезно как для того, чтобы успешнее работать над проектами, связанными с машинным обучением, так и для того, чтобы подготовиться к секции по машинному обучению.
- Лекции К. В. Воронцова по машинному обучению и видеолекции с того же курса
- Пост про курс Яндекса по машинному обучению на Coursera
- Видеолекции Дениса Расковалова об информационном поиске
- Рассказ о персонализации в поиске Яндекса
- Рассказ о технологии, предугадывающей пользовательские запросы в поиск Яндекса
- Рассказ Андрея Гулина о технологии MatrixNet
- Нейронные сети в поисковых системах. Алгоритмы Палех и Королёв.
Ну и наше видео на YouTube:
Автор: ashagraev