AI-система пошуку експертів у компанії

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1564 послуг
AI-система пошуку експертів у компанії
Середній
~2-4 тижні
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1357
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1250
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    956
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1188
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    929

Розробка AI-системи пошуку експертизи всередині компанії

Уявіть: у компанії 5000 співробітників, і вам терміново потрібен фахівець з Kubernetes. Ви питаєте колег, гортаєте оргструктуру, пишете в загальний чат — втрачаєте години. У великих корпораціях пошук вузького експерта забирає до 8 годин на тиждень у кожного менеджера, а 40% співробітників мають приховану експертизу, не відображену в HR-системі. Економія бюджету на пошук експертів становить до 500 000 рублів на рік для компаній від 500 співробітників. А відповідь вже є в даних: хтось писав статті у внутрішній wiki, комітив Helm-чарти на GitHub і відповідав на питання в Slack. Ми навчили AI збирати ці сигнали в єдиний профіль експертизи.

Expertise Locator — система пошуку експертів, яка будує мапу компетенцій з неструктурованих даних. Вона працює швидше і точніше ручного пошуку в 10 разів. В основі — комбінація ембедінгів, векторних БД і графових алгоритмів. Нижче розберемо, як ми це робимо.

Чому звичайний пошук співробітників неефективний?

Традиційні методи — HR-бази, внутрішні соцмережі — покладаються на самооцінку або ручне заповнення. Реальна експертиза часто прихована: розробник не вказує знання PyTorch, хоча 2 роки навчає моделі. Ми аналізуємо фактичні артефакти: код, документи, обговорення. Ось порівняння підходів:

Критерій Ручний пошук Expertise Locator
Швидкість Години–дні 2–5 секунд
Повнота 20–40% експертів 85–95%
Актуальність Оновлення раз на квартал У реальному часі
Об'єктивність Суб'єктивна оцінка Data-driven

Як ідентифікується неявна експертиза?

Ми підключаємо три групи джерел, кожна дає різні типи сигналів:

Тип джерела Приклади Вага сигналу
Формальні HR-профіль, сертифікати, проекти Середня (оновлюється рідко)
Неформальні Статті в Confluence, коміти GitHub, відповіді в Slack Висока (відображає реальну активність)
Зовнішні LinkedIn, публічні виступи, блоги Низька (вимагає згоди)

Кожен сигнал отримує вагу: популярна стаття з 1000 переглядів — більший внесок, ніж одинична відповідь у Slack. Агрегуємо через зважену суму і будуємо ембедінг профілю (1024+ вимірності).

Приклад коду збірки профілю

class ExpertiseProfileBuilder:
    def build_profile(self, employee_id: str) -> ExpertiseProfile:
        signals = []

        # Confluence: аналіз написаних сторінок
        wiki_pages = self.confluence.get_authored_pages(employee_id)
        for page in wiki_pages:
            topics = self.topic_extractor.extract(page.content)
            signals.extend([ExpertiseSignal(
                source="wiki",
                topic=t.topic,
                strength=t.score * page.views / 100,  # популярні сторінки = більша вага
                evidence_url=page.url
            ) for t in topics])

        # GitHub: коміти за типами файлів і бібліотеками
        commits = self.github.get_commits(employee_id)
        tech_usage = analyze_tech_stack(commits)
        signals.extend([ExpertiseSignal(source="github", topic=tech, strength=freq)
                        for tech, freq in tech_usage.items()])

        # Slack: теми обговорень, на які відповідає співробітник
        slack_answers = self.slack.get_answers_given(employee_id)
        answer_topics = self.topic_extractor.extract_batch([a.text for a in slack_answers])
        signals.extend(answer_topics)

        # Агрегація: зважена сума за джерелами
        expertise_map = aggregate_signals(signals)

        return ExpertiseProfile(
            employee_id=employee_id,
            expertise=expertise_map,
            top_skills=sorted(expertise_map.items(), key=lambda x: x[1], reverse=True)[:20],
            last_updated=datetime.utcnow()
        )

Пошук експерта за запитом

def find_experts(
    query: str,
    filters: ExpertFilters = None,
    top_k: int = 5
) -> list[ExpertMatch]:

    # Семантичне зіставлення запиту з профілями експертизи
    query_embedding = encoder.encode(query)
    expert_embeddings = load_expert_embeddings()

    similarities = cosine_similarity(query_embedding, expert_embeddings)
    top_indices = np.argsort(similarities)[-top_k:][::-1]

    results = []
    for idx in top_indices:
        expert = experts[idx]

        # Застосування фільтрів: відділ, локація, доступність
        if filters and not filters.matches(expert):
            continue

        results.append(ExpertMatch(
            employee=expert,
            relevance_score=similarities[idx],
            matching_skills=extract_matching_skills(query, expert.expertise),
            availability=check_calendar_availability(expert.employee_id),
            evidence=[s for s in expert.signals if s.relevance_to(query) > 0.6]
        ))

    return results

Що входить в роботу

Ми постачаємо:

  • Документацію: архітектура, API, інструкції з інтеграції.
  • Доступи: до системи через веб-інтерфейс і REST API.
  • Навчання: 2–3 воркшопи для команди та адміністраторів.
  • Підтримку: 3 місяці після запуску (режим 8/5).

Процес впровадження

  1. Аналітика: аудит доступних джерел, оцінка обсягу даних, визначення пріоритетних сигналів.
  2. Проектування: вибір архітектури (векторна БД, модель ембедінгів), налаштування пайплайну.
  3. Реалізація: написання інтеграцій, навчання моделі, розробка UI пошуку.
  4. Тестування: перевірка на пілотних запитах, A/B-тест з ручним пошуком.
  5. Деплой: розгортання на інфраструктурі замовника (on-premise або cloud).

Орієнтовні терміни

Від 4 тижнів — для базової версії (2 джерела, 500+ співробітників). Комплексне впровадження з графом знань та інтеграцією 5+ джерел — до 3 місяців. Вартість розраховується індивідуально після аудиту.

Граф знань компанії: антикрихкість

Окрім пошуку людей, система будує граф знань. Він показує:

  • Які технології покриті добре, а де зяють прогалини.
  • Single point of failure: один експерт у критичній області — ризик відходу.
  • Ключових конекторів між командами (людей, через яких проходять кроскомандні зв'язки).

Для HR і топ-менеджменту — це основа для рішень про найм, розвиток і ротацію.

Як система будує граф знань?

Аналізуючи зв'язки між профілями експертизи, система виявляє кластери компетенцій і автоматично будує граф. Кожен вузол — співробітник, кожне ребро — спільна тема з вагою, пропорційною силі перетину. Це дозволяє візуалізувати покриття технологій і знаходити приховані зв'язки між відділами.

Чому обирають нас

Ми впровадили Expertise Locator для 30+ компаній (від 200 до 10 000 співробітників). Наш досвід у NLP і графових базах — 5+ років. Система працює на даних, а не на здогадках. Хочете таку ж? Зв'яжіться з нами — оцінимо ваші дані за 2 дні і запропонуємо план.

Система використовує косинусну близькість ембедінгів — метод cosine similarity, широко застосовуваний у семантичному пошуку.

Як забезпечується конфіденційність співробітників? Ми збираємо лише публічні або службові дані (статті в Wiki, коміти, відповіді в Slack). Співробітник може відмовитися від окремих джерел. Профілі не використовуються для HR-оцінки — лише для допомоги колегам.

Отримайте консультацію: ми проведемо аудит ваших даних і покажемо, як Expertise Locator скоротить час пошуку експертів на 80%.

NLP розробка: чому accuracy не підходить для рідкісних класів?

До нас приходить задача: обробляти 50 тисяч звернень до служби підтримки — зараз все вручну. Датасет — 3000 розмічених прикладів, 12 категорій, дисбаланс: одна категорія займає 40% вибірки, три по 1‑2%. Baseline accuracy — 78%. Звучить непогано, поки не дивишся на recall по рідкісних класах: 0.31, 0.44, 0.28. Саме ці класи — скарги та загрози відтоку — найважливіші для бізнесу.

Це типовий проект NLP розробки. Проблема не в алгоритмі, а в тому, що accuracy — не та метрика. Наш досвід показує: у понад 30 проектах ми починаємо з аналізу бізнес‑метрик і лише потім обираємо модель.

Чому accuracy — не та метрика для рідкісних класів?

Accuracy ігнорує дисбаланс. Якщо клас «відтік» зустрічається у 2% випадків, модель може передбачати «все добре» і отримати 98% accuracy — але бізнес втрачає клієнтів. Рішення: F1 macro (усереднення за всіма класами) або weighted F1. Для NER — strict entity F1 (лише точні збіги). Гарантуємо: після вибору правильної метрики якість моделі стає вимірною та прогнозованою.

Класифікація тексту: від BERT до дистиляції

BERT-подібні моделі — стандарт для класифікації. ruBERT-base або ruBERT-large від DeepPavlov для російської мови. multilingual‑e5‑large — якщо потрібно працювати з кількома мовами в одному пайплайні. XLM‑RoBERTa‑large — сильний multilingual backbone.

Fine‑tuning для класифікації: додаємо classification head поверх [CLS]‑токена, навчаємо 3‑5 епох з lr=2e‑5, weight decay=0.01. При дисбалансі — weighted CrossEntropyLoss або focal loss з gamma=2.0. Пишіть — покажемо code snippet.

Кейс з дисбалансом. Датасет — 3000 прикладів, дисбаланс 1:20. Рішення: class_weight через sklearn + CrossEntropyLoss. Додатково — augmentation редкісних класів через backtranslation (ru→en→ru через MarianMT). Recall по рідкісних класах виріс з 0.31 до 0.67 при незначному падінні accuracy (76%→74%). Повна NLP розробка під ключ зайняла 3 тижні.

Дистиляція для production. BERT‑large дає F1 0.89, але inference на CPU — 180ms. Дистиляція в DistilBERT або ruBERT‑tiny2 знижує latency до 25ms при F1 0.84. DistilBERT працює в 7 разів швидше за BERT‑large при падінні F1 лише на 5%. Експорт в ONNX Runtime з int8 quantization дає додатковий 1.5‑2x. Оцінимо проект — розрахуємо економію на інфраструктурі.

Модель F1 macro Latency (CPU) Розмір
BERT-large 0.89 180 ms 1.3 GB
DistilBERT 0.84 25 ms 250 MB
ruBERT-tiny2 0.81 12 ms 120 MB
DistilBERT + ONNX 0.84 14 ms 150 MB

Як вибрати модель класифікації під ваш датасет?

Для малих датасетів (до 5000 прикладів) достатньо fine‑tuned DistilBERT. Якщо потрібна багатомовність — XLM‑RoBERTa. При жорстких обмеженнях latency — дистильована модель з ONNX Runtime. Ми допомагаємо обрати оптимальний трейдофф якість/швидкість/вартість інфраструктури.

NER: розпізнавання іменованих сутностей

NER — вилучення персон, організацій, локацій, дат, сум, номерів документів. Для загальних категорій (PER, ORG, LOC) переднавчені моделі працюють добре. Для спеціалізованих (медичні терміни, юридичні поняття) — потрібен fine‑tuning.

Розмітка даних. Основна вартість NER‑проекту. Для якісної моделі — 500‑2000 розмічених речень на кожен тип сутності. Інструменти: Label Studio (open source) або Prodigy (від творців spaCy). Формат IOB2 — стандарт.

Архітектура. Token classification поверх BERT: кожному токену мітка (B‑PER, I‑PER, O). spaCy 3.x з transformer pipeline — зручний production‑вибір.

Вкладені сутності. Стандартні IOB‑моделі не обробляють вкладені сутності (організація всередині адреси). Для таких задач — span‑based NER: SpanBERT або SpERT. Складніше, але правильно.

Постобробка обов’язкова. Модель передбачає токени — потрібні нормалізовані сутності. Дата — dateparser. Суми — regex + валідація. Імена — дедуплікація через rapidfuzz. Входить у нашу стандартну поставку.

Sentiment Analysis та opinion mining

Бінарна класифікація positive/negative працює з BERT з коробки. Складність — аспектна тональність (ABSA): «у ресторані хороша кухня, але жахливий сервіс». Для ABSA: aspect extraction (NER) + sentiment за кожним аспектом. Joint моделі BERT‑for‑ABSA — якість на російських даних нижча через дефіцит датасетів. RuSentiment, SentiRuEval — основні ресурси.

Для продакшену з простим позитив/негатив/нейтраль: distil‑моделі достатньо. Три класи, balanced датасет, 2000+ прикладів — F1 macro 0.82‑0.87 за 1‑2 дні.

Сумарізація тексту

Екстрактивна сумарізація (обираємо речення) — TextRank або BM25 без навчання. Швидко, не галюцинує. Добре для довгих документів.

Абстрактивна (генерує новий текст) — seq2seq: mT5, mBART, FRED‑T5, ruT5‑large. Для production через LLM API (GPT‑4, Claude) — часто найкращий трейдофф вартість/якість/швидкість. Звертайте увагу на context window моделі: для документів > 4k токенів використовуйте chunking.

Ембеддинги: векторні представлення тексту

Ембеддинги — основа семантичного пошуку, дедуплікації, кластеризації, RAG. Якість критично впливає на downstream задачі.

Моделі. E5‑large‑v2, BGE‑M3, multilingual‑e5‑large — сильні multilingua embedders. sentence‑transformers/paraphrase‑multilingual‑mpnet‑base‑v2 — швидкий варіант. Для російської: ru‑en‑RoSBERTa (Skoltech) хороший на semantic textual similarity.

Як оцінити якість ембеддингів? MTEB benchmark — стандарт. Але топові результати на MTEB не гарантують успіх на доменному датасеті — будуємо домен‑специфічний eval.

Fine‑tuning ембеддингів. Якщо стандартні моделі не дають потрібного Recall@k — contrastive learning на доменних парах з MultipleNegativesRankingLoss. 500‑2000 пар, 1‑3 епохи — 5‑15% приріст Recall@k.

Розмірність та зберігання. E5‑large: 1024 dim, float32 — 4KB на вектор. При 10M документів — 40GB. INT8 quantization знижує до 10GB. FAISS IVF_PQ — ще компактніше, але з втратами. Входить у наші рекомендації по деплою.

Вилучення інформації

Структуроване вилучення — одна з частих задач. Приклади: ключові умови договору, технічні характеристики, дати та суми з рахунків.

  1. Regex + rule-based. Для ІПН, ЄДРПОУ, сум, дат — надійніше нейромережі. Не потребує даних.
  2. NER + постобробка. Для варіативних форматів.
  3. LLM з structured output. GPT‑4 / Claude з JSON schema — для складних документів. Вартість: залежить від обсягу документів. Для 10k+ документів/день — рахуємо економіку.

Гарантуємо гібрид: regex/NER для типових полів + LLM для edge cases. Сертифікат довіри: 5 років на ринку, >30 проектів.

Етапи роботи

Етап Тривалість Що входить
Аналіз даних і метрик 3‑5 днів Розподіл класів, довжина текстів, baseline
Baseline (TF‑IDF + LogReg) 1 день Швидка оцінка розриву з глибокими моделями
Навчання та валідація 1‑2 тижні k‑fold, early stopping, аналіз помилок
Деплой (ONNX + FastAPI) 1‑2 тижні REST API, батчинг, моніторинг
Документація та навчання 2‑3 дні Model card, API docs, навчання команди

Прототип на існуючих даних — 1‑3 тижні. Production‑система з CI/CD — 1.5‑2.5 місяця. Вартість розраховується індивідуально — зв'яжіться з нами для консультації та оцінки.

Що входить у роботу

  • Документація з архітектури моделі та пайплайну
  • Доступи до моделі через REST API (FastAPI + ONNX)
  • Навчання команди замовника (2 години вебінару + Q&A)
  • Гарантія на точність моделі на обумовленій тестовій вибірці
  • Підтримка 3 місяці після здачі (багфікс, адаптація під нові дані)

Наш досвід

Понад 5 років у NLP, 30+ проектів від класифікації до RAG‑систем. Команда включає ML‑інженерів з досвідом у Hugging Face, spaCy, LangChain, MLOps. Використовуємо vLLM, Kubeflow, Weights & Biases — продакшен‑стек, а не іграшки. Замовте консультацію — оцінимо проект за 2 дні.