Баннер мобильный (3) Пройти тест

Кто учит машины говорить: один день из жизни NLP-девелопера

О сложной профессии простыми словами

День с экспертом

26 июля 2024

Поделиться

Скопировано
Кто учит машины говорить: один день из жизни NLP-девелопера

Содержание

    Программы успешно оформляют заказы в онлайн-магазинах, проверяют за нами орфографию и переводят тексты с разных языков. Узнали, как проходят будни специалистов, которые учат машины «разговаривать» и лучше понимать человеческий язык.

    Леонид Саночкин, 33 года

    ГородМосква

    Семьяженат

    ДолжностьSenior-девелопер NLP в MTS AI, преподаватель по машинному обучению в НИУ ВШЭ

    06:00. Встаю и гуляю с собакой. Иногда я бужу Оби Вана, иногда — он меня. У нас аляскинский маламут — добрейший питомец, напрочь лишенный агрессии к людям. Но с первого взгляда так и не скажешь: Оби размером и видом напоминает упитанного волка. 

    Senior-девелопер NLP Леонид со своей собакой
    Честно, он добряк!

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

    Это все не для чемпионатов и выставок, просто северных собак нужно чем-то занимать и выматывать — иначе есть риск оказаться в трендах TikTok с полностью развороченной квартирой. У нас таких прецедентов не было: умственные нагрузки выматывают Оби Вана так, что дома он просто спит на балконе. Кстати, еще у нас есть кот, но его сервисное обслуживание много времени не занимает.

    Собака с кошкой программиста
    А кота нашего и волк не напугал бы

    08:00. Завтрак с женой. В хорошую погоду жена ходит с нами на прогулки. Завтрак у нас долгий — редко занимает меньше часа. Фоном слушаем аудиокниги или смотрим сериалы.

    09:00. Сажусь за работу. Если в расписании есть пары, выхожу на связь со студентами. Дистанционно преподаю машинное обучение на четвертом курсе бакалавриата. 

    Если пар нет, сразу берусь за основную работу. Стандартный утренний таск — проверить результаты экспериментов, которые ставились на ночь. Большая часть исследований, которые я провожу, требуют от нескольких часов до нескольких дней на компьютерную обработку. Так что дела делаются даже когда я сплю. 

    Постараюсь рассказать о своей работе на простом примере. NLP-девелопер (Natural Language Processing) учит машины обрабатывать текст на естественном языке. Автопереводчики — это NLP-кейс. А еще программы, которые сами отправляют имейлы в спам, чат-боты и голосовые ассистенты. 

    Одна из моих последних задач — усовершенствовать технологию извлечения именных сущностей. Это одна из глобальных проблем NLP; решение поможет нейросетям глубже понимать язык. Если объяснить на пальцах: нужно научить компьютер определять в тексте названия локаций, имена людей или, например, даты на маленькой обучающей выборке. 

    Мы ищем разные методы обучения. Поэтапно это выглядит так:

    • изучить научную базу вопроса;
    • определить, применимы ли уже описанные методы в нашем конкретном кейсе;
    • если нет, составить гипотезу работы нового метода;
    • написать код работы метода;
    • запустить обработку кода на специальных серверах, чтобы проверить, сработает ли новый метод (найдет ли программа именные сущности в разных текстах). 

    Если гипотезы подтвердились и все сработало, вывожу результаты, формулирую выводы и несу их команде. Мы решаем, где можно эффективно применить наш метод, какие процессы получится оптимизировать или ускорить. И наконец весь наш труд уходит в разработку. Это ресерчинг-девелопмент: я не пишу код конечного продукта (программы, приложения или сервиса), а провожу исследования в области машинного обучения, и нахожу методы, которые в итоге улучшают какой-то продукт компании.

    10:00. Время кодить. На этом этапе как раз пишу пайплайны для обучения моделей новым навыкам. Это не всегда что-то придуманное с нуля: иногда удается найти статьи с открытым кодом, который нужно адаптировать под свои реалии. 

    По сути, наша работа в этой части не сильно отличается от будней других разработчиков. Мы так же пользуемся системами управления версиями, проводим код-ревью и финальные сверки через мердж-реквесты. По большей части, все стандартно. Специфика в отладке кода проходит на удаленных серверах, а не локальной машине. Большинство методов deep learning в процессе обучения требуют огромных ресурсов, в том числе — мощных графических процессоров.

    Рабочий ноутбук Data Scientist
    Работаем

    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. Ложимся спать. Как бы ни прошел вечер, не забываю поставить вычисления на ночь — не хочется впустую терять такой ценный ресурс, как время.

    Скопировано
    1 комментарий
    Комментарии
    • Александр

      Отличная статья! Такой классный жизненный кейс. Успехов в экспериментах и новых интересных гипотез. Уже жду начала обучения.