Кластеризація текстових документів: пайплайн, алгоритми та кейси

Зауважимо: коли в корпусі накопичуються десятки тисяч неструктурованих документів – звернення клієнтів, наукові статті, юридичні договори – ручна категоризація стає неможливою. Кластеризація групує документи за смисловою близькістю без єдиної мітки, використовуючи ембеддінги та алгоритми машинного н

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

Часті запитання

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

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

Зауважимо: коли в корпусі накопичуються десятки тисяч неструктурованих документів – звернення клієнтів, наукові статті, юридичні договори – ручна категоризація стає неможливою. Кластеризація групує документи за смисловою близькістю без єдиної мітки, використовуючи ембеддінги та алгоритми машинного навчання. Головна складність – прокляття розмірності: прямі 768-вимірні вектори з Sentence-BERT дають погані кластери без зниження розмірності. Ми реалізували пайплайн для трьох великих проєктів: від сегментації техпідтримки (50 тис. діалогів) до організації корпоративного архіву (200 тис. договорів). Стек: cointegrated/rubert-tiny2, UMAP, HDBSCAN. У статті розберемо кожен етап, порівняємо алгоритми та покажемо, як отримати Silhouette Score >0.4. Також розглянемо типові помилки: ігнорування стоп-слів, неправильний min_cluster_size та використання лише однієї метрики. Це дозволяє заощадити до 40% часу на ручному розмічуванні. Отримайте консультацію щодо вашого корпусу – ми оцінимо придатність кластеризації.

Пайплайн кластеризації

Канонічний pipeline, який ми використовуємо, виглядає так:

  1. Очищення та нормалізація – видалення сміттєвих символів, лематизація (pymorphy2 або Mystem), фільтрація стоп-слів.
  2. Ембеддінги – перетворення текстів у вектори фіксованої розмірності (Sentence-BERT, ruBERT).
  3. Зниження розмірності – UMAP стискає 768-вимірні вектори до 10–50 вимірів, зберігаючи топологію.
  4. Кластеризація – HDBSCAN або K-Means.
  5. Інтерпретація – TF-IDF топ-слова або LLM-резюме.
  6. Візуалізація – 2D-карта через t-SNE/UMAP, кольорове маркування кластерів.
Приклад конфігурації для HDBSCAN
import hdbscan from umap import UMAP reducer = UMAP(n_components=15, metric='cosine') clusterer = hdbscan.HDBSCAN(min_cluster_size=10, min_samples=1) 

Як обрати алгоритм кластеризації?

Вибір алгоритму – ключовий компроміс між швидкістю та гнучкістю.

Алгоритм Сильні сторони Слабкі сторони Коли застосовувати
K-Means Мільйони точок, лінійна складність Потребує K, чутливий до викидів Заздалегідь відомі категорії (наприклад, 10 типів звернень)
HDBSCAN Не потребує K, автоматично знаходить шум Повільніший на великих даних без оптимізації Пошуковий аналіз, невідома кількість тем
BERTopic End-to-end від тексту до топіків, LLM-інтерпретація Залежність від ембеддінгів, ресурсоємний Швидке прототипування з візуалізацією та док-темплейтами

Для типового проєкту з 10 тис. документів ми обираємо HDBSCAN – він дає робастні кластери та автоматично відсіює сміття. Якщо потрібна миттєва інтерпретація, підключаємо BERTopic.

Порівняння моделей ембеддінгів

Модель Розмірність Мова Швидкість Якість
cointegrated/rubert-tiny2 312 RU висока середня
sbert-base-ru-mean-tokens 768 RU середня хороша
text-embedding-3-small (OpenAI) 1536 Мульти висока відмінна

Як ми це робимо: кейс сегментації звернень техпідтримки

Задача: 50 000 діалогів з клієнтами за останні 3 роки поділити на тематичні кластери. Розмітки немає.

Стек: cointegrated/rubert-tiny2 (компроміс якість/швидкість), UMAP -> HDBSCAN. Після кластеризації кожен кластер інтерпретували через TF-IDF топ-10 слів і додатково – через GPT-4o, передавши 10 випадкових діалогів з кластера. Результат: 23 теми, включаючи «проблеми оплати», «претензії до доставки», «запити документації». Точність розпізнавання теми за першим документом – 89%.

Критичний нюанс: без зниження розмірності UMAP метрики кластеризації падають на 20–30% через «прокляття розмірності». Ми налаштовуємо n_components=15, metric='cosine' – це збільшує Silhouette Score з 0.25 до 0.41.

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

Ми пропонуємо повний цикл впровадження кластеризації під ключ за 2–3 тижні:

  • Аудит корпусу: оцінка обсягу, якості, мовних особливостей.
  • Підбір ембеддінгів та алгоритмів під вашу задачу (ми перебираємо 3–4 конфіги).
  • Реалізація пайплайну на Python: pandas + scikit-learn + umap-learn + hdbscan/bertopic.
  • Тестування на відкладеній вибірці: метрики + візуальний аналіз карти.
  • Деплой у вигляді Docker-контейнера або REST API на FastAPI.
  • Документація: інструкція з перенавчання, опис кластерів, дашборд (Grafana/Streamlit).

Ми гарантуємо прозорість – ви отримуєте відтворювані скрипти та опис моделі у форматі Model Card.

Оцінка якості без міток

Внутрішні метрики допомагають відсіяти провальні конфігурації:

  • Silhouette Score – компактність і розділеність кластерів. Цільове значення >0.3.
  • Davies-Bouldin Index – чим нижче, тим краще.
  • Coherence (UMass/Word2Vec) – семантична зв'язність топ-слів кластера. Для українського тексту використовуємо натреновані fastText-вектори від RusVectōrēs.

Додатково проводимо експертну валідацію: випадкова вибірка 100 документів, розмітка 3 аналітиками. Розбіжності вирішуємо голосуванням – це дає ground truth для ручного підрахунку точності.

Типові помилки при кластеризації текстів

  • Ігнорування стоп-слів та лематизації: ембеддінги «забиваються» частотним сміттям, кластери втрачають сенс.
  • Занадто низький min_cluster_size в HDBSCAN (менше 5): отримуємо сотні мікрокластерів, які статистично незначущі.
  • Пряма кластеризація 768-вимірних векторів без UMAP: прокляття розмірності знищує метрики.
  • Використання лише однієї метрики якості: Silhouette хороший для K-Means, але для HDBSCAN краще комбінувати з Davies-Bouldin.

Чому варто працювати з нами?

Наш досвід в NLP – 5+ років, понад 50 реалізованих проєктів з обробки текстів, включаючи кластеризацію, RAG-системи та fine-tuning LLM. Ми розуміємо, як навчити модель на вашому корпусі, щоб результат був стабільним у продакшені. Вартість розраховується індивідуально.

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