AI-система ранжування кандидатів
Ми розробляємо AI-систему ранжування кандидатів, яка вирішує задачу багатокритеріального відбору: технічні навички, релевантний досвід, культурна відповідність, кар'єрна траєкторія. Традиційні методи на кшталт пошуку за ключовими словами дають точність ~50% на реальних даних. Ми використовуємо multi-vector scoring з окремими компонентами під кожен критерій і зваженою агрегацією, яка налаштовується під конкретну роль. Це дозволяє не тільки підвищити точність, а й дати пояснення кожному скору.
Типова ситуація в рекрутингу: 400 резюме на позицію, HR-менеджер встигає прочитати 30. Інші відсіюються за поверхневими ознаками — заголовком посади, назвою університету, наявністю ключових слів. Це не відбір найкращих — це відбір перших-ліпших. Наша AI-система ранжування дає зважений скор кожному кандидату щодо конкретної вакансії, пояснює цей скор у термінах, зрозумілих HR-у, і не втрачає сильні профілі з нестандартним бекграундом. Це і є справжній AI рекрутинг та автоматизація рекрутингу.
Де ламається наївний підхід?
Найпростіший варіант — keyword matching або TF-IDF між описом вакансії та резюме — дає precision 0.45–0.55 на реальних даних. Кандидат із 10-річним досвідом у «розробці програмного забезпечення» програє тому, хто написав точну фразу з JD. Семантика втрачається.
Наступний крок — embedding similarity через sentence-transformers. Тут проблема інша: моделі загального призначення (all-MiniLM-L6-v2, text-embedding-3-small) погано працюють з HR-специфічною семантикою. «Python» у JD і «Python» у резюме дата-аналітика та backend-розробника — різні контексти, але embedding не розрізняє. Семантичне зіставлення резюме без урахування контексту неефективне.
Ще складніше — імпліцитні вимоги. JD вимагає «досвід управління командою», кандидат написав «керував групою з 5 аналітиків» — semantic match спрацює, але нечіткий поріг за cosine similarity (< 0.72) зріже. Наш підхід із cross-encoder долає це обмеження.
Як працює багатовимірний scoring?
Не один скор, а вектор оцінок за ключовими вимірами:
- Hard skills match — семантичний збіг технічних навичок. Використовуємо bi-encoder для первинного відбору (FAISS, топ-100), потім cross-encoder для точного скорингу (ms-marco-MiniLM-L-12-v2 або fine-tuned на HR-даних MS MARCO).
- Experience level — вилучаємо з резюме кількість років релевантного досвіду через NER + regex. Зіставляємо з вимогою з JD.
- Career trajectory — аналізуємо прогресію: зростання відповідальності, релевантність попередніх позицій. LLM-виклик із structured output.
- Education & certifications — rule-based вилучення + нормалізація назв вишів і сертифікатів.
Фінальний ранг — зважена сума з вагами під конкретну роль. Для junior-розробника education важить більше, для senior — experience trajectory.
Fine-tuning моделей на історичних даних
Якщо є історичні дані з найму (хто був найнятий, хто пройшов співбесіду, хто провалився) — це gold для навчання. Будуємо ranking model: на вході (вакансія, резюме), на виході — ймовірність успішного найму. LambdaRank або ListNet поверх embedding-ознак.
Обережно з bias: якщо історичні дані містять упередженість (наприклад, 90% найнятих — чоловіки на технічних позиціях), модель її відтворить. Обов'язковий крок — fairness audit до деплою. Ми проводимо fairness audit із використанням бібліотеки AIF360.
Пояснюваний AI для HR
Скор без пояснення — чорний ящик, який HR ігнорує. Для кожного кандидата генеруємо:
- Топ-3 збіги з вимогами вакансії (з цитатою з резюме)
- Топ-2 розбіжності (що потрібно, чого немає)
- Одну рекомендацію щодо додаткової перевірки на співбесіді
Це робить ранжування інструментом, а не заміною судження. Пояснюваний AI — ключова перевага нашої системи.
Практичний кейс: як ми скоротили час відбору в 3 рази
Наш клієнт — аутсорсингова IT-компанія, 200+ відкритих позицій одночасно. Існуючий процес: ручний перегляд в ATS (Huntflow). Час обробки воронки: 8–12 днів до першого дзвінка.
Побудували систему: парсинг резюме (PDF/DOCX → структурований JSON через LLM extraction + regex) → bi-encoder індексація в Qdrant → cross-encoder реранкінг топ-50 per vacancy → LLM-генерація пояснень → інтеграція через Huntflow API, скори відображаються прямо в картці кандидата.
Результат після 3 місяців: середній час до першого дзвінка скоротився з 9.4 до 3.1 дня (в 3 рази швидше порівняно з ручним відбором). HR-менеджери стали переглядати в середньому топ-15 замість топ-30 (менше нерелевантних). Оффер-рейт по найнятих через систему: +22% порівняно з історичним baseline. Зв'яжіться з нами, щоб обговорити схожий проєкт.
Технічний стек
| Компонент | Інструменти |
|---|---|
| Парсинг резюме | LlamaParse, Docling, кастомний LLM extraction |
| Embedding | text-embedding-3-large, E5-mistral-7b, jina-embeddings-v3 |
| Vector store | Qdrant, pgvector |
| Reranker | cross-encoder ms-marco, Cohere Rerank |
| Ranking model | LightGBM, LambdaRank (якщо є історичні дані) |
| Пояснення | GPT-4o-mini, Claude Haiku (structured output) |
Порівняння методів ранжування (precision@10 на наших даних):
| Метод | Precision@10 | Час обробки 100 резюме | Пояснюваність |
|---|---|---|---|
| Ключові слова | 45% | 2 сек | Низька |
| Embedding similarity | 62% | 5 сек | Середня |
| Наша система | 83% | 12 сек | Висока |
Наш підхід на 34% точніший за embedding similarity і дає повну пояснюваність. Це рішення для HR Tech та ML для HR.
Що входить у роботу
- Аудит поточного процесу рекрутингу та якості даних
- Розробка прототипу за 2 тижні: bi-encoder + скалярне ранжування
- Калібрування ваг спільно з HR-відділом
- Fairness audit і деблаінг моделі
- Інтеграція з ATS (Huntflow, Lever, Greenhouse, Workday)
- Документація та навчання команди
- Підтримка 3 місяці після запуску
Етапи роботи
- Аудит даних — якість резюме в базі, наявність історичних даних найму, структура JD. Це визначає підхід.
- Прототип за 2 тижні — bi-encoder + просте скалярне ранжування, демо на 50 вакансіях.
- Ітерації з HR — калібрування ваг, валідація на кейсах «добре відомих» кандидатів. Без участі рекрутерів якість не налаштувати.
- Fairness audit — обов'язково перед деплоєм, особливо якщо використовуються історичні дані.
- Інтеграція в ATS — через API Huntflow, Lever, Greenhouse або Workday. Або standalone інтерфейс.
Терміни: MVP за 4–6 тижнів, повноцінна система з fine-tuning та ATS-інтеграцією — 3–4 місяці.
Технічні деталі щодо fine-tuning
Для fine-tuning ми використовуємо LambdaRank із loss-функцією NDCG. Навчаємо на парах (вакансія, резюме) з міткою успішного найму. Застосовуємо early stopping та dropout для запобігання перенавчанню.Отримати консультацію щодо впровадження AI-ранжування можна, зв'язавшись з нашою командою. Ми маємо 5+ років досвіду в AI та понад 50 успішних проєктів у галузі NLP та рекрутингу. Замовте демо, щоб побачити систему в дії.







