Программы успешно оформляют заказы в онлайн-магазинах, проверяют за нами орфографию и переводят тексты с разных языков. Узнали, как проходят будни специалистов, которые учат машины «разговаривать» и лучше понимать человеческий язык.
06:00. Встаю и гуляю с собакой. Иногда я бужу Оби Вана, иногда — он меня. У нас аляскинский маламут — добрейший питомец, напрочь лишенный агрессии к людям. Но с первого взгляда так и не скажешь: Оби размером и видом напоминает упитанного волка.
Каждое утро собираемся как в экспедицию: кликер, миска, корм, поводки — снаряжение для двухчасовой прогулки. Живем недалеко от Лосиного острова: легкая пробежка по лесу бодрит и меня, и Оби. В пустынных местах отпускаю его поиграть с игрушками — там, где его энергия и дружелюбие никого не напугают. Дальше занимаемся на площадке у дома, выполняем простые комплексы по смене позиции, отрабатываем команду «Ко мне».
Это все не для чемпионатов и выставок, просто северных собак нужно чем-то занимать и выматывать — иначе есть риск оказаться в трендах TikTok с полностью развороченной квартирой. У нас таких прецедентов не было: умственные нагрузки выматывают Оби Вана так, что дома он просто спит на балконе. Кстати, еще у нас есть кот, но его сервисное обслуживание много времени не занимает.
08:00. Завтрак с женой. В хорошую погоду жена ходит с нами на прогулки. Завтрак у нас долгий — редко занимает меньше часа. Фоном слушаем аудиокниги или смотрим сериалы.
09:00. Сажусь за работу. Если в расписании есть пары, выхожу на связь со студентами. Дистанционно преподаю машинное обучение на четвертом курсе бакалавриата.
Если пар нет, сразу берусь за основную работу. Стандартный утренний таск — проверить результаты экспериментов, которые ставились на ночь. Большая часть исследований, которые я провожу, требуют от нескольких часов до нескольких дней на компьютерную обработку. Так что дела делаются даже когда я сплю.
Постараюсь рассказать о своей работе на простом примере. NLP-девелопер (Natural Language Processing) учит машины обрабатывать текст на естественном языке. Автопереводчики — это NLP-кейс. А еще программы, которые сами отправляют имейлы в спам, чат-боты и голосовые ассистенты.
Одна из моих последних задач — усовершенствовать технологию извлечения именных сущностей. Это одна из глобальных проблем NLP; решение поможет нейросетям глубже понимать язык. Если объяснить на пальцах: нужно научить компьютер определять в тексте названия локаций, имена людей или, например, даты на маленькой обучающей выборке.
Мы ищем разные методы обучения. Поэтапно это выглядит так:
- изучить научную базу вопроса;
- определить, применимы ли уже описанные методы в нашем конкретном кейсе;
- если нет, составить гипотезу работы нового метода;
- написать код работы метода;
- запустить обработку кода на специальных серверах, чтобы проверить, сработает ли новый метод (найдет ли программа именные сущности в разных текстах).
Если гипотезы подтвердились и все сработало, вывожу результаты, формулирую выводы и несу их команде. Мы решаем, где можно эффективно применить наш метод, какие процессы получится оптимизировать или ускорить. И наконец весь наш труд уходит в разработку. Это ресерчинг-девелопмент: я не пишу код конечного продукта (программы, приложения или сервиса), а провожу исследования в области машинного обучения, и нахожу методы, которые в итоге улучшают какой-то продукт компании.
10:00. Время кодить. На этом этапе как раз пишу пайплайны для обучения моделей новым навыкам. Это не всегда что-то придуманное с нуля: иногда удается найти статьи с открытым кодом, который нужно адаптировать под свои реалии.
По сути, наша работа в этой части не сильно отличается от будней других разработчиков. Мы так же пользуемся системами управления версиями, проводим код-ревью и финальные сверки через мердж-реквесты. По большей части, все стандартно. Специфика в отладке кода проходит на удаленных серверах, а не локальной машине. Большинство методов deep learning в процессе обучения требуют огромных ресурсов, в том числе — мощных графических процессоров.
12:00. Командный митап. В МТС я только с ноября, до этого работал в «Сбере». Но к новой команде уже привык: нас пока всего пятеро и тимлид. У всех своя дифференциация: на одной задаче никогда не концентрируются все пять человек. Кто-то больше занимается фундаментальными исследованиями, кто-то ищет области применения новых методов и внедряет результаты нашей работы в продакшн.
Команда полностью удаленная, в Москве живу только я. При этом никаких проблем с часовыми поясами нет. Синхронизация проходит легко, хотя есть, например, коллега в Новосибирске — разница с Москвой в четыре часа, но это ни разу не помешало в работе. Вживую я знаком только с нашим тимлидом — виделись на новогоднем корпоративе. В офисе бываю очень редко: на больших общих собраниях и конференциях. Не могу сказать, что скучаю по очной работе: живого общения хватает в семье и с друзьями.
13:00. Снова в код. Условно утренние задачи можно свести к формулировке: «Нужно заставить что-то придуманное раньше работать». Днем — «Нужно придумать метод, который будет работать по-новому». Выдвигаем свежие гипотезы для текущей задачи, готовимся к следующим экспериментам.
Часто одного эксперимента для метода недостаточно: дисперсия оценки качества очень высокая. То есть с разными вводными и параметрами эксперимент будет давать результаты значительно хуже или лучше. Например, если мы попали в исходные данные, задали удачную выборку примеров — получим отличный результат. Но стоит чуть перетасовать исходники — качество работы метода резко упадет, машинный разум справится заметно хуже.
Это как попросить отвлекшегося студента повторить, что сейчас сказал лектор. Повторить-то повторит, но до сути он вряд ли дошел и, скорее всего, мало что из сказанного понял. Так и в машинном обучении: приходится проверять гипотезы по несколько раз, чтобы убедиться в их истинности.
16:00. Провожу интервью кандидатов. Сейчас идет активный набор в команду. Я собеседую кандидатов по NLP. Здесь тоже все стандартно. Сначала выясняю, какой у соискателя опыт: просматриваю проекты в портфолио и навыки в резюме. Дальше — оцениваю, как кандидат представляет себе работу в сфере ML. Готов выполнять только шаблонные задачи или следит за развитием научной мысли и хочет искать новые подходы и методы. Достаточно задать пару вопросов об интересных тенденциях в сфере, и все станет ясно.
Иногда по результатам интервью проводят тестовые задания. Например, попросят воспроизвести результаты интересного исследования и реализовать метод из статьи в коде.
17:00. Еще немного исследований. Машинное обучение быстро развивается — у нас и революции чуть ли не по расписанию. Последняя случилась в 2017 году. Произошла глобальная смена парадигмы: сверточные и рекурсивные нейронные сети, которые и сами были прорывом в 2013–2014 годах, ушли в прошлое; в тренд вошла архитектура трансформеров. По сути, вся сфера NLP пошла по принципиально новому пути.
Учитывая такие темпы перемен, критично важно следить за всеми новостями. Смотреть конференции из рейтинга core-A/A*. Топовые в нашей области — ACL, ECAL, NAACL, AACL и EMNLP. Более общие конференции (не только по NLP) тоже стоит отслеживать. Например, AAAI, IJCAI, NeurIPS.
Следить за трендами — это настоящая работа, на знакомство с литературой ежедневно уходят часы. Кстати, в неакадемические ресурсы тоже стоит заглядывать. С ними больше времени уходит на фильтрацию и проверку написанного. Но иногда важные материалы и открытия раньше оказываются на «черном рынке»: там публикации выходят быстрее, чем на официальных ресурсах.
18:00. От кода к слову. Сажусь писать статьи. Оптативный элемент распорядка. Если удалось нащупать стоящий метод обучения, перехожу с языка кода на человеческий и описываю полученные результаты. Материал отправляется на ревью к коллегам или на внешнюю оценку — например, в НИУ ВШЭ или Skoltech.
Если первые отзывы положительные, выбираем конференцию для подачи работы и ждем рецензию — зачастую на это уходит несколько месяцев. Дальше работаем с фидбэком. Иногда текст возвращают с незначительными правками, но бывает, приходится все переписывать. А еще во время ожидания публикации может выйти работа, которая полностью обнулит нашу.
Мы сотрудничаем не только с академическим сообществом. Например, часто публикуемся на Habr, но и там есть свои требования.
19:30. Пока, компьютер — привет, люди. Финал рабочего дня плавающий и во многом зависит от лекций. Дальше по расписанию — встреча с друзьями в баре, прогулка в парке или теплый вечер дома с гитарой. У меня есть музыкальное образование по классу фортепиано, но сейчас мне ближе струны. Собрал мини-коллекцию: укулеле, акустику, электрогитару. Своего бэнда пока нет. Да и не хочется — нравится играть для себя и домашних.
22:00. Ложимся спать. Как бы ни прошел вечер, не забываю поставить вычисления на ночь — не хочется впустую терять такой ценный ресурс, как время.