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