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

Коротко:

  • Рекомендательные системы опираются на сравнение объектов: их представляют в числовом виде и измеряют степень схожести между ними.
  • Существует два базовых подхода: рекомендации на основе содержания (content-based) и на основе поведения пользователей (collaborative filtering).
  • Матчинг "резюме – вакансия" обычно сочетает семантическое сравнение текстов, фильтрацию по условиям и ранжирование результатов.
  • Эмбеддинги и векторный поиск – это современные методы, которые позволяют превращать тексты в числа и искать между ними смысловое сходство, а не просто совпадение слов.

Задача: соединить резюме и вакансию

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

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

Подход 1. Рекомендации на основе содержания

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

Логика проста: пользователю предлагают то, что похоже на его профиль по содержанию. Например, backend-разработчику на Go в Берлине будут показываться Go-вакансии уровня middle+ в Германии.

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

Подход 2. Рекомендации на основе поведения пользователей

Система анализирует не свойства объектов, а действия пользователей: отклики, просмотры, сохранения. Логика такая: если пользователи с похожим поведением интересовались определенными вакансиями, эти вакансии можно рекомендовать другим пользователям с похожим профилем поведения.

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

Достоинство этого подхода в том, что он позволяет находить неочевидные связи, которые не видны через явные характеристики объектов. Но есть и негативная сторона. Этот подход требует большого объема данных о поведении пользователей и плохо работает на «холодном старте» (новые пользователи или новые вакансии без истории).

На практике эти два подхода часто комбинируются. Такие системы называют гибридными рекомендациями.

Как сравнивать тексты: эмбеддинги

Основная идея современного матчинга – представить текст в виде числового вектора (эмбеддинга), который отражает его смысл. Тогда похожие по смыслу тексты оказываются близкими векторно, даже если в них используются разные слова. Например, «опыт с Kubernetes и CI/CD» и «ищем DevOps с оркестрацией контейнеров» будут близки по смыслу и в пространстве эмбеддингов.

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

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

Для хранения и быстрого поиска векторов используют специальные структуры и базы данных (в нашем случае это PostgreSQL с расширением pgvector).

Как устроен матчинг "резюме – вакансия"

Типовой конвейер выглядит так:

  1. Извлечение признаков. Из резюме и вакансии выделяются структурированные данные (стек, грейд, локация) и формируется текстовый эмбеддинг.
  2. Фильтрация. Применяются жесткие ограничения, которые отсекают заведомо нерелевантные варианты: неподходящая страна, уровень позиции или формат занятости. Остается ограниченное множество кандидатов.
  3. Скоринг. Для оставшихся пар рассчитывается итоговая оценка: семантическая близость эмбеддингов и совпадение явных признаков.
  4. Ранжирование. Результаты сортируются по итоговому скору. Дополнительно могут учитываться факторы свежести вакансии, зарплатного диапазона и активности работодателя.
  5. Обратная связь. Действия пользователя (просмотр, отклик, скрытие) используются для уточнения будущих рекомендаций.

Именно так устроен матчинг в Talanto: система оценивает совместимость профиля и вакансии и показывает процент соответствия, чтобы пользователь мог откликаться на предложения, где его шансы выше. В основе матчинга лежит извлечение признаков, эмбеддинги в pgvector и ранжирование с учетом фильтров.

Сложности, о которых редко говорят

  • Холодный старт. У новых пользователей нет истории действий, поэтому поведенческие методы не работают и приходится опираться на контентные признаки.
  • Качество данных. Вакансии и резюме описываются в свободной форме, поэтому извлечение структурированных признаков из текста часто оказывается нетривиальной задачей.
  • Баланс релевантности и разнообразия. Если показывать только максимально похожие варианты, рекомендации становятся однообразными. Нужно находить баланс между точностью и разнообразием.
  • Предвзятость данных. Система может усиливать существующие перекосы в данных, поэтому такие эффекты важно отслеживать и контролировать.
  • Объяснимость. Важно, чтобы пользователь понимал причину рекомендации (например, совпал стек и локация), а не воспринимал ее как «черный ящик».

Частые вопросы

Чем семантический поиск лучше поиска по ключевым словам? Он учитывает смысл и синонимы. Например, «оркестрация контейнеров» и «Kubernetes» могут быть близкими по смыслу, тогда как поиск по ключевым словам такие связи не улавливает.

Что такое эмбеддинг простыми словами? Это представление текста в виде набора чисел (вектора), где близкие по смыслу тексты оказываются близкими и математически. Это позволяет сравнивать смысл формально.

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

Это сложно реализовать? Базовый контентный поиск с эмбеддингами и векторной базой (например, pgvector) доступен даже небольшой команде. Сложность возрастает с масштабом и требованиями к качеству рекомендаций.

Главное

Рекомендации и умный поиск вакансий — это инженерный процесс поиска похожих объектов. Резюме и вакансии приводятся к сравнимым представлениям (эмбеддингам), затем система фильтрует результаты, оценивает их близость и ранжирует.

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

Именно на этой логике построен мэтчинг в Talanto: система оценивает совместимость профиля и вакансии и помогает находить наиболее релевантные варианты. Хотите испробовать это на себе? Заполните профиль - и увидите вакансии с высоким совпадением по вашему стеку и предпочтениям.

Источники