Журнал / герои

Летние каникулы с Алисой: как студенту попасть на стажировку в Яндекс и что на ней происходит

Рома Москаленко — студент третьего курса бакалавриат прикладной математики в Московском институте электроники и математики НИУ ВШЭ. Летом 2021 года он прошёл стажировку в команде голосового помощника Алиса. О том, как он готовился к отбору и чему научился во время работы в Яндексе, рассказываем в статье.

Испытания на пути к стажировке

С нейросетями Рома знаком с 10-го класса. Тогда он впервые поехал на программу образовательного центра «Сириус», где в течение месяца работал над проектами, связанными с предсказанием пробок по карте города и болезней по кардиограмме. После «Сириуса» были соревнования на Kaggle и майнор по нейросетям в университете. И наконец Рома решил пройти стажировку в Яндексе.

Отбор проходил в четыре этапа. Сначала нужно было решить шесть задач в онлайн-среде, используя любой язык программирования. Среда автоматически проверяла код на работоспособность, учитывала ограничения по скорости работы и объёму потребляемой памяти. 

Рома вспоминает, что над задачами пришлось подумать, а решения оказались нестандартными. Из примеров: даны два генератора случайных точек, лежащих в пределах окружности, и тысяча точек. Нужно определить, какой из генераторов их создал. Также была задача по созданию быстро работающего алгоритма и пара заданий по машинному обучению. Нужно было написать модель для распознавания пола человека по голосу. Рома успешно решил все задания, и следующим этапом стало собеседование в Zoom. 

— Собеседование проводил тимлид, — рассказывает Рома. — Спрашивал, где я учусь и чем занимаюсь, рассказывал про команду Алисы. Дал несколько задач — по содержанию что-то среднее между математикой и программированием. Ещё были практические вопросы, например: «Вам выдали два микрофона для Алисы. Как вы поймёте, какой из них лучше использовать?»

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

Неделя ожиданий и волнений закончилась сообщением от HR Яндекса: «Команда готова пригласить вас на стажировку». «В придачу подарили Яндекс.Станцию Мини. Было очень мило», — вспоминает Рома.

Запуск собственного прототипа за четыре месяца

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

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

— Чтобы это проверить, — объясняет Рома, — нужно много раз сказать колонке слово «Алиса» в разных условиях и посмотреть, как часто она срабатывает правильно. Эксперимент в лаборатории выглядит так: на колонке включают песни, параллельно с этим внешние динамики воспроизводят команду «Алиса», заранее записанную голосами ребёнка, женщины и мужчины. Необходимо повторять эти действия и следить, активируется колонка или нет. Это может звучать просто, но есть масса нюансов. Например, колонка активируется по-разному в зависимости от громкости музыки. Параллельно тому, как одна колонка воспроизводит команду, на второй проигрывается, например, шум микроволновки. Это тоже влияет на результат. Если мы хотим проверить колонку на тридцати песнях и трёх фразах, произнесённых разными голосами, а также добавить шумов, потребуется несколько дней непрерывной работы.

Во время тестов колонка записывает звук — как поступающий извне, так и тот, который сама воспроизводит, — чтобы в любой момент услышать команду и отправить сигнал на сервер. К примеру, прозвучала команда: «Алиса, включи музыку». Сама колонка распознаёт только слово «Алиса». Фраза «включи музыку» передаётся на внешние серверы, и они возвращают ответ Алисе. Задача команды Ромы состояла в том, чтобы из всего записанного звука убрать воспроизводимую музыку и посторонний шум. Во время таких экспериментов в лаборатории собираются датасеты, на которых настраиваются алгоритмы эхо- и шумоподавления. 

Результаты Роминой работы — от собранных записей до алгоритмов машинного обучения — легли в основу нового продукта, который пока ещё находится под NDA, но скоро пользователи Яндекса смогут с ним познакомиться.

Как и зачем проходить стажировку

На стажировке ни разу не требовали того, чего я не знаю, не объяснив, как это сделать.

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

Рома многому научился за время стажировки. Например, раньше он мало работал с bash, основным скриптовым языком на Linux, но рабочие задачи помогли набить руку и набраться опыта. Рома многое узнал о машинном обучении, обработке данных и фильтрах для работы со звуком.

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