Один человек. 1000 резюме. Какой читать в первую очередь?

В 2014 году у Google было 7000 вакансий на их сайте вакансий, и в рамках этих вакансий компания также получила 3 ​​миллиона резюме в том же году.

Теперь нужно просмотреть множество резюме, чтобы только нанять менее 1% соискателей! Нет сомнений в том, что наем трудозатратен, и чем больше становится пул кандидатов, тем сложнее отсеивать, чтобы найти наиболее квалифицированного кандидата на эту должность. По мере того, как компания расширяется и растет, она может стать неэффективной и дорогостоящей, поскольку команда по подбору персонала также растет с той же скоростью, что и компания. Как нам оптимизировать этот трудоемкий процесс просмотра этих бесчисленных резюме?

Цель

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

Для этого мы будем использовать методы обработки естественного языка (NLP) для обработки резюме и списков вакансий и сортировки резюме по косинусному сходству в порядке убывания, чтобы создать этот совершенный инструмент для проверки резюме!

Обработка естественного языка - это отрасль искусственного интеллекта, которая позволяет компьютерам читать, понимать и извлекать значение из человеческих языков.

Подход

1. Сбор данных и простой EDA

Набор данных был найден на Kaggle, в котором содержится 8 653 записей об опыте соискателей и 80 000 списков вакансий. Обратите внимание, что эти опыты соискателя не предназначены специально ни для одного из списков вакансий.

Резюме

Чтобы составить резюме на основе этих данных, я объединил весь опыт работы по идентификатору кандидата. Резюме с неполным названием должности / опытом были удалены, чтобы обеспечить достаточное количество текста для моделирования позже. Например, для applicant_id 10001 описание его должности отображается как Nan для первых трех строк, поэтому эти наблюдения будут удалены и не будут учитываться в наборе данных.

employer и salary не помогут нашей системе рекомендаций, поэтому мы их тоже удалим.

Описание работы

Для простоты описания должности я оставил только job_title и job_description во фрейме данных для списков вакансий. Как вы можете видеть в списке столбцов выше, есть много информации о местонахождении работы (city, State.Name, State.Code, Address, Latitude, Longitude), которую мы не будем использовать, чтобы рекомендовать возобновление. Остальные столбцы либо не добавляют много значений к нашему варианту использования, либо в них много пропущенных значений.

2. Предварительная обработка текста

Предварительная обработка текста - это практика очистки и подготовки текстовых данных. Затем при использовании SpaCy и NLTK резюме и описание вакансии предварительно обрабатываются следующим образом:

  • остановить удаление слов
  • тегирование части речи
  • лемматизация
  • только альфа-символы

Поскольку после предварительной обработки резюме с короткой длиной стали еще короче, то есть менее 20 слов. Я решил удалить резюме, состоящее менее чем из 23 слов, чтобы в наборе данных оставалось не менее 1000 резюме, гарантируя, что текста достаточно для обучения модели.

3. Векторизатор

Почему выбирают термин "частота-обратная частота документа" (TF-IDF) вместо "векторизатора счетчика" (также известного как "частота термина")?

Count Vectorizer позволяет преобладать популярным словам. Некоторые слова могут упоминаться несколько раз в резюме и во всех резюме, что делает эти слова «популярными». Более длинные резюме также имеют больше шансов содержать эти «популярные» слова более одного раза. Count Vectorizer заключает, что резюме, в которых упоминаются эти «популярные» слова, больше похожи друг на друга, поскольку в нем больше внимания уделяется этим популярным словам, даже если они на самом деле могут не иметь значения в нашем контексте.

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

После того, как весь текст был очищен, TF-IDF поместили в резюме, чтобы сравнить сходства между резюме. Мы настроили токенизацию на фразы из 2 и 3 слов (двух- и трехграммы), и каждая фраза должна появиться как минимум в 12 документах, чтобы позже появиться в качестве темы.

4. Тематическое моделирование (уменьшение размеров)

Я пробовал 3 различных метода моделирования тем: скрытое распределение Дирихле (LDA), скрытый семантический анализ (LSA) и неотрицательная матричная факторизация (NMF).

Вначале я использовал LDA и pyLDAvis, чтобы измерить соответствующее количество тем, взятых из резюме, количество граммов / терминов для включения в TF-IDF и минимальное количество документов, содержащих граммы / термины. Затем для каждой техники моделирования тем я создал UMAP и изучил термины в каждой теме. Кажется, что у LDA лучшая разделимость по темам.

Ниже представлена ​​диаграмма, созданная с помощью PyLDAvis, которая представляет глобальный взгляд на наше тематическое моделирование.

Как интерпретировать диаграмму, созданную с помощью pyLDAvis ?

На левой панели находится карта межтемных расстояний, содержащая 8 кружков, что указывает на 8 тем из наших наборов данных резюме. Каждая тема состоит из наиболее релевантных / важных терминов, которые показаны на правой панели диаграммы. На правой панели показаны 10 самых релевантных терминов по каждой теме. Что касается темы 2, некоторые из наиболее актуальных терминов - это «торговый партнер», «обслуживание клиентов», «ответы на вопросы» и «кассовый аппарат», что потенциально похоже на роль продаж в розничной торговле. Наконец, синяя полоса указывает общую частоту использования термина, а красная полоса указывает приблизительную частоту использования термина в этой теме.

Что вы должны стремиться к диаграмме PyLDAvis?

Короче говоря, вы хотите, чтобы ваша диаграмма PyLDAvis выглядела так же, как у нас здесь.

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

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

5. Система рекомендаций, основанная на косинусном сходстве.

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

Косинусное подобие - это косинус угла между двумя векторами, который определяет, указывают ли два вектора примерно в одном направлении. В нашем случае, отображаются ли термины (наши ранее определенные би- и триграммы из TFIDF) как в резюме, так и в описании должности.

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

Какой показатель сходства следует использовать?

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

Подумайте о скалярном произведении между a и b, как если бы мы проецировали a на b (или наоборот), а затем взяв произведение прогнозируемой длины a (| a |) на длину b (| b |).

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

Точечное произведение учитывает величину, следовательно, скалярное произведение увеличивается с увеличением длины векторов. Для нормализации скалярного произведения его затем делят на нормализованные векторы. Результатом является косинусное подобие, которое инвариантно к масштабированию и ограничивает значение между -1 и 1. Значение косинуса 0 означает, что два вектора расположены под углом 90 градусов друг к другу (ортогональны) и не имеют совпадений. Чем ближе значение косинуса к 1, тем меньше угол и больше совпадение между векторами.

Как вы можете видеть в приведенной выше формуле, cos ⁡θ на самом деле представляет собой скалярное произведение двух векторов, деленное на произведение длин (или величин) двух векторов. В общем, cos ⁡θ указывает на подобие с точки зрения направления векторов. Это все еще остается в силе по мере увеличения числа измерений (также известных как векторы), следовательно, cos ⁡θ является полезной мерой в многомерном пространстве.

Пример

Вот список вакансий, который я нашел: «Сотрудник по розничным продажам» в Staples в Сан-Франциско.

Будущая работа

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

  • Получите данные компании с описанием должности, резюме кандидатов и дополнительную внутреннюю информацию, например, на каком уровне должности эта должность? Это роль менеджера по персоналу?
  • Моделируйте текстовые данные по одной категории должностей или роли за раз. Поскольку этот проект был основан на наборе данных резюме, который включает в себя широкий спектр должностных функций и всего 1000 наблюдений, темы в основном представляли собой более высокоуровневую разбивку должностных функций. При моделировании только для одной должности мы могли бы сузить темы, чтобы они были более конкретными для роли, что могло бы привести к лучшему механизму рекомендаций.
  • Работайте с рекрутерами над применением методов контролируемого обучения, используя отсортированные резюме как показатель того, что это резюме является хорошей рекомендацией.
  • Сотрудничайте с разработчиками, чтобы применить цикл обратной связи с пользователями, чтобы постоянно улучшать механизм рекомендаций.