Карьера в IT: NLP Engineer и NLP Researcher
В новой статье серии «Карьера в IT» поговорим об одной из специализаций Data Science — Natural Language Processing. NLP Specialist занимается обработкой естественного языка: это могут быть задачи по распознаванию речи, машинному переводу, определению эмоциональной окраски текста и так далее.
Об этой предметной области нам рассказали Всеволод Демкин (Franz, Projector School), Карим Лулу (Galactica Labs), Константин Бохан (N-iX), Роман Хабунь (FreySoft) и Сергей Сотник (Phase One Karma).
Задачи и обязанности
Специалист по NLP может заниматься преимущественно исследовательской или инженерной работой.
NLP Researcher — это исследователь, который отвечает за грамотную работу с данными и организацию корректных и воспроизводимых экспериментов. Такому специалисту полезно иметь глубокие знания по лингвистике или работать в тесной связке с компьютерным лингвистом.
NLP Research Engineer — разработчик с хорошими знаниями математики, алгоритмов, оптимизации, который может эффективно внедрять наработки исследователей и помогать им. Такому специалисту достаточно иметь базовое представление о лингвистике, семантике и лексике — понимать природу данных, с которыми работает.
«Исследователь должен найти метод решения задачи, сделать прототип. А инженер уже „вылизывает“ его, оптимизирует до состояния, когда он будет надежно работать на продакшене и не требовать чрезмерно большого (соответственно, дорогого) количества ресурсов. Но в небольших компаниях эти роли нечетки» (Сергей Сотник, Senior Data Scientist в Phase One Karma).
«В принципе, эти две роли могут совпасть в одном человеке. Но тогда это, как правило, уже уровень лида» (Всеволод Демкин, Software Developer в Franz, преподаватель в Projector School).
Конкретные задачи и круг обязанностей зависят от проекта, на котором работает специалист по обработке естественного языка:
«Последнее время работаю над системой по разбору и извлечению информации из документов в legal tech домене. Наша основная цель — создать некую структуру данных из документа, с которой пользователю будет легко производить различные манипуляции: запросы, трансформации частей документа, слияние документов и так далее» (Карим Лулу, Machine Learning Engineer в Galactica Labs).
«На нашем проекте NLP используется в связке с CV (Computer Vision) и OCR для исправления ошибок OCR и верификации корректности документов, которые циркулируют в большой индустриальной системе. Я отвечаю за все этапы жизненного цикла сервиса: от проверки гипотез, поиска SOTA и POC на Kubeflow Notebook Services — до Helm для разворачивания микросервиса, юнит- и интеграционных тестов» (Константин Бохан, Tech Lead в N-iX).
«В мои обязанности входит спектр задач, начиная от проверки гипотез, сбора, очистки и препроцессинга данных, исследования и построения тестовых моделей и заканчивая реализацией и развертываниям модели в продакшн-среде с разработкой сопутствующих модулей» (Роман Хабунь, Data Science/NLP Engineer в FreySoft).
У каждого проекта есть свои этапы, которые в процессе разработки могут итеративно повторяться:
- изучение предметной области;
- подготовка данных;
- проба адаптации различных алгоритмов;
- доведение самого перспективного варианта до рабочего состояния.
От того, на каком этапе проект, как правило, зависит типичный рабочий день NLP-специалиста.
«Первый этап — поиск и чтение статей. Часто на это уходит не один день. Второй этап — данные. Очень редко, когда они есть, размеченные и в хорошем качестве. На подготовку данных могут уйти месяцы и огромный бюджет. Одновременно добавляются задачи по кодированию: нужно написать разные утилиты, которые скрейпят данные из разных источников, конвертируют, считают метрики, чистят код. Наконец, третий этап — обучение модели» (Сергей Сотник, Senior Data Scientist в Phase One Karma).
«Мое рабочее время распределяется примерно так: 30% — сбор данных, препроцессинг и исследования, 40% — реализация, 30% — оценка метрик модели» (Роман Хабунь, Data Science/NLP Engineer в FreySoft).
«У меня на написание кода обычно уходит3-4 часа в день. Остальное время распределяется между различными задачами: ревью кода, оценка ошибок модели/системы „глазами“ с помощью реальных данных (текстов), определение перспективных направлений по улучшению системы, разметка данных (редко), очистка данных, планирование задач, развертывание или тестирование новой версии системы (редко), мониторинг или диагностика продакшн-систем (MLOps)» (Карим Лулу, Machine Learning Engineer в Galactica Labs).
В зарплатном опросе на DOU нет данных о зарплатах NLP-специалистов — только Data Scientists без деления на специализации. Средняя зарплата Data Scientist с опытом работы от трех лет — $3000, от четырех-пяти лет — почти $4000.
«Из личного опыта скажу, что у специалиста узкого профиля (будь то CV или NLP) зарплата будет в среднем выше, чем у General Data Scientist или General Machine Learning Engineer при похожем опыте и образовании» (Карим Лулу, Machine Learning Engineer в Galactica Labs).
Преимущества и недостатки
В основном специалисты выбирают направление NLP, потому что им это интересно:
«На одной из первых работ я был в роли аналитика данных. Однажды команда продаж попросила нас улучшить фильтрацию „похожих“ клиентов в Excel-таблице. Оказалось, что мы собираем много разных текстовых данных по клиентам, которые никак не используются в фильтрации. Мы применили базовые методы NLP — и существенно улучшили результаты. Этот случай помог оценить потенциал обработки текстовых данных, тогда и заинтересовался этим направлением.
Мне нравится, что индустрия стремительно развивается: постоянно на слуху релизы новых NLP-моделей от Google, Facebook, Open AI, интеграции различных моделей в опенсорсные библиотеки, достижения Human Performance или новые state-of-the-art показатели в NLP-задачах» (Карим Лулу, Machine Learning Engineer в Galactica Labs).
«Я попал в Grammarly на раннем этапе развития компании, и так вышло, что в какой-то момент пришло время сделать акцент на углубление NLP-экспертизы в ней. Я быстро понял, что это самая интересная из AI-сфер, так как язык — это способ описания логики и мыслей, а не более простых и абстрактных образов» (Всеволод Демкин, Software Developer в Franz, преподаватель в Projector School).
«Мне интересно все, что связано с машинным обучением. При этом NLP — настолько широкая область, что её подходы находят себя и в других местах. Например, генерация музыки может быть описана как процесс написания текста на специфическом языке. На конференции Data Science UA был хороший доклад о том, что изобретение новых лекарств происходило в пространстве специализированного языка описания химических формул, который позволяет описать и их 3D-структуру. И там применялось все то, с чем сталкиваюсь в своей работе» (Сергей Сотник, Senior Data Scientist в Phase One Karma).
Среди недостатков отмечают размытое распределение обязанностей на проектах NLP и небольшое количество вакансий как в мире, так и в Украине (на момент публикации на DOU открыто всего три вакансии).
«Что является недостатком NLP-сферы? Наверное, малое количество продуктов, которые люди придумывают в ней. К примеру, есть онлайн-переводчики (Google Translate), сервисы проверки и исправления текстов (Grammarly), чат-платформы (PandoraBots), сервисы по анализу текстов на такие вещи, как тональность (AlchemyAPI), маркетинговая бренд-аналитика (YouScan). Но спектр возможных NLP-powered продуктов, на мой взгляд, намного шире, так как с текстом приходится иметь дело всем и постоянно.
Соответственно, вакансий достаточно мало. Одна из причин — в Украине никогда не было NLP-школы, в отличие от того же CV. Мы, кстати, ставим себе целью изменить эту ситуацию: каждый год выпускаем на рынок примерно 10 подготовленных к работе в этой сфере специалистов» (Всеволод Демкин, Software Developer в Franz, преподаватель в Projector School).
«Для DS-специалиста всегда интереснее заниматься исследованиями и построением моделей, чем рутиной по внедрению и развертыванию. Пока что в специальности нет четкого разграничения активностей на проекте. Надеюсь, в будущем появятся четкие роли и границы ответственности» (Роман Хабунь, Data Science/NLP Engineer в FreySoft).
Также NLP-специалисты выделяют «нелюбимый» этап — разметку и очистку данных.
«Помимо самых лакомых кусочков, связанных с обучением, есть много скучных, но обязательных этапов. Прежде всего, это подготовка данных. Приятно, если и эту часть удается сделать для себя интересной, ведь появилось много подходов, позволяющих работать с неразмеченными данными. Но что-то, например разметка тестового датасета, останется в любом случае» (Сергей Сотник, Senior Data Scientist в Phase One Karma).
«Наверное, почти всем специалистам из ML/DS-индустрии не получается избежать процесса очистки данных. Но с текстами эта проблема усугубляется наличием опечаток, недопустимых символов и прочих артефактов. Иногда приходится подолгу писать кастомные модули именно для очистки данных» (Карим Лулу, Machine Learning Engineer в Galactica Labs).
Как стать специалистом по NLP и куда двигаться дальше
Прежде всего определитесь, в каком направлении хочется работать: исследовательском или инженерном.
«Как я не устаю повторять, в исследовательском мире нет мгновенного вознаграждения, которое дает обычное программирование. Можно сделать сотню провальных экспериментов и впасть в глубокую депрессию, не получив никакого положительного результата :) С другой стороны, в этой сфере, пожалуй, больше пространства для творчества.
Инженерам в какой-то степени легче. Работа Research Engineer находится на стыке разработки и исследований, тут большое поле для применения продвинутых знаний по алгоритмам и математике. Но есть и опасность почувствовать себя „недоисследователем“ и заработать комплекс неполноценности от этого :)» (Всеволод Демкин, Software Developer в Franz, преподаватель в Projector School).
Как базовое образование для будущего NLP-специалиста можно рассматривать IT-направления («Программная инженерия», «Компьютерные науки», «Прикладная математика» и так далее) или же специализацию «Компьютерная лингвистика».
Новичку важно знать статистику, линейную алгебру, а также один из высокоуровневых языков программирования — например, Python. Затем освоить сбор и препроцессинг данных, общие алгоритмы и методы машинного обучения. Наконец, получить знания в домене компьютерной лингвистики, выучить специфические NLP-модели глубокого обучения.
«Также важно иметь широкий спектр инженерных умений: написание качественного кода, покрытие кода тестами, развертывание систем, виртуализация, логирование, создание дашбордов и умение быстро работать с текстовыми данными в консоли (очень недооценено!)» (Карим Лулу, Machine Learning Engineer в Galactica Labs).
В обучении помогут онлайн-курсы Natural Language Processing на Coursera, Complete Data Science Bootcamp на Udemy, Natural Language Processing with Deep Learning от Stanford Online, курс CompLing Summer School от компании Grammarly, а также офлайн-курс Data Science. Natural Language Processing от Марьяны Романишин и Всеволода Демкина.
«Пройдите два-три онлайн-курса. Один по машинному обучению, далее — по нейросетям, а затем уже по NLP. Не знаю, стоит ли говорить, что они должны быть на английском. Кроме того, важно окружить себя информацией по специальности. Я читаю блог компании Hugging Face на LinkedIn, сейчас они со своей библиотекой Transformers находятся на острие прогресса» (Сергей Сотник, Senior Data Scientist в Phase One Karma).
«Я слежу за твиттерами некоторых топовых людей в этой сфере: Yoav Goldberg, Matthew Honnibal, Tal Linzen, François Chollet, Richard Socher, а от них уже дальше расходятся ниточки» (Всеволод Демкин, Software Developer в Franz, преподаватель в Projector School).
Также специалисты по NLP советуют ресурс Towards Data Science и научные статьи на arXiv.org и Papers With Code (сюда попадают только статьи с кодом, который можно запустить и получить те же результаты, что и у авторов).
Будут полезны книги:
- Information Retrieval by Cambridge UP;
- Speech and Language Processing by Dan Jurafsky and James H. Martin;
- Natural Language Processing with Python by Steven Bird, Ewan Klein, and Edward Loper;
- Neural Network Methods for Natural Language Processing by Graeme Hirst.
Что касается карьерных перспектив, NLP-отрасль постоянно развивается, поэтому рост по горизонтали к новым технологиям и задачам практически не ограничен.
«Хотелось бы развивать свои знания и умения в направлении NLP, поработать в разных доменах, улучшить понимание применимости тех или иных методов. И в итоге стать специалистом более высокого калибра» (Карим Лулу, Machine Learning Engineer в Galactica Labs).
«Можно стать, например, Delivery Lead или R&D Director для проектов на основе NLP, а также CTO в стартапах на основе NLP. Вариантов множество» (Константин Бохан, Tech Lead в N-iX).