Я создал рекомендации по работе для людей с нетехническим образованием. Эта статья посвящена функциям приложения и шагам, которые я предпринял для его создания.

Вот ссылка на приложение.

Я был вдохновлен на создание рекомендателя вакансий из-за недавних увольнений в моей старой компании. Многие из моих бывших коллег, которых уволили, проработали меньше трех лет, и они задавались вопросом, исходя из своего опыта, на какие должности они подходят и с чего им следует начать поиск работы. Я вспомнил похожую борьбу, когда закончил колледж, где я тоже не знал, на чем сосредоточить свои поиски. Я считаю, что эта проблема довольно часто встречается у людей с нетехническим образованием.

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

Приложение сочетает в себе методы НЛП, такие как тематическое моделирование, с машинным обучением в стиле классификации, чтобы определить, что вам больше всего подходит. Вы копируете и вставляете свое резюме / LinkedIn в текстовое поле, а приложение анализирует текст и представляет вам анализ на основе машинного обучения, какие вакансии вам подходят и почему.

Приложение имеет 3 функции:

Функция 1. Возвращает процентное соответствие по типу работы.

Функция 2: предоставьте диаграмму, в которой ваше резюме соответствует другим должностям на основе совпадения тем. Мы надеемся, что эта диаграмма дает какое-то объяснение ваших результатов по функции 1.

Функция 3. Выберите раскрывающийся список с различными архетипами вакансий и посмотрите, какие ключевые слова в вашем резюме совпадают, а какие нет.

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

Шаг 1: определение объема проекта

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

Ключевым вопросом для моей оценки было выяснить, какие типы вакансий следует анализировать. В нетехническом бизнес-пространстве существует так много разных рабочих мест. Я чувствовал, что, если я включу слишком много заявлений о приеме на работу, проект не принесет желаемого эффекта. Моделирование может быть менее точным, а приложение в конечном итоге может оказаться слишком загроможденным и несфокусированным, чтобы быть полезным для конечного пользователя. Таким образом, я вспомнил свои первоначальные намерения и остановился на двух критериях работы для анализа:

  1. Рабочие места должны быть бизнес-ролями, не требующими технических навыков. Это исключает такие роли, как инженеры-программисты, медицина или актерское мастерство.
  2. Должность должна быть в пределах 40–120 тыс. Окладов. Это отражает диапазон, в котором люди с 0–3-летним опытом обычно зарабатывают.

После этого я подумал о некоторых общих архетипах работы, которые имели смысл, но также разослал опрос, чтобы узнать, что другие думают о моих идеях. Затем я попросил моих коллег ранжировать типы вакансий, которые им интересны, чтобы я мог ограничить количество типов должностей, которые мне приходилось анализировать. В идеале я хотел проанализировать менее 10 типов вакансий.

Имея эту информацию, я выбрал 5 самых популярных вакансий в качестве основы для своего анализа, но позже добавил еще больше, когда был уверен, что моя модель может правильно различать типы вакансий. В итоге я выбрал 8 различных типов вакансий в нетехнической сфере бизнеса, а также добавил «Data Scientist» из личного интереса.

Шаг 2. Сбор данных

Данные, которые я планировал использовать, - это объявления о вакансиях по соответствующим типам вакансий, которые соответствуют критериям, изложенным выше. Сначала я посмотрел на LinkedIn и Indeed, но их сайты оказалось слишком сложно очистить из-за динамической загрузки.

Я остановился на копировании объявлений о вакансиях в Glassdoor, который также использовал динамическую загрузку. Но на этот раз я позаимствовал код у коллеги по анализу данных и изменил его в соответствии со своими потребностями. Я весьма благодарен за этот код, потому что создание моего собственного парсера заняло бы у меня гораздо больше времени!

Изменив скребок под свои нужды, я скопировал 40 сообщений для каждого типа работы и присоединил файлы. Многие из отобранных вакансий явно не вписывались в правильный архетип работы - например, я получил много рабочих мест в строительстве, когда избавлялся от должности «менеджера проекта». Я также получил много должностей с титулами «Старший [Тип работы] аналитик» или «Директор [Тип работы]», которые были явно недоступны для людей с 0–3-летним опытом. Поэтому я установил текстовые фильтры, чтобы отсеять эти типы заданий, и дважды проверил, чтобы убедиться, что остальные данные соответствуют тому, что я искал. В конечном итоге я получил текстовые описания 149 списков вакансий из 9 различных типов вакансий в качестве своего набора данных.

Шаг 3. Очистка данных и тематическое моделирование

Следующим шагом была очистка текстовых описаний. Я использовал стандартные методы очистки, такие как удаление знаков препинания и заглавных букв, затем токенизировал и вырезал слова для семантической стандартизации. Наконец, я помещаю данные в формат массива с помощью векторизатора.

Как только данные были в анализируемом формате, я выполнил тематическое моделирование, попробовав несколько методов, но в конечном итоге остановился на TruncatedSVD. Фактором оптимизации было то, насколько точно я мог предсказать типы должностей с помощью модели классификации, которую я построил на шаге 4. Всего я придумал 20 различных тем.

Шаг 4: построение алгоритма классификации

После моделирования темы я использовал матрицу темы-документа и ввел ее в алгоритм классификации. Оптимизируя точность, я остановился на классификаторе случайного леса. Модель вернула ~ 90% точности на проверочных наборах, демонстрируя высокую компетентность в прогнозировании правильных типов должностей для каждого описания должностей.

Далее пришло время придать модели функциональное назначение. Я использовал вышеприведенную тематическую модель, чтобы изменить свое резюме, а затем использовал описанную выше модель классификации, чтобы предсказать, для каких вакансий это резюме лучше всего подходит. Затем я извлек процент совпадений по типу должностей, дав более детальное представление о наиболее подходящей вакансии - например, 60% менеджер проекта, 40% менеджер по продукту - и предоставил конечному пользователю несколько вариантов карьерного роста для исследования.

Шаг 5: Создайте функцию построения диаграммы PCA

Когда я показывал людям результаты соответствующих процентных соотношений вакансий, они спрашивали, почему они вписываются в эти группы. Мне было довольно сложно объяснять основные механизмы моделей нетехнической публике, и поэтому я решил показать им упрощенную диаграмму, чтобы объяснить эти результаты сопоставления вакансий.

Во-первых, я сократил матрицу тематических документов до двух измерений с помощью PCA. Затем я нарисовал каждый тип работы в соответствии с уменьшенными размерами. Я также применил уменьшение размерности к одному резюме и смог отобразить, где одно резюме удерживалось в сравнении с другими должностями на диаграмме. При интерпретации новых функций PCA я увидел, что они в значительной степени ориентированы на 2 типа тем: ключевые слова, связанные с маркетингом, и ключевые слова, связанные с управлением проектами.

Шаг 6. Создайте функцию соответствия ключевых слов

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

В этой функции пользователь выбирает, какая вакансия ему интересна, из раскрывающегося списка, и приложение возвращает, какие ключевые слова совпадают и отсутствуют в их резюме. Люди могут видеть как текущее положение их резюме, так и то, какие слова и опыт они могли бы использовать для более целевого приложения.

Эту функцию, вероятно, было проще всего реализовать. Я использовал ту же модель темы, что и выше, чтобы придумать наиболее значимые слова в каждом типе работы - скажем, топ-20 - и использовал составление списка, чтобы увидеть, какие слова совпадают или пропущены.

Шаг 6: напишите и разверните приложение

Теперь, когда я создал функции и модели, мне нужно было развернуть приложение в Интернете, чтобы люди могли его использовать.

Для написания приложений я использовал Streamlit. Это один из самых простых и эффективных пакетов. Затем я использовал Heroku и git, чтобы загрузить его в Интернет, хотя, оглядываясь назад, было бы намного проще использовать недавно выпущенные функции развертывания приложений Streamlit.

И вот оно! Рекомендатель работы. Я очень гордился этим проектом и надеюсь, что люди сочтут его полезным. Если вы думаете, что приложение может кому-то помочь, отправьте его им! Если у вас есть критические замечания, не стесняйтесь комментировать ниже или писать мне. Спасибо за прочтение.