Технологии

Дедупликация вакансий: почему один оффер всплывает в десяти местах

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

Включить дедупликацию
дедупликация вакансий

Откуда берутся дубликаты вакансий?

Объявление о вакансии редко размещается только на одной платформе. Компания может разместить его на hh.ru, а затем скопировать на свою страницу вакансий. Одновременно объявление отправляется в кадровые агентства, которые затем размещают его в своих Telegram-каналах. После этого объявление перепостится в профессиональные чаты, такие как «IT Jobs» или региональные HR-сообщества. Агрегаторы, такие как Trud.com или GorodRabot, также пересылают одно и то же объявление с платформ типа hh.ru и SuperJob.

В результате одно объявление о вакансии может появиться в 8-12 разных версиях. Каждая платформа немного по-разному формулирует текст объявления: hh.ru сохраняет структурированную таблицу с полями, сообщения в Telegram сокращаются до трех абзацев и добавляются эмодзи, а кадровые агентства добавляют контактную информацию и удаляют имя работодателя.

Для рекрутеров это, несомненно, потеря. При открытии «новой» вакансии им требуется всего 2-3 минуты, чтобы просмотреть требования к кандидатам. Затем вы понимаете, что видели ту же самую вакансию вчера на другом канале с другим заголовком. При 200-400 вакансиях в день эта ручная проверка занимает 3-5 часов в неделю. Это время, которое можно было бы использовать для оценки кандидатов или проведения собеседований, тратится впустую на выявление информации, которая уже была обработана один раз.

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

Почему простые сравнения не работают

Часто люди думают о сравнении объявлений о вакансиях, сопоставляя точный текст. Но это не работает. При пересылке текст редактируется: абзацы сокращаются, добавляются эмодзи, контактная информация канала и хэштеги. Даже если мы обсуждаем одну и ту же вакансию, описание на hh.ru и хэштеги в версии Telegram никогда не совпадут.

Сравнение по названию вакансии тоже не работает. «Python Developer», «Backend Engineer (Python)» и «Python Developer (Intermediate)» часто являются одним и тем же названием должности у одного и того же работодателя. «Менеджер» в Ozon и «Менеджер» в местном агентстве недвижимости не имеют ничего общего, даже если их тексты идентичны.

Работодателей также нельзя идентифицировать по текстам. Одна и та же компания может отображаться как «Сбер», «СберТех» и «ПАО Сбербанк». Юридическое лицо в объявлении о вакансии и бренд в сообщении в Telegram почти всегда различаются.

Поэтому сопоставление дубликатов — это не просто сравнение строк, а сопоставление сущностей. Необходимо нормализовать информацию о работодателе и учитывать различные варианты написания и группы компаний. Для сопоставления должностей с каноническими ролями необходимо использовать тезаурус и словарь названий должностей. Также необходимо сопоставлять место работы и режим работы, поскольку даже при идентичном тексте «удалённая работа» и «Москва, гибридный рабочий кабинет» представляют разные названия должностей. Только таким образом можно оценить семантическое сходство описаний, а не полагаться на дословное сопоставление.

Ещё одна проблема — неравномерное распределение зарплат. На некоторых платформах отображается «от 200 000», на других — «чистый доход 200 000–280 000», а на третьих информация о зарплате полностью скрыта. Алгоритм должен интерпретировать пустые поля как «неизвестно», а не как несоответствие.

Как это работает: Алгоритм сопоставления

Этот алгоритм использует многоэтапную модель. Сравнивать все объявления о вакансиях по одному невозможно: для потока данных в 50 000 записей это означает более 1 миллиарда пар совпадений. Поэтому первым шагом является сегментация. Вакансии группируются на основе общих критериев: стандартизированная информация о работодателе + категория должности + город. В каждой группе обычно сохраняется от 5 до 40 подходящих вакансий для точного сравнения.

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

  • Степень совпадения стандартизированной информации о работодателе;

  • Близость стандартизированного названия и уровня должности;

  • Место работы и тип должности;

  • Перекрытие диапазонов заработной платы;

  • Описательное семантическое сходство, рассчитанное с помощью векторных представлений слов.

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

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

Почему необходимо корректировать пороговое значение

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

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

Помимо экономии времени, какие еще преимущества предлагают сложенные карточки?

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

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

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

Эти данные используются для анализа рынка труда. Сводные исторические данные показывают средний уровень найма, сезонность спроса и уровень активности конкретных работодателей в определенном сегменте рынка. Единицей измерения являются карточки; без карточек статистика была бы значительно завышена из-за дублирования.

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

FAQ

Не потеряются ли данные при сведении дублей?

Нет. Карточка хранит все исходные публикации, площадки и даты, а свёрнутые вакансии можно расцепить в один клик.

Что делать с пограничными совпадениями?

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

Дедупликация работает между разными типами источников?

Да, корректная система сводит дубли между Telegram, job-бордами, зарубежными платформами и career-страницами одинаково.

Перестаньте разбирать одну вакансию по десять раз

Запросить демо-доступ