
Bertopic - это метод моделирования темы, который использует? Трансформеры и C-TF-IDF для создания плотных кластеров, позволяющих легко интерпретировать темы, сохраняя при этом важные слова в описаниях тем.
Бертопич поддерживает все виды методов моделирования тем:
| Управляемый | Контролируется | Полуопервижение |
| Руководство | Многотопические распределения | Иерархический |
| Класс на основе | Динамика | Онлайн/постепенный |
| Мультимодальный | Многоа-аспект | Текст генерация/LLM |
| Zero-Shot (новый!) | Merge Models (новый!) | Семенные слова (новые!) |
Соответствующие средние посты можно найти здесь, здесь и здесь. Для более подробного обзора вы можете прочитать газету или увидеть краткий обзор.
Установка, с преобразователями предложений, может быть сделана с помощью PYPI:
pip install bertopicЕсли вы хотите установить Bertopic с другими моделями встраивания, вы можете выбрать одно из следующих действий:
# Choose an embedding backend
pip install bertopic[flair,gensim,spacy,use]
# Topic modeling with images
pip install bertopic[vision]Для подробного обзора функций Bertopic вы можете проверить полную документацию , или вы можете следовать вместе с одним из примеров ниже:
| Имя | Связь |
|---|---|
| Начните здесь - лучшие практики в Бертопике | |
| ? Новый! - Моделирование темы на больших данных (ускорение графического процессора) | |
| ? Новый! - Тематическое моделирование с Llama 2? | |
| ? Новый! - Моделирование тем с квантованным LLMS | |
| Тематическое моделирование с бертопическим | |
| (Пользовательский) модели встраивания в Бертопик | |
| Продвинутая настройка в Бертопике | |
| (Полу) контролируемое моделирование тем с Bertopic | |
| Динамическое моделирование тематических тематических твитов Трампа | |
| Тематическое моделирование Arxiv Тезисы |
Мы начнем с извлечения тем из известного набора данных о 20 новостных группах, содержащем английские документы:
from bertopic import BERTopic
from sklearn . datasets import fetch_20newsgroups
docs = fetch_20newsgroups ( subset = 'all' , remove = ( 'headers' , 'footers' , 'quotes' ))[ 'data' ]
topic_model = BERTopic ()
topics , probs = topic_model . fit_transform ( docs )После создания тем и их вероятностей мы можем получить доступ ко всем темам вместе с их тематическими представлениями:
> >> topic_model . get_topic_info ()
Topic Count Name
- 1 4630 - 1_ can_your_will_any
0 693 49_ windows_drive_dos_file
1 466 32_j esus_bible_christian_faith
2 441 2_ space_launch_orbit_lunar
3 381 22_ key_encryption_keys_encrypted
... Тема -1 относится ко всем документам выброса и обычно игнорируется. Каждое слово в теме описывает основную тему этой темы и может использоваться для интерпретации этой темы. Далее, давайте посмотрим на наиболее частую тему, которая была сгенерирована:
> >> topic_model . get_topic ( 0 )
[( 'windows' , 0.006152228076250982 ),
( 'drive' , 0.004982897610645755 ),
( 'dos' , 0.004845038866360651 ),
( 'file' , 0.004140142872194834 ),
( 'disk' , 0.004131678774810884 ),
( 'mac' , 0.003624848635985097 ),
( 'memory' , 0.0034840976976789903 ),
( 'software' , 0.0034415334250699077 ),
( 'email' , 0.0034239554442333257 ),
( 'pc' , 0.003047105930670237 )] Используя .get_document_info , мы также можем извлечь информацию на уровне документа, такую как их соответствующие темы, вероятности, независимо от того, являются ли они репрезентативными документами для темы и т. Д.:
> >> topic_model . get_document_info ( docs )
Document Topic Name Top_n_words Probability ...
I am sure some bashers of Pens ... 0 0_ game_team_games_season game - team - games ... 0.200010 ...
My brother is in the market for ... - 1 - 1_ can_your_will_any can - your - will ... 0.420668 ...
Finally you said what you dream ... - 1 - 1_ can_your_will_any can - your - will ... 0.807259 ...
Think ! It ' s the SCSI card doing ... 49 49_ windows_drive_dos_file windows - drive - docs ... 0.071746 ...
1 ) I have an old Jasmine drive ... 49 49_ windows_drive_dos_file windows - drive - docs ... 0.038983 ... Tip : используйте BERTopic(language="multilingual") , чтобы выбрать модель, которая поддерживает 50+ языков.
В Бертопике существует ряд различных тематических представлений, которые мы можем выбрать. Все они сильно отличаются друг от друга и дают интересные перспективы и вариации тематических представлений. Отличный старт - KeyBERTInspired , которая для многих пользователей увеличивает когерентность и снижает остаточные слова из полученных тематических представлений:
from bertopic . representation import KeyBERTInspired
# Fine-tune your topic representations
representation_model = KeyBERTInspired ()
topic_model = BERTopic ( representation_model = representation_model )Тем не менее, вы можете использовать что -то более мощное для описания ваших кластеров. Вы даже можете использовать CHATGPT или другие модели от OpenAI для генерации меток, резюме, фраз, ключевых слов и многого другого:
import openai
from bertopic . representation import OpenAI
# Fine-tune topic representations with GPT
client = openai . OpenAI ( api_key = "sk-..." )
representation_model = OpenAI ( client , model = "gpt-3.5-turbo" , chat = True )
topic_model = BERTopic ( representation_model = representation_model ) Tip .
После обучения нашей бертопической модели мы можем итеративно пройти через сотни тем, чтобы получить хорошее представление о темах, которые были извлечены. Тем не менее, это занимает довольно много времени и не хватает глобального представления. Вместо этого мы можем использовать один из множества вариантов визуализации в Бертопике. Например, мы можем визуализировать темы, которые были созданы таким образом, очень похожие на Ldavis:
topic_model . visualize_topics ()
По умолчанию основными шагами для моделирования тем с Bertopic являются переводчики предложения, UMAP, HDBSCAN и C-TF-IDF, запущенные последовательно. Тем не менее, он предполагает некоторую независимость между этими шагами, что делает Bertopic довольно модульным. Другими словами, Bertopic не только позволяет создавать свою собственную модель темы, но и изучить несколько методов моделирования темы поверх индивидуальной темы:
Вы можете поменять любую из этих моделей или даже полностью их удалить. Следующие шаги полностью модульные:
Бертопич имеет много функций, которые быстро могут стать ошеломляющими. Чтобы облегчить эту проблему, вы найдете обзор всех методов и краткое описание его цели.
Ниже вы найдете обзор общих функций в Бертопике.
| Метод | Код |
|---|---|
| Подгонять модель | .fit(docs) |
| Подготовить модель и предсказать документы | .fit_transform(docs) |
| Прогнозировать новые документы | .transform([new_doc]) |
| Доступ к одиночной теме | .get_topic(topic=12) |
| Получить доступ ко всем темам | .get_topics() |
| Получите тему FREQ | .get_topic_freq() |
| Получить всю тему информации | .get_topic_info() |
| Получите всю информацию о документах | .get_document_info(docs) |
| Получите представительные документы по теме | .get_representative_docs() |
| Обновление темы представления | .update_topics(docs, n_gram_range=(1, 3)) |
| Генерировать тематические этикетки | .generate_topic_labels() |
| Установить тематические этикетки | .set_topic_labels(my_custom_labels) |
| Слияние тем | .merge_topics(docs, topics_to_merge) |
| Уменьшить NR тем | .reduce_topics(docs, nr_topics=30) |
| Уменьшить выбросы | .reduce_outliers(docs, topics) |
| Найти темы | .find_topics("vehicle") |
| Сохранить модель | .save("my_model", serialization="safetensors") |
| Нагрузка модели | BERTopic.load("my_model") |
| Получите параметры | .get_params() |
После обучения вашей модели Бертопической, несколько атрибутов сохраняются в вашей модели. Эти атрибуты, частично, относятся к тому, как информация о модели хранится по оценке во время подгонки. Атрибуты, которые вы видите ниже, заканчиваются в _ и являются общедоступными атрибутами, которые можно использовать для доступа к информации модели.
| Атрибут | Описание |
|---|---|
.topics_ | Темы, которые генерируются для каждого документа после обучения или обновления тематической модели. |
.probabilities_ | Вероятности, которые генерируются для каждого документа, если используются HDBSCAN. |
.topic_sizes_ | Размер каждой темы |
.topic_mapper_ | Класс для отслеживания тем и их отображений в любое время, когда они объединяются/уменьшаются. |
.topic_representations_ | Лучшие термины N на тему и их соответствующие значения C-TF-IDF. |
.c_tf_idf_ | Матрица темы, рассчитанная через C-TF-IDF. |
.topic_aspects_ | Различные аспекты или представления каждой темы. |
.topic_labels_ | Метки по умолчанию для каждой темы. |
.custom_labels_ | Пользовательские метки для каждой темы, сгенерированной через .set_topic_labels . |
.topic_embeddings_ | Встраивались для каждой темы, если использовались embedding_model . |
.representative_docs_ | Репрезентативные документы для каждой темы, если используются HDBSCAN. |
Существует много различных вариантов использования, в которых можно использовать моделирование темы. Таким образом, было разработано несколько вариантов Bertopic, так что один пакет может использоваться во многих вариантах использования.
| Метод | Код |
|---|---|
| Приближение распределения тем | .approximate_distribution(docs) |
| Онлайн -моделирование темы | .partial_fit(doc) |
| Полуопервизированное моделирование тем | .fit(docs, y=y) |
| Контролируемое тематическое моделирование | .fit(docs, y=y) |
| Ручное моделирование темы | .fit(docs, y=y) |
| Мультимодальное моделирование темы | .fit(docs, images=images) |
| Тематическое моделирование на класс | .topics_per_class(docs, classes) |
| Динамическое моделирование темы | .topics_over_time(docs, timestamps) |
| Иерархическое моделирование темы | .hierarchical_topics(docs) |
| Моделирование темы с гидом | BERTopic(seed_topic_list=seed_topic_list) |
| Моделирование темы с нулевым выстрелом | BERTopic(zeroshot_topic_list=zeroshot_topic_list) |
| Объединить несколько моделей | BERTopic.merge_models([topic_model_1, topic_model_2]) |
Оценка тематических моделей может быть довольно сложной из -за несколько субъективного характера оценки. Визуализация различных аспектов тематической модели помогает в понимании модели и облегчает настройку модели по своему вкусу.
| Метод | Код |
|---|---|
| Визуализировать темы | .visualize_topics() |
| Визуализировать документы | .visualize_documents() |
| Визуализировать иерархию документа | .visualize_hierarchical_documents() |
| Визуализировать тематическую иерархию | .visualize_hierarchy() |
| Визуализируйте дерево тем | .get_topic_tree(hierarchical_topics) |
| Визуализировать термины темы | .visualize_barchart() |
| Визуализируйте сходство тем | .visualize_heatmap() |
| Визуализировать снижение срока срока | .visualize_term_rank() |
| Визуализировать распределение вероятности темы | .visualize_distribution(probs[0]) |
| Визуализировать темы со временем | .visualize_topics_over_time(topics_over_time) |
| Визуализировать темы на класс | .visualize_topics_per_class(topics_per_class) |
Чтобы цитировать бертопическую бумагу, используйте следующую ссылку на Bibtex:
@article{grootendorst2022bertopic,
title={BERTopic: Neural topic modeling with a class-based TF-IDF procedure},
author={Grootendorst, Maarten},
journal={arXiv preprint arXiv:2203.05794},
year={2022}
}