МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ ФГБОУ ВО «Пермский государственный национальный исследовательский университет» Механико-математический факультет Кафедра информационных технологий УДК 004.8 Моделирование и реализация информационной системы для рекомендации плана обучения на основе анализа вакансий Выпускная квалификационная работа бакалавра по направлению 02.03.02 – Фундаментальная информатика и информационные технологии Работу выполнил студент группы ФИТ-1,2-16 4 курса механико- математического факультета: Снегирев А.C. Электронная версия работы помещена Научный руководитель: в электронную библиотеку кафедры ИТ кандидат технических наук, название файла ____________________ доцент кафедры ИТ ПГНИУ: дата _____________________________ Курушин Д.С. Пермь 2020 2 РЕФЕРАТ Работа содержит 56 стр., 27 ил., 40 библ. назв., 3 прил. Актуальной задачей является создание подходов анализа текущего и прогнозирования будущего состояния рынка труда на основе единой модели компетенций, которая позволит применять эти результаты в образовании, найме, управлении компетенциями на уровне компаний, государств и мира. Одной из подзадач этой области является разработка автоматизированных подходов к созданию плана обучения для специалистов разного уровня, учитывая их индивидуальные характеристики. Объект исследования – процесс создания плана обучения специалистам из сферы ИТ. Целью данной работы является моделирование и реализация информационной системы для рекомендации плана обучения на основе анализа вакансий в сфере ИТ. Были рассмотрены различные подходы разной степени автоматизации к созданию планов обучения на собственном опыте. Были рассмотрены достоинства и недостатки каждого из них. Были показаны основные проблемы при анализе объявлений вакансий и возможные пути их решения. Для получения востребованных компетенций и специальностей предлагается подход основанный на векторном представлении компетенций и специальностей с помощью word2vec и WVavgPool. Был разработан и реализован подход, комбинирующий несколько техник такие как NCA и CURE. Получилось увеличить результат кластеризации на 38% относительно базового решения. В результате был получен AMI равный 0.62. Также был разработан и реализован подход для генерации матрицы связанных компетенций внутри кластеров специальностей, который позволяет анализировать группы компетенций для получения итоговых планов обучения. Ключевые слова: рынок труда, план обучения, анализ вакансий, обработка естественного языка, кластерный анализ, компетенции. 3 СОДЕРЖАНИЕ ВВЕДЕНИЕ .………………..…………………...…………………………...………………….. 5 1. Предметная область и обзор литературы ………………………………………………….. 7 1.1 Объект автоматизации ………………………………………………………………….. 7 1.2 Взаимосвязь задач анализа рынка труда …………………………………………….... 8 1.3 Проблемы и подходы к решению задач ………………………………………………. 9 1.4 Практическая значимость …………………………………………………………….. 12 1.5 Концептуализация предметной области …………………………………………….. 12 2. Исследования подходов к решению задачи ……………………………………………..... 14 2.1 Инфографика как план обучения специалиста ……………………………………... 14 2.2 Тезаурус компетенций ………………………………………………………………... 17 2.3 Модульный план обучения………………………………………………………….... 19 2.4 Анализ вакансий для получения плана обучения …………………………………... 20 3. Моделирование прототипа ИС…………………………………………………………….. 26 3.1 Математическая модель плана обучения ……………………………………………. 26 3.2 Проектные решения …………………………………………………………………... 27 3.3 Векторное представление слов ……………………………………………………..... 29 3.4 Кластерный анализ ………………………………………………………………….... 32 3.5 Модель компоненты рекомендации плана обучения……………………………….. 36 4. Реализация прототипа ИС ………………………….…………………………………….... 39 4.1 Компонента обновления базы компетенций……………………………………….... 39 4.2 Компонента сбора данных о рынке труда………………………………………….... 39 4.3 Компонента извлечения компетенций из текста …………………………………..... 41 4.4 Выбор лучших параметров модели …………………………………………………. 42 4.5 Обсуждение результатов ……………………………………………………………... 46 4.6 Web-приложение и компонента рекомендации плана обучения .………………...... 49 4.7 Дальнейшая работа ………………………………………………………………….... 51 ЗАКЛЮЧЕНИЕ ……………………………………………………………………………….. 54 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ …………………………………………. 55 Приложение 1. Результаты анализа вакансий Хабр.Карьера ……………………………..... 57 Приложения 2. Результаты анализа вакансий SO и Builtin по заголовкам………………... 58 Приложения 3. Результаты анализа вакансий SO и Builtin по кластерам ……………….... 60 4 ТЕРМИНЫ И ОПРЕДЕЛЕНИЯ Индивидуальный план обучения — это учебный план, обеспечивающий освоение образовательной программы на основе индивидуализации ее содержания с учетом особенностей и образовательных потребностей конкретного обучающегося Учебный план — документ, который определяет перечень, трудоемкость, последовательность и распределение по периодам обучения учебных предметов, курсов, дисциплин (модулей), практики, иных видов учебной деятельности и, если иное не установлено настоящим Федеральным законом, формы промежуточной аттестации обучающихся Образовательная программа — комплекс основных характеристик образования (объем, содержание, планируемые результаты), организационно-педагогических условий и в случаях, предусмотренных настоящим Федеральным законом, форм аттестации, который представлен в виде учебного плана, календарного учебного графика, рабочих программ учебных предметов, курсов, дисциплин (модулей), иных компонентов, а также оценочных и методических материалов Организация, осуществляющая обучение, — это юридическое лицо, осуществляющее на основании лицензии наряду с основной деятельностью образовательную деятельность в качестве дополнительного вида деятельности Педагогический работник — физическое лицо, которое состоит в трудовых, служебных отношениях с организацией, осуществляющей образовательную деятельность, и выполняет обязанности по обучению, воспитанию обучающихся и (или) организации образовательной деятельности Учебный модуль — это элемент образовательной программы направленный на формирование набора компетенций. Для прохождения учебного модуля используются учебные материалы в различных форматах. Результаты обучения — это запланированные ожидания того, что обучающийся будет знать и уметь делать, какие навыки он будет иметь после успешного освоения отдельных учебных модулей образовательной программы Специальность — набор приобретенных знаний и навыков по результатам прохождения образовательной программы и опыта работы, необходимых для определённого вида деятельности в рамках той или иной профессии Знание — проверенный практикой результат процесса познания, оно возникает как продукт общественной, духовной и материальной деятельности в процессе образования Навык — действие или система действий, осуществляемых почти автоматически и выработанных на основе практики упражнений – многократного повторения на основе имеющихся знаний. Навык может быть применим как к умственным, так и двигательным действиям 5 ВВЕДЕНИЕ Актуальной задачей является создание подходов анализа текущего и прогнозирования будущего состояния рынка труда на основе единой модели компетенций, которая позволит применять эти результаты в образовании, найме, управлении компетенциями на уровне компаний, государств и мира. Исследования в этой области позволят оптимизировать процессы на которых сегодня базируется экономическая модель. Автор предполагает, что создание цифрового профиля компетенций позволит создать более прозрачные отношения между участниками рынка труда и образовательными организациями. Одной из подзадач этой области является разработка автоматизированных подходов к созданию плана обучения для специалистов разного уровня, учитывая их индивидуальные характеристики. Эта работа посвящена поиску возможного решения этой задачи и реализации прототипа ИС. Ключевая проблема этой задачи заключается в том, что еще не существует единого подхода к оценке и определению компетенций. Также как и не существует единой базы компетенций, которая могла бы быть использована для задачи, которая решается в данной работе. Таким образом, нет стандартного решения этой задачи. Существуют подходы к выявлению востребованных специальностей, рекомендации востребованных компетенций, прогнозированию компетенций, сопоставлению вакансии и резюме. Существуют подходы к созданию планов обучения в формате инфографики. Эта работа обобщает эти знания для поиска решения автоматизированного создания плана обучения. Также показаны недостатки подходов и возможные пути их устранения. Объект исследования – процесс создания плана обучения специалистам из сферы ИТ. Предмет исследования – автоматизированные подходы к созданию плана обучения специалистам из сферы ИТ, в частности с помощью анализа вакансий. Целью данной работы является моделирование и реализация информационной системы для рекомендации плана обучения на основе анализа вакансий в сфере ИТ. Для достижения поставленной цели необходимо выполнить следующие задачи: - обзор литературы и существующих решений; - разработка проектных решений и моделирование ИС; - разработка математической модели плана обучения; - разработка модуля анализа текста вакансий; - разработка модуля рекомендации плана обучения. Данная работа устроена следующим образом: в разделе 1 сначала описан объект автоматизации и актуальные направления исследований, затем описаны ключевые и смежные задачи автоматизации рекомендации плана обучения, далее приводятся известные решения, обсуждается практическая значимость и новизна предлагаемого решения, в конце продемонстрирована концептуализация предметной области; в разделе 2 описаны проведенные исследования для изучения различных подходов решения 6 поставленной задачи, обсуждается преимущества и недостатки каждого, а также возможные шаги к устранению проблем автоматизации; в разделе 3 представлены проектные решения, которые были получены на основе исследований, далее продемонстрирована математическая модель плана обучения, используемые подходы к решению задачи, теоретические основы модели прототипа информационной системы, включая UML диаграммы; в разделе 4 описаны этапы реализации каждой компоненты с описанием выбранных средств и подходов, рассмотрен эксперимент с выбором лучших параметров модели, далее продемонстрированы полученные результаты различных компонент ИС. 7 ОСНОВНАЯ ЧАСТЬ 1. Предметная область и обзор литературы Описан объект автоматизации и актуальные направления исследований, затем описаны ключевые и смежные задачи автоматизации рекомендации плана обучения, далее приводятся известные решения, обсуждается практическая значимость и новизна предлагаемого решения, в конце продемонстрирована концептуализация предметной области. 1.1 Объект автоматизации Объектом автоматизации данной работы выступает процесс рекомендации индивидуального плана обучения для специалиста в сфере ИТ. Под рекомендацией понимается предоставление некоторого выбора специалисту в отношение формирования собственного плана обучения. Характеристика индивидуальности означает, что сам результат рекомендации также учитывает индивидуальные особенности специалиста. Более строгое определение понятий и их взаимосвязи дано в разделе концептуализация предметной области в этом разделе. Недостатки экспертно-механического (ручного) подхода создания плана обучения обсуждаются в исследовательской части. На сегодняшний день актуальным направлением в решении задачи рекомендации индивидуального плана обучения является анализ текстовых документов, полученных с досок объявлений вакансий. Подходы в этом направлении базируются на допущении о том что описания вакансий, используемые для решения задач и получения значимых результатов, достаточно полно описывают состояние рынка труда. В общем случае это может быть не так. Во-первых, пока не существует единой модели компетенций или другой единой модели описания способностей специалистов, такой чтобы не допускать разночтения и двусмысленности при чтении описания вакансии. Во-вторых, описания вакансий зачастую не структурированы, а также используется естественный язык, что вместе допускает большую вариативность в способах написания текста вакансии. Это может привести к многозначности и неверному интерпретированию требований к компетенциям или оставляет энтропию достаточную, чтобы было невозможно сделать вывод о требованиях к специалисту. Будем считать, что вся совокупность размещенных вакансий на всех досках объявлений есть репрезентация требований, которые работодатели в действительности предъявляют соискателям. Таким образом, тексты вакансий – это данные о состоянии рынка труда вчера, сегодня и в будущем с некоторой неизвестной погрешностью, которую мы тем не менее считаем допустимой для решения своих задач. Знания, которые могут 8 быть получены из данных в таком случае могут оказаться ценными во многих приложениях как будет показано далее. Задача рекомендации индивидуального плана обучения в общем случае состоит из нескольких подзадач. Каждая в отдельности является отдельной областью исследований. Тем не менее эти задачи зависимы между собой, поэтому они также будут рассмотрены. Также будут рассмотрены сопутствующие задачи, которые могут быть решены, базируясь на тех же данных, которые используются для задачи рекомендации плана обучения. Обсуждение всех задач вместе дает представление общей картины. Это важно для понимания практической значимости. 1.2 Взаимосвязь задач анализа рынка труда На рисунке 1 представлена диаграмма отношений между задачами, участниками и данными, которые они создают. Создание единой модели компетенций для описания всех профессий и отраслей является фундаментальной задачей [1], так как позволяет оцифровать компетенции специалиста и унифицировать данные, которыми пользуются различные информационные системы: от досок объявлений (для описания требуемых компетенций) до образовательных программ (для описания приобретаемых компетенций). Рисунок 1 – Взаимосвязь задач, данных и польза для участников 9 Единая модель компетенций – это единый искусственный язык коммуникации между участниками рынка труда и образовательными организациями. Обратите внимание на рисунок 1 – именно модель компетенций помогает сформулировать требования к специалистам на том же языке, на котором специалисты формируют свои цифровые профили подтвержденных компетенций. На этом же языке образовательные организации могут составлять образовательные программы, а центры сертификации подтверждать те же компетенции, которые были получены в процессе обучения. Это дает большие возможности для автоматизации множества процессов, включая анализ данных рынка труда, поиск лучшего рабочего, персонализацию обучения, рекомендацию плана и траектории обучения. Когда данные формируются на основе единого языка, они могут быть эффективно использованы для анализа, а результат анализа для прикладного применения. Например, использование компетенций для улучшения процессов образования на основе спрогнозированных востребованных компетенции и специальностей может быть эффективно организовано при использовании единого языка. В решении задачи поиска лучшего сотрудника/работодателя система поиска наемного рабочего с подходящими под задачу компетенциями позволит формировать данные о потребности в компетенциях в частности и эффективности рабочей силы в целом. В свою очередь понимание потребностей высоко динамичных секторов рынка труда имеет решающее значение как для соискателей, так и для работодателей и образовательных организаций. Прогнозирование востребованных компетенций позволит предиктивно создавать образовательные программы, когда они будут нужны, а также своевременно выпускать специалистов для потребностей работодателей. 1.3 Проблемы и подходы к решению задач На рисунке 2 продемонстрированы взаимосвязи задач и данных, которые они формируют. Каждая задача пронумерована и далее по тексту будут обозначены ссылки (n) на элементы диаграммы. Создание модели компетенций и разработка единой базы компетенций (1) на сегодняшний день остается нерешенной задачей, тем не менее существует несколько подходов к созданию и реализации этой модели. Первый подход подразумевает разработку и сопровождение базы компетенций отраслевыми экспертами. Например, профстандарты или общедоступные базы компетенций, такие как ONet и ESCO. Данный подход позволяет достичь высокой точности и эффективности, если требуется небольшой размер базы компетенций, но страдает от временных и материальных затрат. Более того, подход неэффективен, если необходимо частое обновление базы компетенций. На практике обновление выполняют каждые две недели для таких динамичных секторов рынка как ИТ [2]. Другой подход основан на автоматизации анализа данных рынка труда. 10 При этом эксперт также участвует в процессе разработки базы компетенций. Результаты данного подхода продемонстрированы как коммерческими компаниями [3, 4, 5] так и научными работами [6, 7]. Основными источниками данных выступают описания вакансий, глоссарии и открытые базы например, Википедия. Задача автоматического извлечение компетенции из текста (2) является подзадачей анализа данных рынка труда для прогнозирования востребованных компетенций и выявления востребованных специальностей. Данная задача имеет три основных проблемы: 1) компетенция может быть представлена в разных формах (например, cplusplus, C++; прогать, программировать); 2) в тексте могут быть не указаны компетенции, так называемые скрытые (implicit) компетенции, хотя они подразумеваются (Java является объектно-ориентированным языком программирования, и это подразумевает знание ООП); 3) в тексте могут быть компетенции, которых еще нет в базе компетенций из-за недавнего появления спроса на компетенцию (например, спрос на знание технологии Blockchain). Задача извлечения компетенций из текста может быть сформулирована как задача извлечения именованных сущностей (named entity recognition). В работе [8] был продемонстрирован подход к созданию контролируемого словаря на основе данных Википедии и словарей терминов из ИТ сферы. Для извлечения компетенций (и новых компетенций – к проблеме 3) использовалась комбинация различных техник: Named Entity Recognition, Part of Speech Tagging, Word2Vec. Для извлечения скрытых компетенций использовалась doc2vec модель. На тестовом размеченном корпусе из 250 текстов вакансий был получен результат 0,78 точности и 0,88 полноты. Обучение было произведено на более чем 1 миллионе текстов. Для выявления специальностей (3) и востребованных компетенций был предложен подход на основе LDA [9]. На выборке из 1385 описаний вакансий были получены 30 компетенций и 20 специальностей с наиболее востребованными компетенциями. В другой работе был предложен подход [10] к кластеризации вакансий в два этапа: 1) использовать агломеративную иерархическую кластеризацию; 2) полученные кластеры использовать как входы для KMeans, чтобы получить оптимальное количество кластеров с помощью подсчета расстояний между центроидами. На выборке из 250 тысяч описаний вакансий, были получены 20 специальностей. Для решения задачи прогнозирования востребованных компетенций (4) был предложен подход [11], основанный на анализе временных рядов. Был взят быстроразвивающийся сектор Data Science, построены кластеры компетенций и на основе 40 временных рядов выявлялись новые группы быстрорастущих компетенций. В задаче поиска подходящего сотрудника (5) в работе [8] использовался подход, основанный на извлечении компетенций из текста вакансии и резюме, где каждая компетенция была преобразована word2vec моделью. Так как количество компетенций в вакансии может быть не равно количеству компетенций, то необходимо выполнить дополнительное преобразование. В работе был реализован собственный способ подсчета 11 Affinity Score для преобразования вакансии и резюме в вектор для сравнения с помощью косинусной меры. Был продемонстрирован подход [12] к созданию плана обучения (6) с использованием инфографики в ручном режиме. В работе [13] предложен метод поддержки принятия решений при формировании образовательных программ с учетом потребностей рынка труда. Используется word2vec для оценки семантической близости различных частей документов образовательных программ, профессиональных стандартов и вакансий. Таким образом, возможно находить пробелы в компетенциях, которые указаны в вакансии, но семантически далеки от образовательной программы. Не была найдена работа которая описывает подход автоматизации рекомендации плана обучения целиком. А именно: анализа востребованных специальностей по вакансиям, формирование востребованных компетенций в каждой специальности и рекомендация учебных материалов к каждой компетенции. Рисунок 2 – Взаимосвязь задач и данных Данная работа сфокусирована на автоматизации процесса создания плана обучения с помощью анализа объявлений вакансий. Под анализом объявлений вакансий подразумевается решение задач выявления востребованных специальностей и востребованных компетенций на текущий момент времени. То есть без прогнозирования. Полученные данные используются для рекомендации индивидуального плана обучения, который включает в себя учебные материалы. Для получения востребованных компетенций и специальностей предлагается подход основанный на векторном представлении компетенций и специальностей с помощью word2vec и WVavgPool. Полученные векторные представления использовались для кластерного анализа. Был проведен опытный эксперимент для подбора лучших параметров. Был разработан и реализован подход, комбинирующий несколько техник такие как NCA и CURE. Получилось увеличить результат кластеризации на 38% 12 относительно базового решения. В результате был получен AMI равный 0.62. Также был разработан и реализован подход для генерации матрицы связанных компетенций внутри кластеров специальностей, который позволяет анализировать группы компетенций. 1.4 Практическая значимость Как было показано ранее в общей картине точная и детальная нормализация компетенций помогает преодолеть разрыв в компетенциях между работодателями и соискателями путем подбора подходящего рабочего для необходимой работы и выявления востребованных компетенций для образовательных программ. Данная работа лишь частично решает описанные выше задачи, но при этом полученные результаты могут быть использованы начинающими специалистами для определения специальности в сфере ИТ, и определения где и как обновить свои компетенции в соответствии с прогрессом технологий и меняющимися требованиями к работе. Эти же результаты могут также использоваться для определения комбинации компетенций, необходимых при наборе на новые должности в компаниях. Образовательным организациям результаты дают данные о потребностях в компетенциях и поможет обеспечивать обучение и сертификацию компетенций, необходимых на рынке труда. Аналогичным образом, это позволяет компаниям понимать дефицит в компетенциях и свои квалификационные преимущества. Предполагается, что государство может ожидать более эффективный рынок труда в сочетании со способностью более точно предоставлять образование, переподготовку и поддержку для тех, кто в этом нуждается. Результаты работы используются в проекте, целью которого является разработка открытых и бесплатных сервисов для самообучения и развития карьеры в IT. 1.5 Концептуализация предметной области Для изучения предметной области удобно концептуализировать, построив онтологию предметной области (рисунок 3). Сперва необходимо выделить ключевые понятия. Федеральный закон от 29.12.2012 N 273-ФЗ (ред. от 03.07.2016) "Об образовании в Российской Федерации" выделяет следующие понятия: индивидуальным учебный план, учебный план, образовательная программа, педагогический работник и организация, осуществляющая обучение. В разделе термины и определения эти понятия приведены. В данной предметной области под образовательной организацией будем понимать организацию, которая осуществляет образовательную деятельность с лицензией или без. В том числе к организации будем относить индивидуальных авторов, которые не являются педагогическими работниками. Под учебным планом будем понимать набор 13 учебных модулей необходимых для достижения результата обучения (эти понятия приводятся ниже). Также для простоты будем считать, что образовательная программа включает в себя только учебный план и результаты обучения. Компетенция – это способность осуществлять конкретную деятельность в определенной области на основе применения знаний и умений и проявления личностных качеств, делающих эту деятельность успешной [14]. Будем считать умение промежуточным этапом овладения новым способом действия, основанным на каком-либо правиле (знании) и соответствующим правильному использованию знания в процессе решения определенного класса задач, но еще не достигшего уровня навыка [15]. Рисунок 3 – Онтология предметной области 14 2. Исследования подходов к решению задачи В данном разделе описано исследование и реализация различных подходов к получению плана обучения, которые были проведены перед конечной версией прототипа ИС. Они были произведены последовательно. Обсуждается идея подхода исследуемый вопрос, а также их преимущества и недостатки. 2.1 Инфографика как план обучения специалиста Идея первого подхода заключалась в создании сайта агрегатора планов обучения с GitHub репозиториев для любой специальности из сферы ИТ. В большинстве своем планы обучения называют дорожные карты (Roadmap). Поэтому далее используется этот термин. Исследуемый вопрос заключался в том, чтобы понять сущность дорожных карт как относительного нового явления в профессиональных сообществах и какое влияние дорожные карты оказывают на профессиональное развитие специалистов. Также целью было понять преимущества и недостатки дорожных карт и соотнести с уже существующими понятиями как план обучения, образовательная программа. Методика заключалась в том, чтобы проанализировать мнения начинающих специалистов о пользе формата дорожной карты. Были опрошены начинающие специалисты, которые впервые видели дорожные карты так и те, кто был знаком с ними. Всего было опрошено 14 человек. Также были проанализированы комментарии к дорожным картам. Был разработан сайт для удобной демонстрации дорожных карт, как показано на рисунке 4. Сначала каждому опрошенному предлагалось порассуждать над тем является ли проблемой понять как развиваться по специальности. Далее были показаны дорожные карты подходящие к ним по специальности. После это опрошенным было предложено порассуждать над следующими темами: какие преимущества и недостатки данного формата, на какие вопросы еще бы хотелось получить ответ. В результате было получено, что предложенный формат является наглядным (будучи разновидностью инфографики) способом ответить на вопрос о необходимых компетенциях. Этот факт является важным преимуществом поскольку опрошенными было отмечено, часто бывает сложно разобраться в связях между различными компетенциями и увидеть цельную картину. В тоже время такие иллюстрации не дают исчерпывающий ответ на вопросы о плане обучения, потому что по понятным причинам не рассчитаны на индивидуального пользователя и его особенности. Хотя в целом иллюстрация задает верное направление для обучения. Также было отмечено, что некоторые работы были сверх субъективными и востребованность компетенции к специальности зависит от множества критериев, которые дорожная карта не учитывает. Дополнительно было отмечено, что зачастую не хватает ссылок на учебные материалы для создания своего плана обучения. 15 Как было показано [16] формат дорожных карт является перспективным направлением для передачи ценной информации от опытных специалистов к начинающим специалистам, которые не могут по многим причинам определить для себя что, где и в какой последовательности изучать. В общем случае формат дорожных карт – это ценный справочник, который специалист использует на разных этапах карьеры. На каждом этапе карьеры начинающий специалист задается разными вопросами. Цель дорожных карт – дать ответы на эти вопросы в соответствие с действительностью. Таким образом, дорожные карта больше чем план обучения, при этом может и вовсе не включать его. Однако сейчас дорожные карты показывают не столько набор учебных модулей, сколько визуальное отображение необходимых компетенций для работы по специальности исходя из личного опыта автора. Иногда дорожные карты имеют не только иллюстрации, но также пояснения в текстовую формате. Рисунок 4 – Пример доступного плана обучения Главный вывод, который был получен: главное преимущество формата дорожных карт – это наглядность и визуальная информативность, очевидные недостатки – это субъективная точка зрения автора (или авторов) на требования работодателей и отсутствие адаптивности к истинным потребностям пользователя. Также особенностью технологии разработки дорожных карт является тот факт, что они создаются вручную. Поэтому решение, которое автоматизирует процесс создания дорожных должно соответствовать требованиям к наглядности и информативности. Тема автоматической генерации инфографики выходит за пределы темы ВКР и кроме того автор не обладает компетенцией в данной сфере, поэтому требование к наглядности и информативности в прототипе будет проигнорировано. Перечисленные выше недостатки являются ключевыми точками роста формата дорожных карт. Первый недостаток, который заключается в субъективной точке зрения, 16 исходит из предположения о том, что статистика о востребованных компетенциях автора отличается от действительной. Решение, которое предложено в этой работе, основывается на допущении о том, что описания вакансии на досках объявлений точнее описывают действительность. Второй недостаток проявляется в том, что в текущей реализации иллюстрации дают в целом очень общую информацию для некоторого среднего пользователя. Например, для кого-то факт, что Python является ЯП для серверной разработки – не новость. Соответственно факт того, что нужно изучать Python, чтобы стать Python разработчиком не является информацией. Следовательно некоторым пользователям необходимо более глубокое понимание, что нужно знать исходя из их потребностей. Поэтому дорожные карты должны быть рассчитаны на специалистов разного уровня или же на специалистов, которые находятся на разных этапах своей карьеры. Например, начинающему специалисту в области Data Science вовсе не нужно сразу показывать, что он должен знать про обратное распространение ошибки в нейронных сетях или про GIL в Python. Вместо этого, на взгляд автора, лучше обозначить основные направления развития компетенций специалиста в общем виде исходя из его потребностей. То есть начинать с более общих понятий. Например, пункт “машинное обучение”, а в нем “нейронные сети”, затем пункт про популярные языки программирования для анализа данных, а в нем Python и R. Если пользователю эта информация известна, то давать более специфичные понятия, что в целом логично. После того как специалист будет иметь больше “глубоких” компетенций и определенный кругозор в области Data Science, дорожная карта могла бы становится более детализированной и показывать понятия, которые являются более специфичными и востребованными на более поздних этапах развития специалиста. В своей работе такой эффект я называю “обобщением над компетенциями”, когда разные названия компетенций обозначают одну и ту же компетенцию, но на разных уровнях абстракции. Например, компетенция решать линейные уравнения подразумевает компетенцию в математике. Однако уметь в математику вовсе не подразумевает уметь решать линейные уравнения. Так как в некотором смысле одно есть подмножество другого. В этом смысле и начинающий специалист в DS с повышением квалификации будет получать более детализированное представление о том, что нужно изучать дальше. Ведь главная компетенция специалиста в Data Science есть компетенция Data Science и на протяжении всей карьеры он улучшает именно эту компетенцию. Однако в какой-то момент это могут быть базовые знания математической статистики, а через год продвинутые знания статистики, но так или иначе статистики в целом. Отсюда появилась следующая идея: сделать модульную дорожную карту, основанную на некоторой базе знаний о компетенциях, которые можно выборочно использовать для описания необходимых компетенций специалиста. В самом простом случае такой БЗ стала бы словарь компетенций. Такую БЗ можно было бы поддерживать в ручном режиме. Так как каждая компетенция стала бы отделена от остальных, то их можно использовать для того, чтобы описать результат обучения некоторого учебного 17 материала. В перспективе такой подход устраняет недостаток отсутствия адаптивности дорожных карт и дает возможность генерировать индивидуальный план обучения для специалиста, используя словарь компетенций и набор учебных материалов, с которыми каждая компетенция связана. Однако такой подход полностью игнорировал первый недостаток о субъективности авторов. 2.2 Тезаурус компетенций Идея подхода заключалась в разработке тезауруса компетенций для специальности Frontend разработчик. Под тезаурусом подразумевается множество терминов между которыми определены семантические отношения. В данном случае четкие (строгие) иерархические отношения. Все понятия брались из заранее заготовленного словаря полученного из нескольких источников: Glossarytech, Computer Hope [17] и открытого тезауруса современной web-разработки [18]. Результат продемонстрирован на рисунке 5. Исследуемый вопрос заключался в том, чтобы попробовать создать небольшую БЗ компетенций в формате тезауруса и таким образом экспериментально оценить на сколько возможно организовать большую и поддерживаемую открытую базу знаний компетенций из ИТ. Это помогло бы запустить проект по созданию открытой базы знаний по технологии, которую использует Википедия [19]. БЗ предполагалось использовать для разработки дорожных карт разработчиков экспертами сообщества. Второй исследуемый вопрос заключался в том, чтобы понять как эффект обобщения над компетенциями влияет на информативность дорожной карты. Методика заключалась в следующем: были собраны словари терминов из ИТ и термины относящиеся к Frontend разработчику. Был привлечен эксперт в данной специальности. Термины были использованы, чтобы создать тезаурус такой, что все компетенции организованы в строгой иерархии (то есть имели одного предка). Было замерено время создания тезауруса и субъективно посчитана когнитивная нагрузка [20] на редактирование БЗ. Далее планировалось собрать группу начинающих специалистов с разным уровнем подготовки и показывать им различные срезы тезауруса в зависимости от уровня квалификации в этой специальности. Участники должны были отмечать полезность визуализации по шкале. В результате был разработан сайт с визуализацией дерева компетенций для современного Frontend разработчика, который показывал, что нужно изучать. Понятия можно фильтровать по категориям и изучать, чтобы понять свои пробелы и точки роста. Всего было отображено около 3000 понятий. На самом деле их может быть больше. Разработка БЗ была остановлена так как по субъективным ощущениям вручную обрабатывать такие объемы информации неподготовленным специалистам станет невозможно. Учитывая, что специальностей в ИТ около 20-30, то весь тезаурус компетенций мог занимать более 100 000 понятий. Эксперимент в итоге не был проведен, 18 так как не были найдены начинающие специалисты в нужном количестве, чтобы получить статистически значимый результат. На создание тезауруса было потрачено чуть более 42 человеко-часов. Рисунок 5 – Визуализация части тезауруса компетенций Главный вывод, который был получен: чем больше уровень обобщения над компетенциями, тем легче поддерживать БЗ вручную, при этом тем меньше информации можно предоставить пользователю в дорожной карте. Дополнительный вывод: не всегда возможно организовать отношения между компетенциями в строгой иерархии, так как эта структура очень негибкая, а компетенции по своей природе очень многогранны (как и большинство понятий) и динамичны. Компетенции многогранны в том смысле, что их одновременно можно объединить в множество категорий с другими компетенциями. Например, Python это интерпретируемый ЯП и одновременно типизированный. Однако можно понятие можно поместить только в одну категорию. Компетенции динамичны в том смысле, что их востребованность и актуальность подвержена частым изменениям и при разработке структуры тезауруса это нужно учитывать. Так возникает следствие эффекта обобщения над компетенциями. Чем меньше обобщения над компетенциями, тем сложнее поддерживать отношения между ними, что само собой очевидно. И тем больше информации можно извлечь, имея небольшое обобщение. Отсюда появилось сразу две идеи: первая – генерировать БЗ анализируя тексты и фактически решать задачу Ontology learning, которая была обсуждена в первом разделе. Для реализации первой идеи не было найдено доступного в рамках ВКР решения, так как автор не обладает достаточной экспертизой в этой сфере. Вторая идея заключается в том, чтобы оставить в БЗ только высокоуровневые компетенции, такие как Python, программирование и т.д., но при этом описывать их более подробно с помощью естественного языка – то есть писать внутри некоторого модуля, что нужно знать, чтобы знать Python и разделить все такие низкоуровневые компетенции на уровни 19 квалификации, например, начальный и продвинутый. Это снизит размер тезауруса при этом низкоуровневые компетенции не потеряются, так как они будут сокрыты и прикреплены к конкретной высокоуровневой компетенции. Таким образом, получится индивидуально составлять модульные планы обучения и при этом пополнять в ручном режиме БЗ. Однако подход опять же игнорирует недостаток субъективности авторов. 2.3 Модульный план обучения Реализация третьего подход является частью финального прототипа и не подразумевалась как эксперимент, хотя в общем случае провалилась. Идея заключалась в создании web-приложения и БЗ высокоуровневых компетенций, которые могут быть использованы как модули плана обучения для начинающих специалистов. Строгая иерархия сохранилась, но была сильно упрощена. Эмпирически были подобраны три категории верхнего уровня, которые компетенции: области знаний (knowledge areas), инструменты (tools) и гибкие навыки (soft skills). Причем первые две подразумевают hard skills, но намеренно разделены. Далее категории могут быть детализированы. Под областью знания подразумеваются компетенции использующие фундаментальные знания из computer science, которые позволяют развиваться в любой специальности и решать большинство задач. Области знаний почти не меняются потому что цикл разработки программных продуктов стандартизирован, но меняются подходы к изучению, а следовательно материалы для обучения необходимо обновлять. Компетенции инструментов – это те инструментальные средства и технологии, которые применяются для решения задач на сегодняшний день, то есть те что актуальны. Инструменты меняются часто. У каждой компетенции есть описание в котором рассказывается как темы необходимо изучать. Также описание включает в себя учебные материалы. Для работы с БЗ был разработан специальный CLI (command line interface), а визуализация элементов БЗ была изменена. Впоследствии часть этого подхода была использована для финального прототипа, поэтому более подробно его части будут описаны в следующих разделах. Во время работы над прототипом стало понятно, что не только компетенции имеют эффект обобщения, но и специальности. Кроме того стало понятно, что требования к компетенциям зависят от контекста, в котором они применяются. Это значит, что Python для Backend разработчика не одного и тоже что Python для Data Scientist-а. Ровно как и знание и математики для них. Она нужна им двоим, но разных пропорциях, которые, очевидно, можно узнать только если взглянуть на то, что скрывается под понятием математики как компетенции. Поэтому высокоуровневые компетенции не имеет большого смысла использовать, чтобы создавать модульные планы обучения, потому что само содержимое компетенции (текст внутри) должно изменяться в зависимости от разных специальностей и их обобщения. Таким образом, в БЗ должно быть несколько модулей для разных контекстов, что противоречит самой идеи модульности. 20 Вернемся к эффекту обобщения – если я хочу знать компетенции некоторого среднего разработчика, то кроме того что специалист по разработке ПО умеет писать, тестировать и документировать программный код сказать больше и нечего, потому что этот факт справедлив для всех разработчиков. Так или иначе все разработчики это делают и это правда. Но вот не все разработчики пишут на Python. Скорее это Python разработчики. Однако Python есть ЯП и факт того, что все разработчики пишут с использованием того или иного ЯП равновероятен факту, что Python разработчики пишут на Python. Поэтому специальности также подвержены эффекту обобщения, причем в том же направлении, что и компетенции. Чем больше обобщение специальности – тем меньше информации можно вложить в план обучения из-за того что компетенции автоматически обобщаются. Отсюда следует важная мысль – создание модульного индивидуального плана обучения в ручном режиме возможно лишь на некотором уровне обобщения. Создавать БЗ с большим количество обобщений трудно (подход 2), хотя это бы во многом решило проблему, а создавать БЗ высокоуровневых компетенций не имеет смысла, потому что такие компетенции не могут быть использованы в разных контекстах и не всегда могут быть использованы на разных уровнях обобщения, что исключает возможность создавать по-настоящему индивидуальные планы обучения. Поэтому, если не устраивает всего один уровень общности, необходимо автоматически или полуавтоматически генерировать, обновлять и поддерживать БЗ компетенций. Развитием идеи стало создание решения основанного на БЗ, сформированной из понятий наиболее часто встречающихся в текстах вакансий. В простом случае БЗ это просто словарь. Этот подход совершенно не решает проблему адаптивности плана обучения, однако эксперименты в данном направлении помогают найти решение, которое будет нивелировать субъективность авторов при создании плана обучения. Как предположение – названия востребованных специальностей можно получить анализируя заголовки вакансий. Таким образом, получив некоторое количество часто встречающихся словоупотреблений вроде Frontend и Developer, можно очень приблизительно получить наиболее востребованные специальности. Зная специальность каждой вакансии, можно посчитать наиболее популярные компетенции внутри группы. Что в целом тривиальная задача. Предлагалось создавать план обучения на основе полученных востребованных компетенций для каждой специальности. Самый простой способ учитывать контекст специальности – описать тройкой учебные материалы: специальность, компетенция, учебный материал. 2.4 Анализ вакансий для получения плана обучения Идея последнего подхода заключалась в том, чтобы некоторому набору специальностей сопоставить набор наиболее востребованных компетенций с помощью анализа текстов вакансий. Далее эти данные можно использовать для того, чтобы 21 автоматически сгенерировать план обучения для каждой специальности или делать это вручную. В первом разделе уже было упоминание о скрытых (implicit) компетенциях, которые подразумеваются в тексте вакансии, но не написаны явно. Было показано, что обнаружение скрытых компетенций значительно повышает качество сопоставления вакансии и резюме в задаче поиска лучшего сотрудника. Поэтому появилось предположение о том, что извлечение скрытых компетенций поможет лучше понять требования к специальностям – сделать более релевантными планы обучения. Скрытые компетенции бывают двух типов: 1) наличие одной компетенции подразумевает наличие другой из-за зависимости в обучении, например, нельзя решать линейное уравнение, если не уметь умножать; 2) наличие одной компетенции подразумевает наличие другой из-за того, что они часто вместе используются, например, HTML и JavaScript. Первый тип скрытых компетенций можно определить, если установить зависимости между компетенциями явно, что в общем случае сводится к созданию БЗ в ручную. Второй тип можно определить основываясь на математической статистике, например, на теореме Байеса. Будем считать, что вероятности встретить компетенции в тексте условно не зависят друг от друга. Однако, важно учитывать, что вероятность встретить некоторые две компетенции зависит от специальности. Например, встретить HTML и JavaScript в специальности Frontend выше, чем в Backend. Чтобы это учесть был использован следующий подход: обучить наивный байесовский классификатор и получить конечный набор наиболее вероятных компетенций для этого класса, а каждую вакансию, которую получится правильно соотнести с заранее известной специальностью, дополнить теми компетенциями, которые относятся к этому классу, но не указаны в вакансии. Для задачи классификации текстов (документов) каждый документ должен быть представлен вектором, где элемент вектора – это признак. Самым простым способом представить документ – использовать модель Binary BoW. Сначала каждой компетенции из конечного словаря V будет сопоставлен свой уникальный номер i и числовой вектор, в котором i -ая компонента вектора равна 1, а остальные компоненты равны 0. Тогда векторное представление документа D есть сумма векторов тех слов, которые присутствуют в словаре V и в документе D . Модель называется бинарной потому что не учитывает частоту появления слов, а только его присутствие в документе. Были собраны описания вакансий с ресурса Хабр.Карьера на русском языке. Всего было получено 23 899 текстов за последние 7 лет. Каждый документ был уже размечен: было доступно название специальности и набор ключевых компетенций из готового списка компетенций, который предоставляет Хабр.Карьера. На рисунке 6 показано распределение текстов по специальности в логарифмической шкале. Были оставлены в датасете следующие специальности: Фронтенд, Бекенд, Приложения, Разработка ПО, Администрирование, Тестирование, Дизайн, Аналитика, Менеджмент и Маркетинг. На рисунке 7 представлено распределение по уровню квалификации. Для более 13 тысяч 22 текстов уровень квалификации не указан. Были убраны начинающие разработчики так как они могут смещать распределение по компетенциям и ведущих специалистов так как их распределение компетенций тяготеет больше к soft skills. Рисунок 6 – Распределение текстов с Хабр.Карьера по специальности Рисунок 7 – Распределение текстов с Хабр.Карьера по уровню квалификации Во-первых, классы несбалансированы и это нужно учитывать при обучении классификатора. Во-вторых, классы выглядят пересекающимися и плохо разделимыми, например: Приложения, Разработка ПО, Фронтенд и Бекенд. Хабр.Карьера предоставляет описание каждой специальности. В целом между похожими подразумевается различие. Далее описания приводятся как есть: - бэкенд. Или веб-программисты. Это те, которые создают сервисы в интернете и работают с кодом на стороне сервера; - фронтэнд. Или верстальщики, или js-программисты. Это те, которые создают сервисы в интернете и работают с кодом на стороне клиента; 23 - приложения. Это разработчики мобильных приложений; - разработка ПО. Это программисты и инженеры, работающие с кодом, который не связан напрямую с интернетом, создающие различное программное обеспечение и игры. В качестве модели классификации был использован наивный байесовский классификатор для данных с бинарными признаками [21]. Python библиотека Sklearn предоставляет готовую реализацию алгоритма. Все компетенции, которые встретились менее 25 раз были исключены. Порог был подобран простым перебором для максимизации качества классификатора. Выборка была разбита на тренировочный и тестовый датасеты. Тестовый датасет составил 30%. В результате был получен F-score равный 70%. В приложении 1 показаны 10 компетенций, которые с наибольшей вероятностью можно встретить в каждой специальности. Стало очевидно, что просто брать конечный список наиболее вероятных компетенций и дополнять ими набор компетенций вакансий – не лучшая идея. Если посмотреть на компетенции к Разработке ПО в таблице 8, то видно что в этой строке перечислены сразу 6 языков программирования. Маловероятно, что очень много специалистов пишут ПО, используя одновременно несколько ЯП. Скорее это исключение из правил и данная специальность – это обобщение над множеством гипер-специальностей. Таким образом, более логичным подходом будет искать вероятность встретить некоторую компетенцию не зависимости от специальности, а от тех компетенций, которые есть в этой вакансии. Причем не по всему набору, а по каким-то его подмножествам, например, получим следующий набор: HTML, CSS, React.js и Linux. Очевидно, чтобы получить пропущенный JavaScript необходимо взять близкие друг к другу первые три, так как последний будет сильно снижать вероятность появления JS. Для этого опять же нужно понимать либо, что первые три компетенции каким-либо образом близки в контексте этой вакансии, а текущая модель допускает, что все компетенции семантически равноудалены между собой. Это значит, что React.js и Vue.js различны между собой. И на столько же различны между Scrum и Java. Что в действительности не так. Следовательно для того, чтобы категоризировать компетенции необходимо определить некоторые признаки, по которым их можно идентифицировать как близкие в некотором смысле. Тогда будет возможно комбинировать статистический подход и использовать характеристику близости между компетенциями. Большая польза такого подхода становится очевидной, когда модель представления компетенций учитывает обобщения между ними. Например, React, Vue и Angular являются фреймворками, js-фреймворками и js-фреймворками для разработки интерфейсов. Если статистически было получено, что те кто знают JS, HTML, CSS скорее всего знают не просто React, потому что он может быть самым популярным среди них, а некоторый js-фреймворк для разработки интерфейсов и с большей вероятностью это будет React. Такой подход имитирует рассуждения не на уровне компетенций как отдельных 24 независимых единиц, а как связанных элементов на основе семантических отношений и тогда статистика распространяется на связные элементы. На рисунке 8 продемонстрировано распределение настоящих классов (столбцы) и предсказанных классов (строки). Например, классификатор относит 322 текстов по специальности Разработка ПО к специальности Бэкенд. Рисунок 8 – Матрица ошибок для классификатора Как можно заметить классификатор путает те самые специальности, о которых была речь: Фронтенд, Бекенд, Разработка ПО и Приложения. Эта проблема связана с тем, что специальности имеют сложные отношения между друг другом. Сложные в том смысле, что отношения не могут быть описаны строгой иерархией. Например, есть Backend разработчики и Frontend разработчики, а есть Fullstack. Но нельзя сказать, что Fullstack это надмножество Frontend-а или Backend-а. Скорее это специалисты, которые умеют немного во Frontend и немного в Backend и/или во что-нибудь еще. Та же логика распространяется на другие специальности. Поэтому появилось предположение о том, что есть несколько базовых специальностей общих для всего рынка труда, а каждая отдельная специальность на сегменте рынка труда – это некоторая комбинация некоторых компетенций из базовых специальностей. В том же смысле отдельная вакансия – это комбинация некоторых базовых специальностей. Такое предположение происходит из того факта, что специальности в ИТ не стандартизированы и каждый работодатель подразумевает под ними что-то свое. Поэтому Python-разработчик в одной компании есть не то же самое, что Python-разработчик в другой компании. Причем разница может зависеть от многих характеристик компании, например: размер, отрасль и географическое положение. Больший эффект происходит в том случае когда название специальности очень общее как, например, программист или аналитик. Из названия совсем не очевидно, чем они занимаются. Это предполагает, что анализировать востребованность компетенций по заголовкам дает очень общую информацию, что-то вроде популярности компетенции внутри специальности, однако это всего лишь верхушка айсберга. 25 Как ранее было показано, даже названия гипер специальности не могут дать полное представление о сути специальности. Например, Vue Frontend Developer – довольно информативное название для специальности. Во-первых, все что верно для разработчика верно и для этой специальности. Во-вторых, под фронтендом мы понимаем уже больше о том какие обязанности у разработчика. В-третьих, зная что Vue – это web-фреймворк на JavaScript, становится ясно что еще должен знать фронтенд разработчик и в целом большая часть того чем он занимается. Происходит в некотором смысле сжатие информации. Однако под теми же самыми понятиями работодатель может понимать совсем другое и добавить компетенции дизайнера, хотя это отдельная специальность. А другой работодатель может назвать такого специалиста просто Software Engineer и иметь ввиду то же самое. Поэтому анализируя компетенции по заголовкам специальностей, может быть получен эффект чего-то среднего между другими специальностями. Так и получился Fullstack. Таким образом, вместо анализа компетенций по заголовкам вакансий более логичным способом создания планов обучения является поиск групп компетенций, которые предназначены для решения некоторых задач – например, создания API сервиса или проектирования БД. Под компетенцией здесь также подразумевается название понятия, которое встречается часто в текстах вакансий. Такие группы могут формировать семантические и статистические связи с другими группами, а компетенции могут свободно находиться в нескольких группах как бы обозначая контекст, в котором компетенции могут быть необходимы сегодня. Тогда встретив в вакансии что-то похожее на группу компетенций, будет проявляться сама суть работы, которую должен выполнить специалист и соответственно требования к ней. Например, поняв что эта группа компетенций необходима для проектирования БД, станет понятно какие группы еще могут быть связаны с ней и какие компетенции еще подразумеваются (скрытые). С другой стороны это выглядит так, что сама группа компетенций есть более высокоуровневая компетенция. Так или иначе это само проявление того свойства, что компетенции динамичны. В перспективе анализировать тексты вакансии используя выше описанный подход в различных срезах рынка труда позволит получить гораздо больше информации для создания планов обучения. Заключительная идея этой работы состоит в том, чтобы использовать одновременно статистический и семантический подход к анализу востребованных компетенций. Автор не имеет достаточной квалификации, чтобы воссоздать математическую модель концепции и тем более, чтобы ее реализовать сразу. В качестве первого приближения предлагается следующий способ: использовать word2vec, чтобы получить векторные представления компетенций из контролируемого словаря, затем использовать их для получения векторов текстов и применить кластерный анализ для получения базовых специальностей, далее анализировать компетенции в полученных кластерах. Из полученных базовых специальностей будут получены планы обучения, которые будут доступны в доработанном web-приложении. 26 3. Моделирование прототипа ИС В разделе моделирование прототипа обобщаются выводы полученные в исследовательской части. Сначала показана математическая модель плана обучения и накладываемые ограничения. После описываются проектные решения и краткое описание модели ИС в целом. Далее обсуждаются выбранные подходы к реализации с теоретической части и гипотезы, которые необходимо проверить на этапе реализации. В заключение приводится описание модели web-приложения на языке UML. 3.1 Математическая модель плана обучения Для того чтобы рекомендовать индивидуальный план обучения, необходимо перенести сначала это понятие на математическую модель. Под моделью понимается описание на некотором формальном языке некоторых аспектов системы, важных с точки зрения цели моделирования. В данном случае модель описана с помощью математического аппарата. В интересах специалиста E (Employee) находится стремление к “получении” определенной востребованной специальности из множества P (Profession). Так как зачастую специалист имеет один набор компетенций S current (здесь обозначим компетенцию как Skill) из всех возможных компетенций множества S , а для получения специальности необходим иной набор компетенций S goal , то возникает, так называемый, разрыв в компетенций S gap = S goal − S current . Поэтому специалист может создать образовательную программу, которая будет учитывать пробелы в необходимых компетенциях. Фактически разрыв является результатом обучения по образовательной программе. Для достижения поставленного результата, специалисту необходимо пройти некоторое количество учебных модулей из множества E M (Educational module), которые составляют его учебный план E P (Educational plan). Цель учебных модулей – сформировать необходимые для специалиста компетенции при помощи учебных материалов из множества ER (Educational resource), которые разрабатываются сотрудниками образовательных организаций из множества E O (Educational organization). В данной модели под названием компетенции подразумевается идентификатор компетенции и ничего более. Смысл заложенный в это понятие должен быть интерпретирован для человека иным образом, чем для ЭВМ. Поэтому это возможно, что для каждой компетенции в зависимости от ее употребления (специальности) будет необходимо пояснение. Также модель не учитывает эффект обобщения над компетенциями (как и специальности), отсюда следует, что словарь компетенций не должен иметь таких примеров: Языки программирования и Python. Хотя вполне может иметь элемент Основы 27 программирования. В любом случае, названия понятий не важны, как уже было сказано. Таким образом задача рекомендации индивидуального плана обучения сводится к следующим задачам: 1) создать набор компетенций S = {s1 , s2 , s3 , ... sn } , n – мощность множества S . Например, S = {s1 = J avaScript, s2 = H T M L, s3 = CSS, s4 = P ython, s5 = F lask} ; 2) создать набор востребованных специальностей P = {p1 , p2 , p3 , ... pm } , такой что pi ⊂ S , что означает – для овладения специальностью pi необходимо иметь компетенции из S . Например, P = {p1 = {s1 , s2 , s3 }, p2 = {s4 , s5 }, p3 = {s2 , s3 }} ; 3) создать набор учебных материалов E R = {er1 , er2 , er3 , ... erk } , такой что eri ⊂ S , что означает – учебный материал eri формирует набор компетенций из S . Например, E R = {er1 = {s1 }, er2 = {s2 , s3 }, er3 = {s3 }, er4 = {s4 }, er5 = {s5 }} ; 4) создать алгоритм создания плана обучения E P для специалиста E : f : (S goal , S current ) → EP (1) где E P = {em1 , em, em3 , ... eml } , где emi ⊂ E M . Пусть специалист E имеет S current = {s2 } , что эквивалентно выражению: специалист E имеет компетенцию в HTML. Пусть p1 будет называться Frontend Developer. Специалист E хочет быть p1 , что эквивалентно выражению: специалист E должен компетенции в JavaScript, HTML, CSS, чтобы считать себя Frontend Developer. Дополнительно обозначим S goal = p1 = {s1 , s2 , s3 } . Тогда E P = f (S goal , S current ) . Где E P = {em1 , em2 } есть план обучения для специалиста E , а em1 = {er1 } , em2 = {er3 } . Что эквивалентно выражению: план обучения специалиста E составляет два учебных модуля, результат заключается в освоении JavaScript, CSS. 3.2 Проектные решения Под проектными решениями будем понимать промежуточное или конечное описание объекта моделирования, необходимое и достаточное для рассмотрения и определения дальнейшего направления или окончания моделирования. Объектом моделирования выступает информационная система. Под ИС понимается комплекс информационных ресурсов и технологий, предназначенный для сбора, хранения и обработки данных в рамках некоторой предметной области. Здесь под информационными ресурсами понимаются программные ресурсы. Так ИС состоит из нескольких компонент о которых уже говорилось в разделе посвященной обзору литературы. В данном разделе описаны подходы к решению ключевых задач проекта. Для получения пользователем 28 индивидуального плана обучения необходимо реализовать несколько программных компонент: - компонента сбора данных о рынке труда, - компонента извлечения компетенций из текста, - компонента выявления востребованных специальностей, - компонента выявления востребованных компетенций, - компонента рекомендации индивидуального плана развития. Более подробно реализация каждой из компонент рассмотрена в четвертом разделе дипломной работы. Проектные решения основываются на проведенных экспериментах, которые подробно описаны в исследовательской части. Как было показано разработка компоненты автоматической генерации и обновления БЗ компетенций оказывается неподъемной задачей. В свою очередь создание БЗ в ручном режиме имеет свои ограничения по объему и времени. Поэтому было принято решение использовать существующие глоссарии ИТ терминов для создания БЗ компетенций в полуавтоматическом режиме в виде словаря, который не поддерживает никаких семантических отношений. Таким образом, будет получена статическая БЗ компетенций. В данной работе моделируется лишь небольшая часть рынка труда сферы ИТ, однако для решения задачи требуется корпус текстов, содержащий разнообразные описания вакансий разных специальностей, учебных материалов и терминов. Так как получение качественных векторных представлений зависит от объема корпуса и разнообразия словоупотреблений. Поэтому в работе были использованы тексты на английском языке. Для извлечения компетенций из текста было решено использовать стороннее API. Используемый API решает задачу NER с контролируемым словарем, который был получен на предыдущем шаге. Получилось добиться упрощения так как сервис API одновременно со своей главной функцией предоставляет весь словарь с которым работает. Далее словарь обрабатывается в соответствии с требованиями, которые были получены исходя из математической модели плана обучения. Для получения востребованных компетенций и специальностей предлагается подход основанный на векторном представлении компетенций и специальностей. Полученные векторные представления использовались для кластерного анализа. Используемая теория о векторном представлении и кластерном анализе описана в следующих разделах. Для системы рекомендации индивидуального плана обучения было разработано клиент-серверное web-приложение. Пользователь получает доступ к рекомендательной системе плана обучения через интерфейс веб-приложения. 29 3.3 Векторное представление слов Как было показано в разделе 2 использование подхода BoW не придает свойство семантической близости отдельным словам. Развитием стал подход, который учитывает влияние длины текста на значимость компонент вектора, для этого используется нормализация количества вхождений слов на размер текста. Для этого считается отношение количества вхождений слова (или же n-граммы) к общему количеству слов в документе (term frequency или TF) [22]. TF-IDF используется для получения важности слова для отдельного документа. Подход использует предположение о том, что значимость слова прямо пропорциональна частоте ее появления в документе и обратно пропорциональна доле документов в корпусе, в которых это слово встречается. Таким образом, наибольший вес получает слово, которое часто встречается в одном документе, но не встречается в остальных. Было экспериментально показано [23], что метод BM25 демонстрирует лучшие результаты в кластеризации текстов, чем TF-IDF. В нем ограничивается значимость частоты слова, а также она не только нормализуется по его размеру, но и ограничивается сверху, что позволяет избежать присваивания слову слишком большого веса. Тем не менее минус подхода, основанного на BoW, в том, что размерность BoW матрицы растет вместе с ростом словаря. Например, хранение словаря из 100 тысяч слов в one-hot encoding матрице может занять ~9 гигабайт. Во-вторых, неизвестно значение слов, и, как следствие, расстояние между векторами не всегда отражает разницу в значении. Модель Word2Vec решает эти проблемы. Word2vec – это нейросетевой подход эффективного создания вложений, предложенный Т. Миколовым в 2013 году [24]. Подход основан на дистрибутивной гипотезе: лингвистические единицы, встречающиеся в схожих контекстах, имеют близкие значения [25]. Таким образом, ключевая идея подхода заключается в предсказании вероятности слова по его контексту. Семантическая близость между лингвистическими единицами вычисляется как расстояние между векторами. Для сравнения часто используется косинусная мера. Word2vec – это не один алгоритм, а группа схожих техник: модель CBoW (Continuous bag of words) и модель Skip-gram. Обе модели представляют нейронные сети с один скрытым слоем. При этом сама по себе нейронная сеть после обучения не используется. Вместо этого берутся настроенные веса скрытого слоя, которые и являются векторным представлением слов. Скрытый слой используется для сжатия исходной размерности (длина словаря) и получения векторных представлений слов в этой размерности. Принцип работы CBoW заключается в том, чтобы предсказать слово в зависимости от контекста, то есть окружающих слов. В свою очередь модель Skip-gram пытается по слову предсказать окружающие слова. 30 Важным понятием является размер окна (window size). Окно используется для генерации набора данных, который затем используется для обучения модели. На рисунке 9 показано как скользящее окно обрабатывает фразу “The quick brown fox jumps over the lazy dog”. В данном случае размер окна равен 5: два слова перед и после слова, которое необходимо предсказать (отмечено синим цветом). Рисунок 9. Генерация набора данных [26] Рассмотрим архитектуру модели Skip-gram (рисунок 10). На вход нейронной сети подается OHE текущего слова (например, quick). Размер словарного запаса равен V. Размерность скрытого слоя равна N, следовательно размерность векторного представления будет равна также N. Рисунок 10 – Архитектура модели Skip-gram [26] Как уже говорилось, модель учится предсказывать одно контекстное слово (output), используя одно целевое слово (input) за раз. Результатом умножения входного вектора x на Embedding matrix слева является вектор h . Заметим, что Embedding matrix является 31 матрицей размерностью V × N , где на самом деле i-ая строка есть векторное представление i-ого слова из словаря. На выходном слое в качестве функции активации используется функция softmax, которая преобразует вектор y размерности V в вектор той же размерности, где каждая координата полученного вектора представлена вещественным числом в интервале [0, 1] и сумма координат равна 1. Таким образом координаты полученного вектора показывают вероятность появления слова y i в контексте слова xi . Архитектура модели CBoW (рисунок 11) отличается тем, что в качестве входного вектора должен использоваться контекст слова, который зависит от размера окна. Поэтому в результате перемножения матрицы весов W и входных векторов, а затем сложения получается нечто усредненное от входных векторов. Рисунок 11. Архитектура модели CBoW [26] Функция softmax становится вычислительно затратной при увеличении словаря. Поэтому был предложен подход оптимизации скорости обучения, который заключается в том, чтобы посчитать softmax более эффективно с помощью бинарного дерева [27]. При использовании softmax требуется O(V ) операций. В предложенном подходе требуется O(log(V )) . Основная причина, по которой был выбран word2vec – предположение о том, полученные вектора компетенций, будут схожи, потому что в действительности они имеют общее применение. Поэтому вектора можно эффективно использовать для векторизации документа. Для получения векторного представления документа Xing и др. [28] был предложен подход WVAvgPool. Было показано, что подход может работать лучше, чем LDA в задаче классификации [29]. Идея в том, чтобы получить вектора документов средневзвешенным векторов всех слов в этом документе. В данной работе для 32 векторизации используются не все слова в документе, а только ограниченный набор терминов, относящихся к компетенциям. Очевидно, что в таком случае результат кластеризации в общем случае зависит от качества векторных вложений компетенций. Word2vec имеет несколько параметров, на которые нужно обратить внимание. Во-первых, предполагается, что маленькое окно (<5) способствует более синтаксически близким словам, тогда как большое окно более семантическим. Поэтому есть гипотеза, что увеличение окна способствует более качественным вложениям в поставленной задаче, а следовательно увеличивает качество кластеризации. Во-вторых, была показана важность определения размера вектора для обучения вложений. Эксперименты показали [30], что качество вложения слов плохое, пока не будет достигнута нижняя граница. После этого качество стабилизируется. Не было найдено экспериментальных доказательств, что размер значимо влияет на качество. В качестве рекомендаций известно, что размер должен быть кратен 2 (увеличение скорости обучения), а значимые отличия в качество можно заметить, изменив размер на порядок, например: 10, 100, 1000. Однако при 1000 скорость обучения заметно уменьшается. Поэтому была поставлены гипотеза, что увеличение размера вектора вложения от 16 до 128 по степени двойки не приводит к увеличению качества. Если это не так, то значит нижняя граница не была достигнута. В-третьих, предполагается, что использование фильтра низкочастотных слов способно повлиять на качество вложений. Предположительно, каждое понятие по разному влияет на определение правильное кластера специальности, это значит, что некоторые понятия вносят значимый вклад, а другие нет. Есть предположение, что малоупотребляемые понятия искажают смысл, потому что word2vec не может выразить их отношение с другими понятиями. Как определить важные и неважные понятия отдельный вопрос. Тем не менее, возможно, если убрать редкие слова, то получится повысить качество вложений и кластеризации одновременно. Необходимо найти порог при котором, ключевая метрика кластеризации достигает максимума. О метриках кластеризации будет написано в следующем разделе. 3.4 Кластерный анализ Кластеризация (кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться похожие (по некоторой метрике) объекты, а объекты разных групп должны быть как можно более отличны. Применение кластерного анализа в общем виде сводится к следующим этапам: 1) отбор объектов для кластеризации. В данной работе объектами являются описания вакансий. На предыдущем этапе уже были получены векторы вакансий; 2) определение множества признаков, по которым будут оцениваться объекты в выборке. Каждая вакансия представлена в виде нормализованного вектора 33 характеристик. В процессе нормализации все значения приводятся к некоторому диапазону, например, [-1, -1]; 3) вычисление близости между объектами. Для этого необходимо выбрать оптимальную меру близости, так как результаты кластеризации могут существенно отличаться в зависимости от разных мер; 4) применение метода кластерного анализа для создания групп сходных объектов. Для этого необходимо выбрать оптимальный метод, так как единого универсального решения нет; 5) в некоторых алгоритмах необходимо выбрать оптимальное число кластеров, что сильно зависит от набора данных и решаемой задачи. Подсчет оптимальности не всегда тривиален; 6) получение результатов кластеризации и оценка качества. Также необходимо выбрать подходящую метрику оценки качества кластеризации. Пусть есть два объекта x и x′ , а функцией подсчета близости является p . Есть множество способов вычислить расстояние между объектами. Чтобы не усложнять модель, были использованы наиболее простые и интуитивно понятные способы: 1) Расстояние городских кварталов (манхэттенское расстояние) в большинстве случаев приводит к таким же результатам, как и для обычного расстояния Евклида: n p(x, x′) = ∑ |xi − x′i | (2) i 2) Квадрат евклидова расстояния применяется для придания большего веса более отдаленным друг от друга объектам: n 2 p(x, x′) = ∑ (xi − x′i ) (3) i 3) Степенное расстояние применяется, чтобы скорректировать вес, относящийся к размерности, для которой соответствующие объекты сильно отличаются: √ n ∑ (xi − x′i )p r p(x, x′) = (4) i Так как методов кластеризации много, необходимо сузить круг поиска. Из проведенных экспериментов известно, что специальности часто имеют пересечения друг с другом. Логично использовать иерархические алгоритмы с нечетким разбиением по кластерам. Тогда получится анализировать специальности на разных уровнях общности и 34 учитывать вклад объекта в кластер. Однако здесь есть риск неверно интерпретировать результаты анализа, потому что еще неизвестно, что подход основанный на семантической близости помогает лучше понимать разбиения на специальности. Вполне возможно, что такой подход вообще не может улавливать тот смысл, который необходим, чтобы отделить Data Scientist-а от Frontend Developer-а. Для этого нужно правильно оценить качество модели, а чтобы не заблудиться в выводах следует начать с простых моделей. Оценка качества кластеризации является более сложной по сравнению с оценкой качества классификации. Во-первых, такие оценки не должны зависеть от самих значений меток, а только от самого разбиения выборки. Во-вторых, не всегда известны истинные метки объектов, поэтому также нужны оценки, позволяющие оценить качество кластеризации, используя только неразмеченную выборку. Выделяют внешние и внутренние метрики качества. Внешние используют информацию об истинном разбиении на кластеры, в то время как внутренние метрики не используют никакой внешней информации и оценивают качество кластеризации, основываясь только на наборе данных. Оптимальное число кластеров обычно определяют с использованием внутренних метрик. В экспериментальном сравнении 30 внутренних мер [31] было показано, что меры Silhouette, Davies–Bouldin, Calinski–Harabasz, обобщенные индексы Dunn, индекс COP и SDbw показывают лучшие результаты, чем остальные меры, при этом превосходство меры Silhouette статистически значимо. Силуэт (Silhouette), будучи внутренней метрикой качества, позволяет оценить качество кластеризации, используя только результат кластеризации. Силуэт показывает, насколько среднее расстояние до объектов своего кластера отличается от среднего расстояния до объектов других кластеров. Данная величина лежит в диапазоне [-1, 1]. Таким образом, чем больше силуэт, тем более четко выделены кластеры. Также с помощью силуэта можно выбирать оптимальное число кластеров. Следовательно это помогает понять, насколько плотно возможно разбить исходные специальности на непересекающиеся кластеры. Если кластеры сильно накладываются друг на друга – это значит, что полученные векторные представления дают слишком общую информацию о специальностях. Это говорит о том, что если пытаться найти группы похожих компетенций, то будет получена та же самая общая информация. Например, Python + Sklearn и Python + Django в контексте их применения не одно и тоже, но может ли это быть отражено в их вектором представлении word2vec, учитывая, что это обе Python библиотеки, не ясно. Поэтому сначала необходимо научиться категоризировать специальности. Стоит взять во внимание, что идеальных кластеров в любом случае не получить, так как многие тексты вакансий есть что-то очень среднее от базовых специальностей. Чтобы проверить правильно ли получается относить похожие вакансии в один кластер, используются внешние метрики. Действительно, даже если силуэт больше некоторого достаточного порога (например, 0.5), какая разница если все специальности 35 перемешаны? Поэтому нужна также метрика, которая позволит понять, что некоторое достаточное количество описаний вакансий были отнесены к таким же очень похожим текстам. Опять же не все потому что, во-первых, описание профессии программиста тяжело отнести к какому-либо кластеру, во-вторых, описание вакансии может быть фактически о двух специальностях, а метка об одной. Как, например, Backend разработчик, который еще с обязанностями DevOps-а. Чтобы получить информацию о истинной специальности, можно либо разметить в ручную некоторое количество текстов из заранее готового списка специальностей, либо использовать предоставленные специальности в заголовках вакансий. Первый способ может быть более полезным и более затратным, но в любом случае противоречит самому смыслу кластерного анализа. В этой работе в основном используется Adjusted Mutual Information (AMI), которая определяется через функцию энтропии и показывает насколько одно разбиение на кластеры уменьшает энтропию другого, мера она не зависит от перестановок и не требует одинаковых меток для обеих разбиений, также она является более предпочтительной мерой по сравнению с ARI [32]. Чтобы не усложнять базовую модель в качестве метода кластеризации были выбраны подходы на основе четкого разделения на кластеры, которые используют простые меры дистанции (например, Евклида), а именно: CURE [33], KMedoids, KMedians и KMeans++ [34]. Далее можно будет использовать модификации KMeans-подобных методов для нечеткого разделения и моделирования общности, например строить иерархии специальностей. У базовой версии KMeans есть несколько недостатков. Во-первых, он не устойчив к выбросам, таким как гипер специализированные вакансии, где указаны, например, понятия из какой-то одной сферы. Поскольку KMeans минимизирует квадрат расстояния Евклида, то очень смещенные относительно действительного центра кластера векторы вакансий будут смещать центроиды и ухудшать результаты. В свою очередь KMedians минимизирует Манхэттенское расстояние (или абсолютное отклонение), но не средних а медианные значения. Таким образом, KMedians должны быть более устойчивы к выбросам и следовательно приводить к более компактным кластерам. Как гипотеза, силуэт KMedians больше, чем KMeans при равных условиях. Во-вторых, KMeans имеет ограничение на использование в качестве метрики только расстояние Евклида, в то время как KMedoids не ограничен этим, поэтому возможно использовать любое другое расстояние – например, Пирсона или использование подходов к обучению метрики [35]. Также вместо среднего используется объект расстояние которого до остальных минимально. С одной стороны это дает устойчивость к выбросам, с другой вычислительная сложность KMedoids сильно выше чем у KMeans. Как гипотеза, использование иной метрики близости повысит AMI. В-третьих, KMeans не способен формировать кластеры имеющие несферические формы и различия в размерах в отличие от CURE. Таким образом, гипотеза в том, что CURE позволит повысить одновременно силуэт и AMI относительно KMeans. Далее все обозначенные гипотезы в этом разделе будут проверены в эксперименте, чтобы выбрать лучшие параметры модели. 36 3.5 Модель компоненты рекомендации плана обучения Данный раздел содержит описание части прототипа ИС на языке UML [36]. На рисунке 12 продемонстрирована диаграмма прецедентов. Эта часть всей ИС называется компонентой рекомендации плана обучения. Она предназначена для двух типов пользователей: 1) пользователи чьей целью является получения плана обучения, которые в настоящий момент доступны в ИС – пользователи приложения; 2) пользователи чьей целью является редактирование базы знаний – пользователи базы знаний. База знаний поддерживает редактирование своих двух основных элементов: планов обучения и понятий. Под понятиями подразумеваются компетенции, однако в этой части моделирования ИС автор абстрагируется от компетенций. Для сущностей допустимы операции CRUD в рамках ИС. Рисунок 12 – Диаграмма прецедентов Пользователю приложения на выбор доступен набор специальностей, для каждой из которых в БЗ есть соответствующий план обучения. Согласно математической модели плана обучения, он является набором учебных модулей в которые включены учебные материалы. В этом прототипе индивидуальность плана обучения достигается тем, что пользователь может формировать свой план обучения основываясь на собственных предпочтениях и на том, что он уже знает и умеет. Поэтому пользователь может отметить пройденные понятия и оставить только те, которые считает нужными. Более наглядно процесс показан на диаграмме активностей на рисунке 13. В результате план обучения 37 можно сохранить в файл, чтобы не повторять этот процесс снова, когда нужно будет вернуться. В этом прототипе не поддерживается БД пользователей и хранение их данных, таким образом, приложение предоставляет только контент из БЗ и интерфейс взаимодействия с ним. Рисунок 13 – Диаграмма активности Пользователю БЗ доступны операции над двумя основными сущностями: план обучения и понятие. Как продемонстрировано на рисунке 14, план обучения состоит из учебных модулей, а модули содержат список понятий. Каждое понятие в свою очередь это набор учебных материалов, которые помогают освоить данное понятие (навык или компетенция). Важно, чтобы понятия (как и специальности) имели уникальные имена в пределах БЗ, чтобы не вводить в заблуждение пользователя приложения. Учебные материалы здесь – это ссылки на онлайн-курсы. Рисунок 14 – Диаграмма предметной области 38 Таким образом, компонента рекомендации плана обучения помогает пользователю получить релевантный план обучения исходя из своей специальности, потребностей. За полезное содержимое плана обучения отвечает БЗ, которая может быть пополнена при необходимости. Функция отображения (1), рассмотренная в разделе математической модели плана обучения есть разность множеств, поэтому пользователю достаточно сформировать набор изученных понятий из множества, которое было предложено как необходимые компетенции. В результате план обучения может быть сформирован из результата отображения предложенных компетенций и выбранных компетенций. 39 4. Реализация прототипа ИС В данном разделе описаны этапы реализации финальной версии прототипа ИС. Сначала описана методика сбора данных и формирования словаря компетенций, далее обсуждается разметка и обработка данных. После описан метод получения параметров для модели и полученные результаты. В конце описаны основные идеи разработанного web-приложения и демонстрируются результаты прототипа ИС. 4.1 Компонента обновления базы компетенций Было принято решение использовать существующие глоссарии ИТ терминов для создания базы компетенций в полуавтоматическом режиме. Полуавтоматический режим подразумевает, что все термины были собраны с веб-ресурсов в автоматическом режиме с помощью программы. Дальнейшая работа по обработке терминов и создании конечного словаря велась вручную. В качестве источников для создания словаря было доступно два варианта веб-ресурсов: 1) Glossarytech предоставляет наиболее встречающиеся термины в сфере ИТ, которые используются работодателями и соискателями. Всего около 2000 терминов. 2) EMSI Skills предоставляет термины преимущественно из сферы ИТ, но ими не ограничивается. Всего около 30000 терминов. Кроме выше названных ресурсов есть также и другие источники терминов и компетенций из ИТ. Они были выбраны потому что предоставляли API для извлечения терминов из текста. Это было необходимо для того чтобы разметить тексты – фактически извлечь необходимые компетенций из описаний вакансий. Поскольку работали эти компании очевидно только со своим словарем, то и выбор остановился на них. Glossarytech предоставляет больше терминов относящихся непосредственно к ИТ, чем EMSI Skills. В тоже время последний предоставляет API решение лучше для извлечения терминов из текста. Однозначный плюс Glossarytech в том, что к каждому термину есть небольшое описание, которое раскрывает смысл термина и устанавливает связь с другими терминами. В EMSI Skills лишь у некоторых терминов есть ссылки на статьи Википедии. В конечном итоге был выбран Glossarytech. 4.2 Компонента сбора данных о рынке труда Будем считать, что вся совокупность размещенных вакансий на всех досках объявлений есть репрезентация требований, которые работодатели в действительности предъявляют соискателям. В общем случае, как уже говорилось, это допущении о том что описания вакансий, используемые для решения задач и получения значимых результатов, 40 достаточно полно описывают состояние рынка труда. Тем не менее в этой работе используется такой подход, чтобы получить требования к специальностям. Всего было выбрано три необходимых типа текстов: 1) тексты описывающие термины (компетенции); 2) тексты описания вакансий; 3) тексты описания онлайн-курсов. Тексты преследуют одновременно несколько целей. Во-первых, все типы используются для обучения векторных вложений с помощью word2vec. Во-вторых, описания терминов используются в БЗ компетенций прототипа ИС, описания вакансий для выявления востребованных компетенций и специальностей, а описания курсов для описания учебных материалов в прототипе ИС. Важным критерием корпуса текстов является разнообразие описаний вакансий разных специальностей, учебных материалов и терминов. Так как качество векторных представлений зависит от объема корпуса и разнообразия словоупотреблений. Поэтому в работе были использованы тексты на английском языке и описания вакансий для следующих стран: США, Великобритания и Германия. Тексты вакансий были получены с ресурсов StackOverflow и Builtin. Было рассмотрено множество площадок по размещению вакансий. Большим преимуществом SO и Builtin является тот факт, что все вакансии относятся непосредственно к сфере ИТ. Преимущественно для разработчиков. Альтернативные варианты размещают вакансии из любой сферы или имеют небольшое количество размещенных объявлений. Тексты вакансий собирались с 01.03.2020 по 01.05.2020 – то есть два полных месяца. В апреле уменьшилось количество вакансий и они стали обновляться значительно реже чем в марте. Некоторое количество вакансии было вручную отфильтрованы из-за отсутствия явно выраженных требований к специалисту, были удалены дублирующие тексты, в итоге количество вакансий оказалось немного больше 2000 среди всех стран, преимущественно из США. Для реализации автоматического сбора текстов был использован Python фреймворк Scrapy. Scrapy имеет готовые реализации часто используемых функций для парсинга веб-страниц, которые помогают решении таких задач как выполнение POST запросов, поддержка сессий, аутентификации, экспорт в форматы JSON, CSV, XML и другое. В результате программа каждый день производила сбор текстов с ресурса. Тексты описания онлайн-курсов были получены с ресурса ClassCentral, который является агрегатором курсов с множества площадок таких как Coursera, Edx, Udemy и других. Ресурс имеет раздел посвященный дисциплинам из Computer Science и Software Engineering областей. Каждый курс имеет описание и программу обучения в которой перечислены основные понятия. Всего было получено более 1000 курсов на английском языке. Для сбора текстов использовался Web Scraper – расширение для браузера, которое используется для извлечение данных с веб-страницы. В отличие от Scrapy расширение позволяет не программировать алгоритм обхода страницы, а использовать пользовательский интерфейс, одна имеет существенный минус – нельзя запускать периодические задачи и автоматически извлекать собранные данные. Web Scraper был
Enter the password to open this PDF file:
-
-
-
-
-
-
-
-
-
-
-
-