January 10, 2019

Как внедрить машинное обучение и повысить количество откликов на вакансии на 5 миллионов: кейс HeadHunter

Перед сервисами по подбору персонала стоят две основные задачи: помочь соискателям находить актуальные предложения, а компаниям — сотрудников. Однако кандидатов и вакансий настолько много, что вручную обработать все запросы невозможно – нужна автоматизация. Борис Вольфсон, директор по развитию HeadHunter, рассказывает, как компания внедряла машинное обучение и к чему это привело.

Зачем нам машинное обучение

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

В нашей базе более 600 тысяч вакансий и 37 миллионов резюме. Пользователи hh.ru совершают более 100 миллионов действий в сутки: как они ищут, что просматривают, где откликаются, а что оставляют без внимания? Нам стало ясно, что вручную мы не сможем оперативно отслеживать все модели пользовательского поведения и дорабатывать поиск в соответствии с ними.Наблюдая за пользователями, мы поняли, что при поиске многие даже не указывают название профессии. Более того, они не включают фильтры и не пользуются специальным «языком запросов».

63% соискателей просто нажимают кнопку «Найти» без ввода текста, еще 19% отправляют запросы, состоящие из одного слова. И только 14% используют дополнительный функционал поиска с фильтрами. Из-за этого кандидаты просто не видят многие подходящие им предложения.

Фото: Unsplash

Работодатели ищут резюме чуть лучше, но незначительно: 35% пишут в строке поиска только одно слово, нередко общее название специальности (например, «менеджер»), 20% рекрутеров отправляют запросы из двух слов, а 23% и вовсе ничего не пишут. Фильтры тоже оказались не очень популярны: например, резюме по профессиональной области отбирают лишь 25% работодателей.

Единственный выход из этой ситуации – научить систему «догадываться», что ищут соискатели и работодатели.

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

Первый шаг на пути к «умному» поиску – это научить систему ранжировать вакансии так, чтобы рекомендовать наиболее подходящие конкретному кандидату.

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

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

Сейчас в нашей рекомендательной системе к каждой вакансии мы применяем несколько моделей, причем каждую последующую – только если предыдущая предсказала высокую вероятность отклика.

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

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

Иллюстрация: HeadHunter

Чтобы обучить ранжирующую модель, мы используем метод градиентного бустинга, адаптированный под наши задачи.

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

Как мы учили систему учиться

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

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

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

Разработчикам и дата-сайентистам нужно время, чтобы собрать все необходимые данные, написать признаки, настроить гиперпараметры, сделать метрики для измерения качества и всю окружающую инфраструктуру. Каждое изменение проверяется в три этапа: с помощью локальных метрик, A/B-тестов, и затем всю совокупность измерений – на общих метриках поиска.

Локальные метрики показывают, насколько лучше новая модель стала работать на тестовом наборе данных. На A/B-тестах мы уже «включаем» изменения для «экспериментальной» части пользователей и проверяем на практике, стала ли система работать для них лучше, чем для той контрольной группы, где поиск остался прежним.

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

Поведенческие признаки являются «сильными» для алгоритмов. Модель учитывает поведение, тем самым определяя степень привлекательности и ранжируя вакансии на ее основе.

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

Схематически работу нашего машинного обучения можно изобразить вот так:

Иллюстрация: HeadHunter

Немного экспериментов с нейронными сетями

Многие считают нейросети лучшим и универсальным алгоритмом, а deep learning – альтернативой для выделения признаков вручную.

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

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

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

Разительные переменыЗа год использования «умного» поиска количество приглашений на собеседования увеличилось на 47%.

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

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

Дальше – больше

Мы продолжаем улучшать «умный» поиск и рекомендации и все еще находимся в начале большого и очень интересного пути.

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

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

Источник