Используйте парсинг и NLP для извлечения информации из объявлений о вакансиях

Несколько дней назад технический рекрутер в моей сети LinkedIn разместил запрос на рекомендации учебных ресурсов для потенциальных специалистов по анализу данных. Она хотела убедиться, что кандидаты приобретают необходимые навыки для современного рынка. Среди полученных ею ответов многие были анекдотическими («Я сделал это… Я узнал об этом»), предлагая обычный набор платформ для онлайн-обучения, в то время как другие содержали общие рекомендации, такие как «собеседование по практике программирования» или «попробуйте соревнование Kaggle». .

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

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

Структура проекта

Проект разделен на три основные части:

  • Сбор данных: источник информации идентифицируется, соответствующие веб-страницы с объявлениями о вакансиях очищаются, а их содержимое сохраняется и сохраняется;
  • Манипулирование данными: текст, содержащийся в описании должности, очищается с помощью стемминга и векторизуется;
  • Анализ данных и вывод: выявляются наиболее часто повторяющиеся слова, соответствующие ключевым навыкам, и исследуется их корреляция с объявленной заработной платой.

Вы можете найти код проекта здесь.

Получение данных

Первым шагом в этом процессе является определение источника информации, выбор правильных инструментов и их получение. В качестве источника я выбрал reed.co.uk, поскольку в нем легко ориентироваться, много деталей и он довольно популярен в моем регионе.

Используя Beautiful Soup, я создал простой скрипт, очищающий объявления о вакансиях на заданном количестве страниц результатов при поиске вакансий Data Scientist в Лондоне и в пределах 20 миль. Скрипт сохраняет результаты поиска, затем обращается к страницам, соответствующим каждому объявлению о вакансии, и сохраняет описание должности, зарплату, тип контракта и информацию о местонахождении в формате JSON. Каждое задание идентифицируется ссылочным номером, и если некоторые вакансии появляются в поиске несколько раз (например, если их повысили), они сохраняются только один раз.

Манипуляция данными

Нет недостатка в инструментах для обработки и анализа текста, так как НЛП - одно из самых модных приложений машинного обучения на данный момент (посмотрите здесь и здесь, чтобы получить интересную информацию по этой теме). Моя личная рекомендация для обучения - взглянуть на онлайн-материалы fastAI, охватывающие библиотеку fastAI и многое другое.

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

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

Второй шаг - векторизовать мой текст с помощью функции векторизатора TF-IDF в scikit learn, которая возвращает словарь, содержащий все слова в анализируемом тексте, и для каждого описания объявления о вакансии вектор, содержащий значение term-frequency раз обратная частота документа (отсюда TF-IDF) для каждого слова с корнем, значение, которое выделяет значимые слова в пользу часто повторяющихся слов, таких как the, a, is и т. д.

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

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

Наиболее актуальные ключевые навыки

Слова, наиболее часто встречающиеся во всем корпусе описаний должностей, можно определить, суммируя матрицу по ее столбцам, получая совокупное значение для каждого слова. Я отфильтровал результаты, чтобы удалить некоторые вездесущие слова, такие как «данные» и «работа». Во время анализа я могу примерно по порядку и сгруппировать по родству:

  • Опыт и Старший (намного больше, чем Младший);
  • Товар, Маркет;
  • Моделирование, Статистика;
  • Python, SQL;
  • НЛП, Машинное обучение, Глубокое обучение;
  • AWS;
  • Исследования, Статистика, Аналитика.

К моему удивлению, компьютерное зрение, FinTech и социальные сети присутствовали несколько меньше. С технической точки зрения, NLP и SQL - это навыки, которые стоит приобрести наряду со знакомством с AWS.

Если вы младший или выходите на рынок (как я), то вам, вероятно, не понравится видеть опыт в верхней части списка, но это соответствует рыночным трендам.

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

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

Соотношение с заработной платой

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

Страницы объявлений о вакансиях содержат информацию о предлагаемом диапазоне заработной платы в четко определенном поле, которое легко читать. Однако цифры заработной платы часто заменяются словами «Конкурентоспособная заработная плата», «Заработная плата, подлежащая обсуждению» или аналогичными выражениями. В случае интереса, к сожалению, отсутствуют 69% значений. Еще одна сложность заключается в том, что в отчетах указывается годовая заработная плата для сотрудников, работающих полный рабочий день, и за день для подрядчиков, а различия в режимах налогообложения затрудняют сравнение.

Мы можем проверить, коррелирует ли зарплата с каким-либо ключевым словом, создав единую таблицу с цифрой заработной платы для каждой должности и подмножеством матрицы TF-IDF, соответствующей ключевым навыкам, и использовать метод Pandas corr () чтобы получить соответствующую корреляционную матрицу.

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

Наиболее очевидны корреляции между Python и SQL, которые, вероятно, часто встречаются вместе в виде описания должности, в котором подробно описаны ее требования, и глубокого (обучения ) с НЛП и зрением, являясь НЛП и компьютерным зрением - двумя из самых модных приложений нейронных сетей. Другие видимые корреляции наблюдаются между machin (электронное обучение) и statist (ics), а также product и market.

А как насчет зарплаты? он слабо коррелирует с financ (e), который может кое-что сказать о наиболее прибыльном секторе, но этого недостаточно.

Примечание. сгруппированные карты также очень полезны для визуального интуитивного понимания того, как выбранные ключевые слова распределяются в корпусе описания должности, как они могут быть сгруппированы на основе этого и как описания должностей могут группироваться между собой. Вы могли видеть, например, что ключевые слова опыт и python почти равномерно распределены по корпусу, тогда как другие, такие как NLP и vision, более сконцентрированы (подробности см. на моей карте).

Выводы

В этой статье я продемонстрировал свой подход к интеллектуальному поиску работы, используя базовые методы веб-скрейпинга и НЛП для сбора информации о рынке труда. По результатам:

  • Я бы подумал о том, чтобы потратить время на улучшение своих навыков в NLP и SQL.
  • Я бы уделил особое внимание тому, чтобы пополнить свое портфолио реальными проектами и, таким образом, расширить свой очевидный опыт в этой области.
  • Я также работал бы над своими аналитическими и исследовательскими навыками, создавая собственные проблемы, которые нужно решать, и получая от них ценные идеи.

Дальнейшая работа

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

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

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

Обо мне

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

GitHub: https://github.com/RaffaToSpace

LinkedIn: https://www.linkedin.com/in/raffaele-nolli-581a4351/