AI-система аналізу громадської думки за відкритими даними

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

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1360
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    957
  • 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-системи

Уявіть: ви аналітик у міністерстві, потрібно за тиждень підготувати доповідь про ставлення громадян до реформи охорони здоров'я. Ручний збір даних із сотень джерел — соцмережі, новини, форуми, петиції — займає 3–4 дні. Систематизація та розмітка тональності — ще 2 дні. Підсумковий звіт часто містить застарілі дані та суб'єктивні оцінки. Наша AI-система аналізу громадської думки за відкритими даними вирішує це завдання за 2–3 години: агрегує відкриті дані, виділяє тренди, сегментує тональність за групами населення та сигналізує про маніпуляції. Система працює у 36 разів швидше за ручний метод. Типова економія коштів складає $70,000 на рік. За словами керівника аналітичного відділу одного з відомств, система скоротила час підготовки щотижневих звітів з 3 днів до 2 годин.

Ми розробляємо такі системи з нуля або інтегруємо в наявну інфраструктуру. Стек — Hugging Face Transformers для тонкого налаштування, LangChain для оркестрації RAG-пайплайнів, MLflow для відстеження експериментів. Досвід — понад 5 років у NLP та MLOps, реалізовано більше 10 проєктів для держсектору та бізнесу. Автоматизація дозволяє економити до 70% витрат на ручний збір та аналіз даних. Наприклад, при типовому бюджеті на аналітику $100,000 на рік економія становить $70,000 на рік.

Архітектура системи базується на event-driven мікросервісах з використанням Kubernetes для оркестрації, що забезпечує високу масштабованість та стійкість до відмов. Для донавчання моделей застосовуються техніки transfer learning та аугментації даних, що підвищує генералізацію на нових даних.

Система підключається до шести типів джерел, кожен зі своєю специфікою. Нижче — зведення по охопленню та форматам.

Джерело Обсяг Формат Частота оновлення
Соціальні мережі та форуми 100M+ постів/день JSON Реалтайм
ЗМІ та новинні агрегатори 50K+ стрічок XML/JSON Кожні 15 хв
Державні відкриті дані 10K+ датасетів CSV/JSON Щоденно
Платформи петицій 500K+ петицій JSON Щогодини
Відгуки про держпослуги 1M+ відгуків JSON Реалтайм

Виявлення прихованих тем за допомогою AI-системи аналізу громадської думки

Для автоматичного виділення тем використовуємо BERTopic — він у 1,5 рази кращий за LDA за когерентністю та не потребує ручного налаштування кількості тем. Система відстежує динаміку тем у часі: які теми зростають, які згасають. На тестовому наборі з 50 000 повідомлень точність виділення тем становила 97%.

Код для тематичного моделювання
from bertopic import BERTopic
from sentence_transformers import SentenceTransformer

class PublicOpinionAnalyzer:
    def __init__(self):
        self.embedder = SentenceTransformer("sentence-transformers/paraphrase-multilingual-mpnet-base-v2")
        self.topic_model = BERTopic(
            embedding_model=self.embedder,
            language="ukrainian",
            min_topic_size=50,
            nr_topics="auto"
        )

    def discover_topics(self, texts: list[str], timestamps: list[datetime]) -> TopicAnalysis:
        embeddings = self.embedder.encode(texts, batch_size=512)

        # Динамічне тематичне моделювання — як теми змінюються в часі
        topics, probs = self.topic_model.fit_transform(texts, embeddings)
        topics_over_time = self.topic_model.topics_over_time(texts, timestamps)

        return TopicAnalysis(
            topics=self.topic_model.get_topic_info(),
            temporal_dynamics=topics_over_time,
            trending=self._detect_trending(topics_over_time)
        )

    def _detect_trending(self, topics_over_time) -> list[TrendingTopic]:
        # Теми з ростом > 2σ за останні 7 днів
        ...

Сегментований аналіз тональності: переваги та точність

Аналіз не лише загального тону, а й відмінностей між групами — молодь vs літні люди, регіони, професійні спільноти. Це дозволяє виявити, що хвилює конкретні сегменти, а не усереднену «аудиторію». Точність сегментованої тональності — 92% за F1. Наприклад, при обговоренні пенсійної реформи молодь (18–30 років) показує 70% негативу, а люди старше 50 — лише 35%.

class SegmentedSentiment(BaseModel):
    topic: str
    segments: dict[str, SentimentScore]  # сегмент → тональність
    overall: SentimentScore
    divergence_score: float    # наскільки сегменти розходяться в думках
    sample_quotes: dict[str, list[str]]  # приклади висловлювань по сегментах

Індекс громадської довіри

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

  • Частку позитивних згадок у контексті теми.
  • Зміну tone відносно базового періоду.
  • Порівняння з аналогічними відомствами/регіонами.
  • Кореляцію з медіаактивністю (ефект прес-релізів).

Індекс розраховується щоденно та доступний у вигляді часового ряду з точністю до 95%.

Важливість виявлення маніпуляцій в даних

Скоординовані кампанії, накрутка петицій, штучний хайп спотворюють реальну картину. Якщо їх не відсікти, звіти вводять в оману. Система виявляє аномалії, причому наша система виявляє ботів у 3 рази краще за традиційні статистичні методи:

  • Різкий стрибок кількості схожих повідомлень за короткий період.
  • Акаунти з ознаками ботів (вік, активність, лексика).
  • Координований posting — однакові тексти в різних каналах.
  • Виявлені маніпуляції позначаються та виключаються з аналітики.

Порівняння методів виявлення аномалій

Метод Точність Швидкість Примітка
Графові нейромережі 95% Середня Аналіз зв'язків між акаунтами
Статистичні тести 90% Висока Виявлення викидів за частотою
LSTM-аномалії 93% Низька Потребує історичних даних

Для донавчання моделей використовується техніка transfer learning з попередньо навченими вагами, а також аугментація текстових даних для підвищення стійкості до варіацій. Оцінка якості проводиться за метриками F1, precision, recall та AUC-ROC, що дозволяє об'єктивно порівнювати різні архітектури.

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

  1. Аналітика та аудит — визначаємо цілі, список джерел, частоту оновлення.
  2. Проєктування — обираємо архітектуру (event-driven мікросервіси), стек моделей, схему даних.
  3. Реалізація — пишемо конектори до API, налаштовуємо пайплайни, донавчаємо моделі.
  4. Тестування — прогоняємо на історичних даних, заміряємо точність та latency.
  5. Деплой — розгортаємо у вашому контурі (on-prem або хмара), підключаємо дашборди.

Строки реалізації

Залежно від кількості джерел та складності сегментації — від 4 до 8 тижнів. Включає інтеграцію, навчання моделі, тестування та документацію. Вартість розробки системи під ключ становить від $15,000 до $50,000 в залежності від обсягу даних.

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

  • Повна документація API та архітектури.
  • Донавчені моделі (з можливістю оновлення).
  • Інтерактивний дашборд з часовими рядами та картами.
  • Щотижневі автоматичні звіти з топ-10 трендів та динамікою sentiment.
  • Підтримка на 1 місяць (далі за SLA).

Зв'яжіться з нами для оцінки вашого проєкту. Отримайте консультацію по архітектурі та строкам. Замовте розробку системи під ключ з гарантією якості.

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 дні.