
伯托是一种利用的主题建模技术?变形金刚和C-TF-IDF创建密集的簇,可以易于解释的主题,同时在主题描述中保留重要的单词。
伯托支持各种主题建模技术:
| 指导 | 监督 | 半监督 |
| 手动的 | 多主题分布 | 分层 |
| 基于班级 | 动态的 | 在线/增量 |
| 多模式 | 多样性 | 文本生成/法学硕士 |
| 零射(新!) | 合并模型(新!) | 种子单词(新!) |
相应的中等帖子可以在此处,此处和此处找到。有关更详细的概述,您可以阅读本文或查看简要概述。
可以使用PYPI进行安装,并带有句子转换器:
pip install bertopic如果要与其他嵌入式模型安装伯托po,可以选择以下一项:
# Choose an embedding backend
pip install bertopic[flair,gensim,spacy,use]
# Topic modeling with images
pip install bertopic[vision]要深入概述Bertopic的功能,您可以检查完整的文档,也可以跟随以下示例之一:
| 姓名 | 关联 |
|---|---|
| 从这里开始 -伯托的最佳实践 | |
| ?新的! - 大数据的主题建模(GPU加速) | |
| ?新的! - 使用Llama 2的主题建模? | |
| ?新的! - 量化LLM的主题建模 | |
| 主题建模与伯托 | |
| (自定义)嵌入模型 | |
| 伯托的高级定制 | |
| (半)主管主题建模 | |
| 特朗普的推文动态主题建模 | |
| 主题建模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多种语言的模型。
在Bertopic中,我们可以选择许多不同的主题表示。它们彼此之间都大不相同,并提供了有趣的观点和主题表示形式的变化。一个很好的开始是KeyBERTInspired开始,对于许多用户而言,它提高了连贯性并减少了由此产生的主题表示形式:
from bertopic . representation import KeyBERTInspired
# Fine-tune your topic representations
representation_model = KeyBERTInspired ()
topic_model = BERTopic ( representation_model = representation_model )但是,您可能想使用更强大的东西来描述您的群集。您甚至可以使用openai的chatgpt或其他模型来生成标签,摘要,短语,关键字等:
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 ()
默认情况下,使用伯托的主题建模的主要步骤是句子转换器,UMAP,HDBSCAN和C-TF-IDF按顺序运行。但是,它在这些步骤之间假定了一定的独立性,这使得伯托很模块化。换句话说,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_ | 每个主题及其各自的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,则每个主题的代表性文档。 |
在许多不同的用例中,可以使用主题建模。因此,已经开发出多种偏腹变体,以便可以在许多用例中使用一个软件包。
| 方法 | 代码 |
|---|---|
| 主题分布近似 | .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}
}