Чем занимается наша R&D команда.С годами задачи меняются: сначала был фокус на развитие одной R&D технологии (трансформерной персонализации), затем на ее распространение по Яндексу, а сейчас мы с командой занимаемся R&D для рекомендаций в целом, не ограничивая себя одной конкретной технологией.
На что декомпозируется работа:
1.
Поиск новых технологий — постоянное изучение arxiv'а, конференций, воркшопов, инженерных блогов. Об этом я писал чуть подробней в посте
Про чтение статей (для R&D). Потребность в R&D, как правило, драйвится с двух сторон: либо мы сами "приносим" новые технологии для улучшения рекомендаций в продуктах; либо продукты приходят к нам со своими проблемами. Для нас первый сценарий реализуется чаще, поэтому поиск новых технологий — очень важная часть работы.
2. Э
кспериментальная деятельность, прототипирование — выдвигаем и проверяем различные гипотезы, большая часть из которых выглядит как "если сделаем Х, улучшим базовое качество рекомендаций на Y". Довольно неплохое мерило успешности R&D команды, помимо прямого влияния на бизнес-метрики — это количество выдвинутых / проверенных / успешных гипотез, эдакая "пропускная способность" в гипотезах. При этом, чтобы было много успешных гипотез, нужна хорошая ресерчевская 'интуиция'. Чтобы выработать интуицию, нужна хорошая теоретическая база и опыт (как положительный, так и отрицательный) — про это упоминал в посте "
Про ML соревнования".
3.
Поддержка и развитие R&D инструментов:
*
фреймворк для обучения нейросетей (он же трейн луп) - самая важная компонента, больше всего влияющая на количество проверяемых гипотез. Предела совершенству здесь нет: как лучше сделать конфигурирование обучения, как должен выглядеть конструктор модели, какие нужны коллбеки, что нужно логировать. Хорошая утилизация ресурсов тоже очень важна (не упираться в чтение по сети и в cpu, использовать оптимальные реализации слоев).
*
работа с данными — зачастую самые профитные гипотезы связаны именно с данными. Подать что-то новое в модель, изменить представление входных данных, модифицировать целевую задачу, придумать новую процедуру предобучения. При этом нам доступны по-настоящему большие данные, триллионы пользовательских событий. Чтобы не состариться при проверке очередной гипотезы, требующей "варки" нового датасета, нужен удобный, гибкий и быстрый фреймворк. Дата инженеров у нас нет — нам важно уметь самим залезать в обработку данных и что-то быстро в ней менять. Да и инструменты для работы с данными в Яндексе настолько хороши (YQL, YT), что даже ресерчеры вполне способны их освоить :)
*
инструменты для внедрений — "быстрые применялки" моделей, регулярные процессы дообучения, сервисы для применения моделей, оффлайн насчеты векторов, индексы для кандидатогенерации, etc. Здесь частично мы справляемся сами, частично нам помогают другие команды. Некоторые инструменты мейнтейнят и развивают выделенные команды. Конечная цель у нас — это всегда real-world impact, поэтому с этим всем мы тоже много сталкиваемся.
*
командные процессы — совершенствуем их от полугодия к полугодию. На мой biased взгляд, выстраивание процессов для эффективного R&D гораздо сложнее, чем в обычной разработке. Вопросов много: сколько людей должно заниматься одним проектом, как лучше проводить планирования, сколько проектов должно быть у каждого человека, как организовать семинары по чтению статей, на что коммититься, etc.
4.
Внедрения — мы постоянно общаемся с продуктовыми командами, рассказываем про новые технологии и наши планы, договариваемся про совместные внедрения, делаем общие для экосистемы Яндекса инструменты. Зачастую от сервисов узнаем много нового, вырабатываем новые интуиции, а потом еще и "кросс-опыляем" сервисы, рассказывая одному сервису про фишки другого :) Ну и, конечно, очень приятно видеть импакт на продукты, которые использует много людей (Музыка, Кинопоиск, Маркет, Алиса, Поиск, etc)
К чему я это все: у меня есть
вакансия; если прочитали и чувствуете, что душа к нам лежит — приходите в личку (
@kkhrylchenko) :)
P.S: приступаю к созданию
видео про Pinterest 🙂