Press "Enter" to skip to content

介绍 BERTopic 与 Hugging Face Hub 的集成

介绍 BERTopic 与 Hugging Face Hub 的集成 四海 第1张

我们非常高兴地宣布BERTopic Python库的重大更新,扩展了其功能并进一步简化了主题建模爱好者和从业人员的工作流程。BERTopic现在支持直接将训练好的主题模型推送到和从Hugging Face Hub拉取。这种新的集成为在生产环境中轻松利用BERTopic的功能提供了令人兴奋的可能性。

什么是主题建模?

主题建模是一种可以帮助揭示一组文档中隐藏的主题的方法。通过分析文档中的词语,我们可以找到揭示这些潜在主题的模式和连接。例如,一个关于机器学习的文档更有可能使用“梯度”和“嵌入”等词语,而不是关于烘焙面包的文档。

每个文档通常涵盖不同比例的多个主题。通过检查词语统计,我们可以识别出代表这些主题的相关词语的聚类。这使我们能够分析一组文档,并确定它们讨论的主题,以及每个文档内主题的平衡。最近,主题建模的新方法已经超越了使用词语,而是使用更丰富的表示,如基于Transformer的模型提供的表示。

什么是BERTopic?

BERTopic是一个先进的Python库,使用各种嵌入技术和c-TF-IDF进行主题建模过程,从而创建出密集的聚类,方便解释主题,同时保留主题描述中的重要词语。

BERTopic库概述

尽管BERTopic易于入门,但它支持一系列高级主题建模方法,包括引导、监督、半监督和手动主题建模。最近,BERTopic还增加了对多模态主题模型的支持。BERTopic还提供了一套丰富的工具来生成可视化效果。

BERTopic为用户提供了一个强大的工具,可以发现文本集合中的重要主题,从而获得有价值的见解。使用BERTopic,用户可以分析客户评论、探索研究论文或轻松对新闻文章进行分类,使其成为任何希望从文本数据中提取有意义信息的人的必备工具。

使用Hugging Face Hub进行BERTopic模型管理

通过最新的集成,BERTopic用户可以轻松地将其训练好的主题模型推送到和从Hugging Face Hub拉取。这种集成标志着简化在不同环境中部署和管理BERTopic模型的重要里程碑。

将BERTopic模型训练并推送到Hub的过程可以在几行代码中完成

from bertopic import BERTopic

topic_model = BERTopic("english")
topics, probs = topic_model.fit_transform(docs)
topic_model.push_to_hf_hub('davanstrien/transformers_issues_topics')

然后,您可以用两行代码加载此模型并将其用于对新数据进行预测。

from bertopic import BERTopic
topic_model = BERTopic.load("davanstrien/transformers_issues_topics")

通过利用Hugging Face Hub的功能,BERTopic用户可以轻松共享、版本控制和协作处理其主题模型。Hub充当一个中央存储库,允许用户存储和组织其模型,使在生产环境中部署模型、与同事分享模型或向更广泛的NLP社区展示模型变得更加容易。

您可以使用Hub上的libraries过滤器查找BERTopic模型。

介绍 BERTopic 与 Hugging Face Hub 的集成 四海 第2张

一旦您找到感兴趣的BERTopic模型,您可以使用Hub推理小部件来尝试该模型,并查看它是否适合您的用例。

一旦您训练好一个主题模型,您可以用一行代码将其推送到Hugging Face Hub。将模型推送到Hub将自动为您的模型创建一个初始模型卡片,其中包括主题概览。下面是在ArXiv数据上训练的模型产生的主题示例。

点击这里查看所有主题的概述。

由于改进的保存过程,对大型数据集的训练会生成较小的模型大小。在下面的示例中,一个BERTopic模型在100,000个文档上进行了训练,结果是一个大约50MB的模型,保留了原始模型的所有功能。对于推理,模型可以进一步缩小到仅约3MB!

介绍 BERTopic 与 Hugging Face Hub 的集成 四海 第3张此整合的好处对于生产用例尤其值得注意。用户现在可以轻松地将BERTopic模型部署到现有应用程序或系统中,确保在数据管道中实现无缝集成。这种简化的工作流程实现了更快的迭代和高效的模型更新,并确保在不同环境中保持一致性。

safetensors:确保安全的模型管理

除了Hugging Face Hub整合,BERTopic现在还支持使用safetensors库进行序列化。Safetensors是一种新的安全存储张量的简单格式(而不是pickle),它仍然非常快速(零拷贝)。我们很高兴看到越来越多的库利用safetensors进行安全序列化。您可以在此博客文章中阅读有关该库的最新审计。

使用BERTopic探索RLFH数据集的示例

为了展示BERTopic的一些功能,让我们看一个如何使用它来监视用于训练聊天模型的数据集中主题变化的示例。

过去一年中,已发布了几个用于人类反馈强化学习的数据集。其中一个数据集是OpenAssistant Conversations数据集。该数据集通过全球志愿者的大规模众包努力产生。虽然该数据集已经具有某些有关毒性、质量、幽默等的评分,但我们可能希望更好地了解该数据集中代表的对话类型。

BERTopic提供了一种更好地了解数据集中主题的方法。在这种情况下,我们在数据集的英语助手回应部分上训练了一个模型,得到了一个包含75个主题的主题模型。

BERTopic提供了多种可视化数据集的方法。我们可以看到下面的前8个主题及其相关词汇。我们可以看到,第二个最频繁的主题主要由“回应词”组成,我们经常在聊天模型中经常看到,即旨在“礼貌”和“有帮助”的回应。我们还可以看到大量与编程或计算主题以及物理学、食谱和宠物相关的主题。

介绍 BERTopic 与 Hugging Face Hub 的集成 四海 第4张

databricks/databricks-dolly-15k是另一个可用于训练RLFH模型的数据集。与OpenAssistant Conversations数据集不同,创建此数据集的方法与通过志愿者进行众包不同,而是由Databricks的员工创建的。也许我们可以使用训练好的BERTopic模型来比较这两个数据集中的主题?

新的BERTopic Hub整合意味着我们可以加载这个训练好的模型并将其应用于新的示例。

topic_model = BERTopic.load("davanstrien/chat_topics")

我们可以对单个示例文本进行预测:

example = "Stalemate is a drawn position. It doesn't matter who has captured more pieces or is in a winning position"
topic, prob = topic_model.transform(example)

我们可以获取有关预测主题的更多信息

topic_model.get_topic_info(topic)

我们可以看到这里预测的主题似乎是有意义的。我们可能希望将此扩展到比较整个数据集的预测主题。

from datasets import load_dataset

dataset = load_dataset("databricks/databricks-dolly-15k")
dolly_docs = dataset['train']['response']
dolly_topics, dolly_probs = topic_model.transform(dolly_docs)

然后,我们可以比较两个数据集中主题的分布。我们可以看到,根据我们的BERTopic模型,dolly数据集中的主题分布似乎更广泛。这可能是由于创建这两个数据集的不同方法造成的(我们可能希望在两个数据集上重新训练BERTopic以确保我们没有错过主题以进行确认)。

介绍 BERTopic 与 Hugging Face Hub 的集成 四海 第5张

两个数据集之间主题分布的比较

我们可以在生产环境中使用主题模型来监测主题是否偏离预期分布。这可以作为一个信号,表明原始训练数据和生产中所见到的对话类型之间存在偏差。您还可以决定在收集训练数据时使用主题建模,以确保获取与您特别关注的主题相关的示例。

开始使用BERTopic和Hugging Face Hub

您可以访问官方文档,获取快速入门指南以帮助使用BERTopic。

您可以在这里找到一个起始的Colab笔记本,展示如何训练BERTopic模型并将其推送到Hub。

一些BERTopic模型在Hub上已经存在:

  • MaartenGr/BERTopic_ArXiv:在1991年之后,训练了约30000篇ArXiv计算和语言(cs.CL)文章的模型。
  • MaartenGr/BERTopic_Wikipedia:在1000000篇英文维基百科页面上训练的模型。
  • davanstrien/imdb_bertopic:在IMDB数据集的无监督拆分上训练的模型。

您可以使用库过滤器在Hub上找到BERTopic模型的完整概览。

我们邀请您探索这一新集成的可能性,并在Hub上分享您训练的模型!

Leave a Reply

Your email address will not be published. Required fields are marked *