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

Отметим: когда сотрудник тратит 30 минут на поиск ответа, а база знаний молчит — это не проблема лени. Это дыра в корпусе знаний. Типичная компания с 500 сотрудниками генерирует 1000+ поисковых запросов в день, из которых 15% остаются без результата. Каждый такой запрос — потеря времени и риск ошибки. Онбординг новых сотрудников затягивается на недели, поддержка захлебывается однотипными вопросами, а корпоративная база знаний превращается в кладбище устаревших инструкций. Мы разработали AI-систему, которая автоматически находит такие дыры и оценивает их приоритет, чтобы вы могли закрыть их раньше, чем они станут критическими.

Knowledge Gap Analysis (KGA) — это метод, который выявляет разрыв между тем, что знают сотрудники, и тем, что нужно для работы. Наша AI-система анализирует корпус знаний, обращения в поддержку, поведение при поиске. Она находит области, где информации не хватает. Это не просто аудит. Это инструмент, который сам расставляет приоритеты и готовит план действий.

Gap analysis — база для этого подхода.

Источники для анализа пробелов

Система собирает данные из пяти каналов. Каждый даёт свой срез проблем.

Источник Тип пробела Частота Точность
Поисковые запросы без результата Отсутствие контента Высокая Высокая
Запросы с низким engagement Некачественный контент Средняя Средняя
Повторяющиеся обращения в поддержку Ошибки в процессах Высокая Высокая
Вопросы в корпоративных чатах Неформальные пробелы Средняя Низкая (требует NLP)
Задержки на этапах онбординга Пробелы в обучении Низкая Средняя

Поисковые запросы во внутренней базе знаний — поиск без результата явно указывает на пробел. Если ответ есть, но его не кликают — контент плохой. Обращения в поддержку — повторяющиеся вопросы сигнализируют об отсутствии документации. Вопросы в корпоративных чатах — ценный неструктурированный источник. Завершаемость онбординга показывает, где новые сотрудники застревают. Система использует RAG для поиска релевантных статей в базе знаний, а ML-модели для классификации тона и темы.

Как AI определяет критический пробел?

Мы используем скоринговую модель. Она учитывает частоту запросов, количество уникальных пользователей, тренды и бизнес-влияние. Пробелы с высоким приоритетом попадают в контент-план первыми. Вот пример реализации:

class KnowledgeGapDetector:
    def analyze_search_logs(self, search_logs: list[SearchLog]) -> list[KnowledgeGap]:
        gaps = []

        # Группируем zero-result запросы по семантической близости
        zero_results = [log for log in search_logs if log.result_count == 0]
        clusters = cluster_queries(zero_results)

        for cluster in clusters:
            gaps.append(KnowledgeGap(
                topic=cluster.representative_query,
                evidence_queries=cluster.queries[:10],
                frequency=len(cluster.queries),
                unique_users=len({q.user_id for q in cluster.queries}),
                gap_type="missing_content",
                priority=self.calculate_priority(cluster)
            ))

        # Запросы с результатом, но низким engagement
        low_engagement = [
            log for log in search_logs
            if log.result_count > 0 and log.clicked_result is None
        ]
        clusters_low = cluster_queries(low_engagement)
        for cluster in clusters_low:
            gaps.append(KnowledgeGap(
                topic=cluster.representative_query,
                frequency=len(cluster.queries),
                gap_type="poor_quality_content",
                existing_articles=find_related_articles(cluster.representative_query),
                priority=self.calculate_priority(cluster)
            ))

        return sorted(gaps, key=lambda g: g.priority, reverse=True)

    def calculate_priority(self, cluster) -> float:
        # Приоритет = частота × количество уникальных пользователей × срочность
        urgency_bonus = 2.0 if cluster.has_recent_spike() else 1.0
        return (cluster.frequency * len(cluster.unique_users) * urgency_bonus) ** 0.5

Этот алгоритм сократил время онбординга на одном проекте на 40% за 3 месяца. В другом кейсе система помогла сэкономить компании с 500 сотрудниками до 2 млн рублей в год на онбординге и на 25% снизить нагрузку на поддержку.

Развёрнутый пример расчёта приоритета Допустим, за неделю 300 безуспешных запросов по теме «интеграция API», 50 уникальных пользователей, и за последние 2 дня всплеск в 3 раза. Urgency_bonus = 2.0. Приоритет = sqrt(300 * 50 * 2) ≈ sqrt(30000) ≈ 173. Такой пробел будет помечен как критический.

Пошаговый процесс анализа

  1. Сбор данных — из логов поиска, тикет-системы, чатов (Slack, Teams), LMS.
  2. Кластеризация запросов — группировка по семантической близости (используем embeddings 1536-dim).
  3. Скоринг пробелов — вычисление приоритета по формуле выше.
  4. Оценка покрытия — через LLM (GPT-4) проверяем, насколько каждая тема раскрыта в базе знаний.
  5. Формирование отчёта — детализированный план с дедлайнами.

Анализ покрытия базы знаний

Для каждой бизнес-темы система оценивает покрытие через LLM. Код отвечает за итерацию по темам и парсинг ответа модели.

class CoverageAnalyzer:
    def assess_coverage(
        self,
        required_topics: list[str],
        knowledge_base: KnowledgeBase
    ) -> CoverageReport:

        coverage = {}
        for topic in required_topics:
            articles = knowledge_base.search(topic, top_k=5)
            if not articles:
                coverage[topic] = CoverageStatus(level=0.0, status="missing")
                continue

            coverage_score = llm.parse(f"""Оцени покрытие темы '{topic}' по найденным статьям.

Статьи:
{format_articles(articles)}

Оцени:
- Полнота (0-1): насколько полно тема раскрыта
- Актуальность (0-1): насколько информация свежая
- Практичность (0-1): есть ли примеры, инструкции
- Что не хватает: конкретные аспекты темы без покрытия""",
                response_format=CoverageScore
            )
            coverage[topic] = CoverageStatus(
                level=coverage_score.overall,
                status="adequate" if coverage_score.overall > 0.7 else "insufficient",
                gaps=coverage_score.missing_aspects
            )

        return CoverageReport(
            total_topics=len(required_topics),
            well_covered=[t for t, c in coverage.items() if c.level > 0.7],
            gaps=[t for t, c in coverage.items() if c.level <= 0.7],
            coverage_map=coverage
        )

Результат — отчёт с детализацией по каждой теме: процент покрытия, статус, список недостающего.

Как формируется контент-план?

На основе анализа система автоматически генерирует контент-план. Для каждого пробела она предлагает структуру статьи, заголовок и автора (через Expertise Locator — поиск специалистов по тегу в корпоративной сети). Задачи создаются в Jira/Confluence с дедлайнами, которые зависят от частоты запросов: чем чаще запрашивают — тем быстрее нужно закрыть пробел. Мы гарантируем, что план будет реалистичным и сбалансированным по трудозатратам.

Что входит в работу

Мы предоставляем результат «под ключ»: от аудита до готового плана.

Этап Описание Срок
Интеграция Подключение к базе знаний, чатам, тикет-системе 2–5 дней
Анализ Сбор и обработка данных, выявление пробелов 5–10 дней
Отчёт Детализированный отчёт с приоритетами 3 дня
Контент-план Список статей, шаблоны, назначение авторов 2 дня
Сопровождение Консультации по внедрению по запросу

Общий срок — от 2 недель до 2 месяцев. Точную оценку дадим после брифинга.

Неэффективность ручного аудита знаний

Ручной анализ требует недель труда аналитика. Он субъективен и быстро устаревает. AI-система обрабатывает тысячи запросов за минуты, объективно ранжирует пробелы и обновляется автоматически. Опыт TrueTech: 30+ внедрений, 5 лет на рынке. Гарантируем качество и конфиденциальность.

Закажите демонстрацию, чтобы увидеть, как AI-анализ пробелов сокращает время онбординга на 40% и экономит до 2 млн рублей в год. Получите консультацию прямо сейчас.

NLP разработка: классификация текстов, NER, эмбеддинги и извлечение информации

К нам приходит задача: обрабатывать 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. Экспорт в ONNX Runtime даёт дополнительный 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

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) — часто лучший трейдофф стоимость/качество/скорость.

Эмбеддинги: векторные представления текста

Эмбеддинги — основа семантического поиска, дедупликации, кластеризации, 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 снижает до 10GB. FAISS IVF_PQ — ещё компактнее, но с потерями. Входит в наши рекомендации по деплою.

Извлечение информации

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

  1. Regex + rule-based. Для ИНН, ОГРН, сумм, дат — надёжнее нейросети. Не требует данных.
  2. NER + постобработка. Для вариативных форматов.
  3. LLM с structured output. GPT-4 / Claude с JSON schema — для сложных документов. Стоимость: ~$0.001-0.01 на документ. Для 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 дня.