Мы в ABBYY понимаем, как важно начинать строить карьеру в интересном для себя направлении еще в студенческие годы. Поэтому помогаем талантливым ребятам пробовать свои силы и развиваться уже на третьем курсе университета. Мы проводим летние стажировки, где даем ребятам настоящие «боевые» задачи. По итогам лучшие студенты получают предложения о работе.  Летняя стажировка помогает будущим сотрудникам не только получить опыт и проявить себя, но и изучить внутренние стандарты и процессы разработки компании. Кроме того, это еще и отличная возможность получить предложение о постоянной работе уже на четвертом курсе. Как правило, ABBYY предлагает стажерам частичную занятость для комфортного совмещения с учебой.  Мы уже не раз подводили итоги летних стажировок в ABBYY (тут, тут и тут), но еще никогда не рассказывали о том, как в целом это проходит в нашей компании, какие тестовые задания и задачи выполняли стажеры, и что думают о стажировке менторы. Все подробности – под катом. Обычно еще осенью, во время планирования бюджета на будущий год, наши сотрудники уточняли у каждого департамента об открытых вакансиях для стажеров. Зимой эти списки финализировали, а в марте ABBYY уже широко анонсировала летнюю стажировку среди студентов из разных вузов и направлений. Затем менеджеры собирали заявки, проводили собеседования, проверяли знания и отбирали кандидатов. В связи с пандемией в 2020 году мы, как и многие крупные компании, приняли непростое решение отменить летнюю стажировку: это было небезопасно как для учеников, так и для сотрудников компании. Поскольку в 2021 году ситуация с COVID-19 стала немного стабильней, мы возобновили традицию летних стажировок. Однако решили провести ее в гибридном мини-формате, только среди студентов МФТИ и только по одному направлению – AI (Artificial Intelligence)/ ML (Machine Learning). Несмотря на то, что формат летних стажировок изменился, специфика и сложность задач остались на прежнем уровне. С учетом позднего анонса в этом году мы не рассчитывали получить большое количество заявок. Однако наши ожидания не подтвердились – мы получили 80 заявок от студентов МФТИ на прохождение летней стажировки в ABBYY.  Вначале со всеми кандидатами беседовали HR-специалисты, затем студентам предложили выполнить два несложных технических задания, чтобы понять их общий уровень знаний и навыков: После уже менторы ABBYY назначали интервью кандидатам, которые лучше всего прошли все предыдущие испытания. По итогам отбора в этом году стажировку в компании проходили 11 студентов. «Отбор кандидатов – непростая задача, поскольку заявок было довольно много. Совет будущим соискателям – старайтесь проявить себя заранее на мероприятиях, проводимых в университете. Шанс попасть на собеседование гораздо выше у студентов, которые уже показали себя с хорошей стороны», – поделился Head of Group NLP&ML, ментор летней стажировки Валерий Новицкий. Поскольку в этом году мы проводили стажировку в мини-формате, для нас было важно выбрать одно из наиболее приоритетных для компании направлений разработки. В этом году наш выбор остановился на области AI/ML. «В области AI/ ML я работаю много лет, и сейчас она очень актуальна – большинство компаний делают на нее ставку, как и мы в ABBYY. Поэтому в стажировке приняли решение остановиться именно на этой тематике», – уточнил Head of Group, Visual Recording and Screenshot Analysis Group, ментор летней стажировки Сергей Кочетков.  «Стажеры работали над прототипами для перспективных задач в области AI/ ML. Это было интересно для них и полезно для нас. Реальная работа имеет свою специфику, но за два месяца полноценно включиться в нее довольно сложно. В целом все стажеры хорошо продвинулись в решении своих задач. По окончании стажировки они продолжат заниматься той же или близкой к ней задачей», – сказал Валерий Новицкий. К примеру, стажер Глеб занимался распознаванием действий пользователя по скриншотам. «Из пяти задач на выбор эта заинтересовала меня больше всего, поэтому я сразу ее выбрал. Она состояла в том, чтобы одной нейросетью решить всю задачу сразу (подход end to end) и понять ее эффективность. Исходя из итогов моей работы, куратор решил, что это решение перспективно и его стоит дальше совершенствовать. И я, уже как сотрудник ABBYY, продолжаю над ней работать», – рассказал Глеб. Пример 1 Стажер Илья в качестве работы выбрал иерархическую кластеризацию документов. «Задача состояла в том, чтобы кластеризовать документы таким образом, чтобы в дальнейшем людям или алгоритмам было проще определять их тип. Моя технология – небольшое звено в огромной цепочке машинного обучения», – рассказал Илья. В экспериментах Илья использовал три небольших моноязычных датасета: немецкий, русский и англоязычный, примерно по тысяче документов и десятку классов в каждом. Для измерения кластеризации он остановился на Adjusted Rand Index метрике, поскольку ее недостатки оказались менее существенны для текущей задачи. «Из ее достоинств: уважает измельчение, то есть не штрафует случай, когда исходный кластер оказался разбит на несколько более мелких; не зависит от топологии кластеров, в отличие от многих других метрик, которые завышают показатели на выпуклых множествах; оценка на случайном кластеризаторе близка к 0 – очень полезное свойство. Главный недостаток метрики – потребность в разметке, но в моем случае это не было проблемой», – уточнил Илья. Pipeline состоял из четырех этапов: препроцессинг, векторизация, метризация, кластеризация. «Сначала я занялся очищением документов от мусора (знаков пунктуации, стоп-слов и пр.), но, как выяснилось в ходе экспериментов, препроцессинг почти не влияет на качество кластеризации. Далее я переводил очищенные документы в векторы. TF-IDF векторизация является стандартной для текстовых представлений, однако после нее размер эмбеддингов получается около 10 тысяч. Поэтому я решил попробовать и методы снижения размерности – LSA и LDA. По итогу LSA оказался лучше и стал ключевой оптимизацией во всем pipeline: сжатие эмбедингов до 10 элементов на 20% улучшило качество кластеризации, а также в четыре раза сократило время ее работы», – рассказал Илья.   Получив векторные представления документов, стажер приступил к их сравнению. Для этого он выбрал две метрики: евклидово расстояние и косинусную меру. «Косинусная мера в теории является более подходящей мерой сходства TF-IDF векторов. Однако на практике оказалось, что евклидово расстояние показало себя лучше», – сказал Илья. После того, как появилась возможность сравнивать документы между собой, можно было приступить к их кластеризации. «В ходе экспериментов я опробовал четыре алгоритма кластеризации, причем все из них, кроме Affinity propagation, требуют явного указания количества кластеров. Поскольку пользователь не всегда знает, какое число подходит лучше, я реализовал автоматический подбор этого параметра. Для этого задается нижняя и верхняя граница на количество кластеров, после чего для каждого числа прогоняется алгоритм, и с помощью еще одной метрики качества Silhouette score выбирается то число, которое дало наиболее хорошо разделимые кластеры.  На Рисунке 1 показаны итоговые метрики качества для каждого алгоритма. Черные штрихи на графике — стандартное отклонение. Как показали измерения, у k-means более высокие метрики, хотя значения на втором датасете низкие. Также стоит отметить иерархическую кластеризацию, которая не выделяется высокими метриками, зато в среднем ведет себя более стабильно. «Для визуализации результатов (Рисунок 2, цвета на картинках слева и справа добавлены для наглядности: красный слева и справа - не один и тот же класс) я использовал 2D t-SNE на примере иерархической кластеризации (т. к. она показывает одни из лучших результатов) на англоязычном датасете. Слева представлено истинное разбиение, справа — предсказанное. В целом исходные кластеры были предсказаны верно. Да, многие оказались разбиты на несколько более мелких, но такое поведение является нормальным», — подытожил Илья. Пример 2 Стажеру Сергею предстояло разобраться с разрывными аннотациями в текстах, а именно найти решение по поиску сущностей, которые могут быть разбиты на части. «Эта технология может быть применена, к примеру, для выделения денежных сущностей, поскольку они достаточно часто встречаются в такой постановке задачи. Это существенно упростит работу с документами», – поделился Сергей.  В своей работе стажер использовал датасеты на английском языке, в которых были размечены вхождения денежных сумм.  Модель для решения проблемы разрывных аннотаций состоит из двух частей, которым предшествует получение общих признаков. Сначала с помощью BERT и Bi-LSTM получаем эмбеддинги для каждого токена, а затем строим на их основе Span Representation. Это позволяет размечать и связывать не просто токены, а целые спаны (непрерывные последовательности токенов). Полученные признаки используются в упомянутых выше частях модели: первая из них присваивает метку класса всем возможным спанам, а вторая – определяет наличие связи между размеченными спанами. В качестве этих частей могут выступать многослойные перцептроны. «Результаты говорят о том, что подход, основанный на Span Representation, хорошо решает задачу NER, и при этом делает удобной работу с разрывными аннотациями. Размечая сущности с F1-score более 0.94, мы получаем возможность учитывать и разрывные аннотации. F1-score для них на момент окончания стажировки был около 0.62, что говорит о возможности дальнейшего улучшения подхода. Основной сложностью является то, что существует достаточно много различных типов разрывных аннотаций, при этом в реальных данных их встречаемость ниже 5% от всех аннотаций», – рассказал Сергей. «После стажировки я перешел в штат ABBYY, поэтому сейчас я работаю в том числе и над усовершенствованием алгоритма. Это не может не радовать, поскольку эта тема по-прежнему остается для меня интересной», – подытожил Сергей. В этом году мы также изменили формат подведения итогов стажировки. Раньше наши стажеры сдавали итоговый проект своим наставникам, по результатам которого менеджеры принимали решение о дальнейшем оффере кандидату. С этого года все наши стажеры должны были защитить свои проекты, выступив с короткой презентацией перед всеми менторами, приглашенными менеджерами и интернами стажировки. Каждое выступление было ограничено по таймингу – не более пяти минут. Такой формат помогает стажеру показать не только практические знания, но и soft skills, включая способность определять главные тезисы проекта, донести аудитории свою мысль, а также публично выступать перед экспертами. Для менторов такой формат тоже оказался полезным нововведением. Менеджеры могут сравнить задачи, узнать про новые подходы в их решении, а также предложить работу в своей команде, если у профильного ментора нет открытых вакансий. «Новый формат защиты проектов мне очень понравился. Я думаю, что не совсем успешных проектов было 10-15%, и в этом случае пришлось упростить задачу так, чтобы результат все-таки получился. Остальные стажеры отлично справились со своими задачами. Это, кроме того, и заслуга руководителей, поскольку они смогли подобрать стажерам задачи по силам, рассчитав тайминг и квалификацию студентов, а также в целом руководить работой стажера», — поделился Сергей Кочетков. По мнению стажера Глеба, для успешной защиты проекта необходимо не только тщательно проработать презентацию и текст, но и отрепетировать выступление так, чтобы уложиться в отведенный тайминг. «Еще за несколько недель до защиты мы созванивались с ментором и составили примерный план того, как должна выглядеть итоговая презентация. Ближе к дедлайну, мы этот план скорректировали, я написал к нему текст, сделал презентацию, а затем тренировался выступать с таймером», — рассказал Глеб. А вот стажер Сергей занялся составлением презентации к защите проектов еще в самом начале стажировки: «Мы с ментором начали готовить презентацию еще с первой встречи. У нас был созвон каждые две недели, где мы обсуждали результаты и план действий. И после каждого колла я добавлял в презентацию новый слайд, обновлял старые результаты. К тому же, поскольку мы не раз обсуждали многие детали презентации, подготовить финальное выступление было не так сложно», — добавил Сергей. По итогам двухмесячной летней стажировки из 11 кандидатов оффер получили шесть человек.  «Я думаю, что это не просто хороший, а отличный результат стажировки. Я бы советовал всем студентам активно проходить стажировки, ведь это не только возможность расширить знания и попробовать свои силы в боевых задачах, но и с большой вероятностью получить оффер и начать строить карьеру еще будучи на 3-4 курсе», – отметил Сергей Кочетков. Все шесть стажеров очень талантливые ребята, и у нас нет сомнений, что они смогут построить успешную карьеру у нас в ABBYY.  «Работа стажеров оценивалась по нескольким критериям: успешность решения задачи, инициативность, коммуникабельность и внимание к деталям. Причем, успешность решения – не главное, задачи были сложными. Важнее было то, как задача решалась: смекалка, усидчивость, взаимодействие с куратором (обсудить решение, показать результаты).  Для нашего NLP-отдела стажировка закончилась двумя офферами из трех возможных. Думаю, это хороший результат, а также полезный для всех опыт: студенты получили практику и больше половины первую работ, а сотрудники отдела – опыт менторства и новых коллег. В программе стажировок я участвовал впервые. Надеюсь, что в следующем году удастся повторить», – пояснил Валерий Новицкий. «Я бы очень хотел принять участие в следующей стажировке. Помимо того, что для нашей команды мы нашли перспективных специалистов, так еще все руководители смогли прокачать свои менторские скиллы, что важно для дальнейшего карьерного роста», – заключил Сергей Кочетков. На будущий год ABBYY планирует расширить направления стажировки – будем искать стажеров не только в разработку и тестирование, но и по другим направлениям.