Когда сервис показывает «вакансии, которые вам подходят», за этим стоит не магия, а вполне понятная инженерия. В этом лонгриде мы на примере разберем, как устроены рекомендательные системы и поиск вакансий, в том числе на платформе Talanto.
Коротко:
- Рекомендательные системы опираются на сравнение объектов: их представляют в числовом виде и измеряют степень схожести между ними.
- Существует два базовых подхода: рекомендации на основе содержания (content-based) и на основе поведения пользователей (collaborative filtering).
- Матчинг "резюме – вакансия" обычно сочетает семантическое сравнение текстов, фильтрацию по условиям и ранжирование результатов.
- Эмбеддинги и векторный поиск – это современные методы, которые позволяют превращать тексты в числа и искать между ними смысловое сходство, а не просто совпадение слов.
Задача: соединить резюме и вакансию
На джоб-борде с тысячами вакансий пользователь не может просмотреть всё вручную. Задача системы – показать пользователю только те варианты, которые соответствуют его опыту и предпочтениям, и отсортировать их по релевантности.
По сути, рекомендация – это выбор релевантного подмножества из большого числа объектов и его упорядочивание. Те же принципы используются в рекомендациях фильмов, товаров или музыки.
Подход 1. Рекомендации на основе содержания
Система анализирует характеристики объектов. Для вакансий это стек технологий, уровень позиции, локация, зарплатный диапазон и текст описания. Для кандидата это навыки, опыт и предпочтения.
Логика проста: пользователю предлагают то, что похоже на его профиль по содержанию. Например, backend-разработчику на Go в Берлине будут показываться Go-вакансии уровня middle+ в Германии.
Плюс подхода – он работает сразу, даже для новых пользователей, не имеющих истории взаимодействий (проблема «холодного старта» отсутствует). Минус – качество рекомендаций ограничено тем, насколько полно и точно описаны объекты.
Подход 2. Рекомендации на основе поведения пользователей
Система анализирует не свойства объектов, а действия пользователей: отклики, просмотры, сохранения. Логика такая: если пользователи с похожим поведением интересовались определенными вакансиями, эти вакансии можно рекомендовать другим пользователям с похожим профилем поведения.
Такой подход используется, например, в маркетплейсах и стриминговых сервисах.
Достоинство этого подхода в том, что он позволяет находить неочевидные связи, которые не видны через явные характеристики объектов. Но есть и негативная сторона. Этот подход требует большого объема данных о поведении пользователей и плохо работает на «холодном старте» (новые пользователи или новые вакансии без истории).
На практике эти два подхода часто комбинируются. Такие системы называют гибридными рекомендациями.
Как сравнивать тексты: эмбеддинги
Основная идея современного матчинга – представить текст в виде числового вектора (эмбеддинга), который отражает его смысл. Тогда похожие по смыслу тексты оказываются близкими векторно, даже если в них используются разные слова. Например, «опыт с Kubernetes и CI/CD» и «ищем DevOps с оркестрацией контейнеров» будут близки по смыслу и в пространстве эмбеддингов.
Сходство между такими векторами измеряется математически, например с помощью косинусного расстояния: чем ближе векторы, тем выше релевантность.
Такой подход решает проблему ключевых слов, которые не учитывают синонимы и контекст. Семантический поиск позволяет находить подходящие результаты даже при разных формулировках.
Для хранения и быстрого поиска векторов используют специальные структуры и базы данных (в нашем случае это PostgreSQL с расширением pgvector).
Как устроен матчинг "резюме – вакансия"
Типовой конвейер выглядит так:
- Извлечение признаков. Из резюме и вакансии выделяются структурированные данные (стек, грейд, локация) и формируется текстовый эмбеддинг.
- Фильтрация. Применяются жесткие ограничения, которые отсекают заведомо нерелевантные варианты: неподходящая страна, уровень позиции или формат занятости. Остается ограниченное множество кандидатов.
- Скоринг. Для оставшихся пар рассчитывается итоговая оценка: семантическая близость эмбеддингов и совпадение явных признаков.
- Ранжирование. Результаты сортируются по итоговому скору. Дополнительно могут учитываться факторы свежести вакансии, зарплатного диапазона и активности работодателя.
- Обратная связь. Действия пользователя (просмотр, отклик, скрытие) используются для уточнения будущих рекомендаций.
Именно так устроен матчинг в Talanto: система оценивает совместимость профиля и вакансии и показывает процент соответствия, чтобы пользователь мог откликаться на предложения, где его шансы выше. В основе матчинга лежит извлечение признаков, эмбеддинги в pgvector и ранжирование с учетом фильтров.