Содержание
  1. Пять этапов: embedding, UMAP, HDBSCAN, c-TF-IDF и представление темы
  2. Шесть документов и ручная гипотеза вместо фальшивого результата
  3. Как читать topic words, representative documents, размер и noise
  4. Почему можно заменить отдельные компоненты pipeline
  5. Роль языка корпуса и embedding-модели
  6. Изменение параметров не является доказательством лучшего качества
  7. Новые документы и сохранение модели
  8. Частые вопросы
Обзоры

Обзор BERTopic: как находят темы в коллекции текстов

13 ноября 2026 · 8 минут чтения

Обзор BERTopic: как находят темы в коллекции текстов — это разбор последовательности, в которой эмбеддинги документов проходят снижение размерности, кластеризацию и взвешивание терминов. Документация проекта описывает BERTopic как технику тематического моделирования на transformers и c-TF-IDF, создающую плотные кластеры с интерпретируемыми описаниями тем.

Пять этапов: embedding, UMAP, HDBSCAN, c-TF-IDF и представление темы

Документация BERTopic перечисляет основной порядок шагов: sentence-transformers, UMAP, HDBSCAN и c-TF-IDF выполняются последовательно. Каждый шаг решает свою задачу, и вместе они дают то, что читатель видит как «тему».

Embedding. Тексты превращаются в плотные векторы. Обзор Pinecone отмечает, что BERTopic поддерживает несколько библиотек для кодирования текста в векторные представления. Смысл документа живёт в геометрии: близкие по смыслу тексты получают близкие векторы.

UMAP. Снижение размерности. Документация по настройке параметров поясняет, что UMAP приводит эмбеддинги к виду, удобному для кластеризации. Параметр n_components задаёт размерность после сжатия и по умолчанию равен 5.

HDBSCAN. Кластеризация сжатых векторов. Документация называет min_cluster_size важнейшим параметром HDBSCAN: он управляет минимальным размером кластера и числом кластеров. Значение по умолчанию — 10.

c-TF-IDF. Взвешивание терминов внутри кластера. Pinecone описывает c-TF-IDF как модифицированную версию TF-IDF, которая ищет наиболее релевантные термины среди всех «документов» внутри кластера.

Представление темы. Финальный шаг — извлечение темы для каждого кластера. Pinecone формулирует это так: последний шаг BERTopic — извлечение тем для каждого кластера.

Практический вывод: сбой на любом этапе искажает итог. Плохие эмбеддинги дают бессмысленные кластеры, слишком агрессивный UMAP теряет информацию, а неудачный min_cluster_size дробит корпус на микрогруппы.

Шесть документов и ручная гипотеза вместо фальшивого результата

Проверять тематическую модель удобно на маленьком корпусе, где вы заранее знаете ожидаемый смысл. Ниже — учебный пример: шесть коротких документов и ручная гипотеза о двух группах. Это человеческая разметка для проверки смысла. BERTopic на этом наборе редакция не запускала.

ID Текст документа Ручная гипотеза
d1 счёт оплата карта платежи
d2 платёж карта чек платежи
d3 оплата счёт чек платежи
d4 доставка курьер адрес доставка
d5 курьер заказ доставка доставка
d6 адрес доставка заказ доставка

Гипотеза: d1–d3 — платёжные обращения, d4–d6 — доставка. Слово «заказ» может связать обе группы в реальных данных, а эмбеддинги и кластеризация способны выдать другой результат. Готовая таблица документов и гипотез позволяет оценить вывод модели, не подставляя заранее выдуманные идентификаторы тем.

На шести документах с настройкой min_cluster_size по умолчанию ждать ровно двух тем нельзя: корпус слишком мал, и часть текстов может уйти в шум. Учебный набор служит для ручной проверки смысла; качество модели по нему не измеряется.

Как читать topic words, representative documents, размер и noise

Документация проекта показывает, что после обучения доступны get_topic_info() и get_topic(): первый метод возвращает таблицу тем с числом документов и именем, второй — список терминов с весами. В примере из документации тема содержит слова windows, drive, dos, file, disk, каждому из которых сопоставлен вес.

Читать вывод стоит по четырём признакам.

Topic words. Набор терминов с весами. Документация по настройке советует держать top_n_words ниже 30, а лучше между 10 и 20: чем больше слов в теме, тем менее связной она становится.

Representative documents. Документация указывает, что get_representative_docs() возвращает представительные документы темы, а get_document_info(docs) — информацию на уровне документа: тему, вероятность, признак представительности. Название темы подтверждается полными текстами.

Размер. get_topic_info() показывает число документов в каждой теме. Крупная тема с размытыми словами часто означает, что кластеризация склеила разные сюжеты.

Noise. Документация quickstart прямо говорит: тема −1 обозначает все выбросы и обычно игнорируется. Документация по параметрам добавляет, что выбросы ожидаемы, а принудительное сведение шума к нулю может исказить представление данных.

Если группа смешанная, это фиксируют как есть. Присвоение ожидаемой темы вопреки содержимому документов даёт красивую таблицу и неверный вывод.

Почему можно заменить отдельные компоненты pipeline

Документация BERTopic называет шаги полностью модульными: эмбеддинги документов, снижение размерности, кластеризацию, токенизацию тем, взвешивание токенов и представление темы можно заменить или убрать. Документация допускает предположение о независимости шагов, и именно оно делает pipeline гибким.

Практически это выглядит так: вы инстанцируете модель UMAP и передаёте её в BERTopic через umap_model, модель HDBSCAN — через hdbscan_model. Документация приводит пример с UMAP(n_neighbors=15, n_components=10, metric='cosine') и HDBSCAN(min_cluster_size=10, metric='euclidean', prediction_data=True).

Замена компонента меняет свойства результата. n_neighbors в UMAP задаёт число соседних точек при построении приближения многообразия: большие значения дают более глобальный взгляд на структуру и часто более крупные кластеры. min_samples в HDBSCAN по умолчанию равен min_cluster_size и управляет числом выбросов.

Отдельно стоит представление темы. Документация предлагает несколько моделей представления и советует начинать с KeyBERTInspired, которая повышает связность и убирает стоп-слова. Для описания кластеров можно подключить модель OpenAI и генерировать метки, сводки и ключевые слова.

Роль языка корпуса и embedding-модели

Параметр language упрощает выбор модели для тех, кто не знаком с sentence-transformers. Документация перечисляет два варианта: language="english" и language="multilingual".

Английская модель — all-MiniLM-L6-v2, она используется по умолчанию и хорошо работает с английскими документами. Мультиязычная модель — paraphrase-multilingual-MiniLM-L12-v2, она поддерживает более 50 языков, обучалась на многих языках и имеет слегка другую архитектуру.

Практический выбор зависит от корпуса. Для русского корпуса выбирайте модель с поддержкой русского языка и проверяйте осмысленность полученных групп на полных документах. Документация quickstart показывает переключение: BERTopic(language="multilingual") выбирает модель с поддержкой более 50 языков.

Смена embedding-модели меняет геометрию пространства, а значит и все последующие шаги. Один и тот же корпус с разными моделями даст разные кластеры, и сравнивать результаты имеет смысл только с зафиксированной моделью.

Изменение параметров не является доказательством лучшего качества

Документация по настройке предупреждает: хотя BERTopic работает из коробки, есть параметры, которые настраивают под задачу. Настройка меняет поведение модели, и это ещё не означает улучшения.

Разберём на примерах из документации.

min_topic_size задаёт минимальный размер темы. Слишком высокое значение может привести к тому, что темы не создадутся вовсе; слишком низкое даёт множество микрокластеров. Документация советует для корпуса около миллиона документов ставить значение заметно выше 10, например 100 или 500.

nr_topics управляет сокращением числа тем после обучения. Если модель дала 100 тем, а параметр равен 20, модель попытается сократить их до 20. Каждое сокращение запускает пересчёт c-TF-IDF и занимает время.

calculate_probabilities включает расчёт вероятностей тем для документов. Документация называет это вычисление дорогим и по умолчанию выключенным.

low_memory переводит UMAP в экономный режим: памяти расходуется меньше, вычисление идёт медленнее.

Чтобы сравнение параметров было осмысленным, зафиксируйте корпус, embedding-модель и метрику проверки. Изменение одного параметра при неизменных остальных даёт наблюдаемый эффект, который можно обсудить. Рост числа тем или падение доли шума сами по себе качеством не являются.

Новые документы и сохранение модели

Для предсказания на новых документах документация перечисляет transform([new_doc]) и partial_fit(doc) для онлайн-режима. Документация по параметрам HDBSCAN подчёркивает: prediction_data нужно ставить в True, поскольку этот флаг нужен для предсказания новых точек. Если предсказывать на невиданных данных не планируется, значение можно оставить False.

Сохранение модели выполняется через .save("my_model", serialization="safetensors") и BERTopic.load("my_model"). Здесь важно ограничение backend: документация Hugging Face Hub указывает, что сохранённая модель не включает алгоритмы снижения размерности и кластеризации. В том же источнике сказано, что вывод выполняется через косинусную близость между эмбеддингами темы и документа.

Практический вывод: облегчённая модель подходит для инференса по близости к эмбеддингам тем. Для продолжения работы с обученными UMAP и HDBSCAN проверьте, сохраняет ли выбранный формат их состояние; конфигурация параметров сама по себе его не восстанавливает.

Порядок работы с новыми документами:

  1. Обучите модель на корпусе и проверьте темы по representative documents.
  2. Сохраните модель в формате, подходящем выбранному способу инференса, и проверьте, какие обученные компоненты он содержит.
  3. Для новых текстов вызовите transform и посмотрите распределение по темам.
  4. Документы с темой −1 считайте выбросами и разбирайте отдельно.
  5. Перед онлайн-обновлением через partial_fit проверьте совместимость выбранных компонентов с этим режимом по их документации.

Частые вопросы

Что такое BERTopic простыми словами?
Это техника тематического моделирования, которая использует transformers и c-TF-IDF для создания плотных кластеров с интерпретируемыми описаниями тем. Документы кодируются в векторы, сжимаются, группируются, а затем внутри каждой группы взвешиваются термины. Результат — список тем с ключевыми словами и документами.

Чем c-TF-IDF отличается от обычного TF-IDF?
Pinecone описывает c-TF-IDF как модифицированную версию TF-IDF, которая ищет наиболее релевантные термины среди всех документов внутри кластера. Классический TF-IDF оценивает термин в отдельном документе, а c-TF-IDF работает на уровне группы. Это позволяет получить слова, характерные именно для данной темы.

Почему документы попадают в тему −1?
Документация quickstart поясняет: тема −1 обозначает все выбросы и обычно игнорируется. HDBSCAN относит к шуму точки, которые не попали ни в один плотный кластер. Документация по параметрам добавляет, что выбросы ожидаемы, а их принудительное устранение может исказить картину данных.

Как выбрать язык и embedding-модель?
Параметр language упрощает выбор модели. Для английских текстов подходит all-MiniLM-L6-v2 по умолчанию, для корпусов на многих языках — paraphrase-multilingual-MiniLM-L12-v2 с поддержкой более 50 языков. Для русского корпуса выбирайте модель с поддержкой русского языка и проверяйте качество тем на своих документах.

Можно ли предсказывать темы для новых документов?
Да, transform([new_doc]) назначает темы новым документам. Для варианта с обученным HDBSCAN нужен флаг prediction_data=True; облегчённая Hub-модель использует близость эмбеддингов без этого кластеризатора. Для онлайн-обновления через partial_fit(doc) проверьте совместимость выбранных компонентов.

Читайте также

3 материала