BERTopic与Hugging Face Hub集成介绍

发布于2023年5月31日
在 GitHub 上更新

Open in Colab

我们很高兴地宣布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 hub filter

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

训练好主题模型后,您可以通过一行代码将其推送到Hugging Face Hub。将模型推送到Hub会自动为您的模型创建一个初始模型卡,其中包括主题概述。下面您可以看到一个基于ArXiv数据训练的模型所产生主题的示例。

点击此处查看所有主题概述。
主题ID 主题关键词 主题频率 标签
-1 语言 - 模型 - 模型 - 数据 - 基于 20 -1_language_models_model_data
0 对话 - 对话 - 回复 - 回复 - 意图 14247 0_dialogue_dialog_response_responses
1 语音 - 自动语音识别 - 语音识别 - 识别 - 结束 1833 1_speech_asr_speech recognition_recognition
2 微调 - 任务 - 提示 - 模型 - 语言 1369 2_tuning_tasks_prompt_models
3 摘要 - 摘要 - 摘要 - 抽象 - 文档 1109 3_summarization_summaries_summary_abstractive
4 问题 - 回答 - 问答 - 回答 - 问答 893 4_question_answer_qa_answering
5 情感 - 情感分析 - 方面 - 分析 - 观点 837 5_sentiment_sentiment analysis_aspect_analysis
6 临床 - 医疗 - 生物医学 - 笔记 - 患者 691 6_clinical_medical_biomedical_notes
7 翻译 - 神经机器翻译 - 机器翻译 - 神经机器 - 神经机器翻译 586 7_translation_nmt_machine translation_neural machine
8 生成 - 文本生成 - 文本 - 语言生成 - 自然语言生成 558 8_generation_text generation_text_language generation
9 仇恨 - 仇恨言论 - 冒犯性 - 言论 - 检测 484 9_hate_hate speech_offensive_speech
10 新闻 - 虚假 - 虚假新闻 - 立场 - 事实 455 10_news_fake_fake news_stance
11 关系 - 关系提取 - 提取 - 关系 - 实体 450 11_relation_relation extraction_extraction_relations
12 命名实体识别 - 命名 - 命名实体 - 实体 - 命名实体识别 376 12_ner_named_named entity_entity
13 解析 - 解析器 - 依赖 - 语料库 - 解析器 370 13_parsing_parser_dependency_treebank
14 事件 - 时间 - 事件 - 事件提取 - 提取 314 14_event_temporal_events_event extraction
15 情感 - 情感 - 多模态 - 情感识别 - 情感的 300 15_emotion_emotions_multimodal_emotion recognition
16 词 - 嵌入 - 词嵌入 - 嵌入 - 词 292 16_word_embeddings_word embeddings_embedding
17 解释 - 解释 - 理由 - 理由 - 可解释性 212 17_explanations_explanation_rationales_rationale
18 形态学 - 阿拉伯语 - 形态学 - 语言 - 屈折变化 204 18_morphological_arabic_morphology_languages
19 主题 - 主题 - 主题模型 - 潜在狄利克雷分配 - 主题建模 200 19_topic_topics_topic models_lda
20 偏见 - 性别 - 偏见 - 性别偏见 - 去偏见 195 20_bias_gender_biases_gender bias
21 定律 - 频率 - 齐夫 - 词 - 长度 185 21_law_frequency_zipf_words
22 法律 - 法院 - 法律 - 法律领域 - 案件 182 22_legal_court_law_legal domain
23 对抗 - 攻击 - 攻击 - 对抗性示例 - 鲁棒性 181 23_adversarial_attacks_attack_adversarial examples
24 常识 - 常识知识 - 推理 - 知识 - 常识推理 180 24_commonsense_commonsense knowledge_reasoning_knowledge
25 量子 - 语义 - 微积分 - 组合 - 意义 171 25_quantum_semantics_calculus_compositional
26 纠正 - 错误 - 错误纠正 - 语法 - 语法错误 161 26_correction_error_error correction_grammatical
27 论证 - 论证 - 论证 - 论证性 - 挖掘 160 27_argument_arguments_argumentation_argumentative
28 讽刺 - 幽默 - 讽刺的 - 检测 - 幽默的 157 28_sarcasm_humor_sarcastic_detection
29 共指 - 消解 - 共指消解 - 提及 - 提及 156 29_coreference_resolution_coreference resolution_mentions
30 词义 - 词义 - 词义消歧 - 词 - 消歧 153 30_sense_word sense_wsd_word
31 知识 - 知识图谱 - 图谱 - 链接预测 - 实体 149 31_knowledge_knowledge graph_graph_link prediction
32 解析 - 语义解析 - 抽象语义表示 - 语义 - 解析器 146 32_parsing_semantic parsing_amr_semantic
33 跨语言 - 语言 - 跨 - 迁移 - 语言 146 33_cross lingual_lingual_cross_transfer
34 机器翻译 - 翻译 - 质量评估 - 质量 - 机器翻译 139 34_mt_translation_qe_quality
35 SQL - 文本SQL - 查询 - Spider - 模式 138 35_sql_text sql_queries_spider
36 分类 - 文本分类 - 标签 - 文本 - 标签 136 36_classification_text classification_label_text
37 风格 - 风格迁移 - 迁移 - 文本风格 - 文本风格迁移 136 37_style_style transfer_transfer_text style
38 问题 - 问题生成 - 问题 - 回答 - 生成 129 38_question_question generation_questions_answer
39 作者身份 - 作者身份归属 - 归属 - 作者 - 作者 127 39_authorship_authorship attribution_attribution_author
40 句子 - 句子嵌入 - 相似性 - 语义文本相似度 - 句子嵌入 123 40_sentence_sentence embeddings_similarity_sts
41 代码 - 识别 - 切换 - 代码切换 - 代码切换 121 41_code_identification_switching_cs
42 故事 - 故事 - 故事生成 - 生成 - 讲故事 118 42_story_stories_story generation_generation
43 篇章 - 篇章关系 - 篇章关系 - 修辞结构理论 - 篇章解析 117 43_discourse_discourse relation_discourse relations_rst
44 代码 - 编程 - 源代码 - 代码生成 - 编程语言 117 44_code_programming_source code_code generation
45 释义 - 释义 - 释义生成 - 释义 - 生成 114 45_paraphrase_paraphrases_paraphrase generation_paraphrasing
46 代理 - 游戏 - 环境 - 指令 - 代理 111 46_agent_games_environment_instructions
47 新冠 - 新冠19 - 19 - 推文 - 流行病 108 47_covid_covid 19_19_tweets
48 链接 - 实体链接 - 实体 - 实体链接 - 实体 107 48_linking_entity linking_entity_el
49 诗歌 - 诗歌 - 歌词 - 诗歌 - 音乐 103 49_poetry_poems_lyrics_poem
50 图像 - 字幕 - 字幕 - 视觉 - 字幕 100 50_image_captioning_captions_visual
51 自然语言推理 - 蕴含 - 推理 - 自然语言推理 - 语言推理 96 51_nli_entailment_inference_natural language inference
52 关键词 - 关键词 - 提取 - 文档 - 短语 95 52_keyphrase_keyphrases_extraction_document
53 简化 - 文本简化 - 文本简化 - 句子 - 简化 95 53_simplification_text simplification_ts_sentence
54 同理心 - 情感 - 情感的 - 同情 - 情感 95 54_empathetic_emotion_emotional_empathy
55 抑郁症 - 心理 - 健康 - 心理健康 - 社交媒体 93 55_depression_mental_health_mental health
56 分词 - 词分词 - 中文 - 中文分词 - 中文词 93 56_segmentation_word segmentation_chinese_chinese word segmentation
57 引用 - 科学 - 论文 - 引用 - 学术 85 57_citation_scientific_papers_citations
58 一致性 - 句法 - 动词 - 语法 - 主谓一致 85 58_agreement_syntactic_verb_grammatical
59 隐喻 - 字面 - 比喻 - 隐喻 - 习语 83 59_metaphor_literal_figurative_metaphors
60 语义角色标注 - 语义角色 - 角色标注 - 语义角色标注 - 角色 82 60_srl_semantic role_role labeling_semantic role labeling
61 隐私 - 私人 - 联邦式 - 隐私保护 - 联邦学习 82 61_privacy_private_federated_privacy preserving
62 变化 - 语义变化 - 时间 - 语义 - 词汇语义 82 62_change_semantic change_time_semantic
63 双语 - 语言 - 跨语言 - 跨 - 嵌入 80 63_bilingual_lingual_cross lingual_cross
64 政治 - 媒体 - 新闻 - 偏见 - 文章 77 64_political_media_news_bias
65 医疗 - 问答 - 问题 - 问题 - 临床 75 65_medical_qa_question_questions
66 数学 - 数学 - 数学词 - 应用题 - 问题 73 66_math_mathematical_math word_word problems
67 金融 - 股票 - 市场 - 价格 - 新闻 69 67_financial_stock_market_price
68 表格 - 表格 - 表格化 - 推理 - 问答 69 68_table_tables_tabular_reasoning
69 可读性 - 复杂性 - 评估 - 特征 - 阅读 65 69_readability_complexity_assessment_features
70 布局 - 文档 - 文档 - 文档理解 - 提取 64 70_layout_document_documents_document understanding
71 大脑 - 认知 - 阅读 - 句法 - 语言 62 71_brain_cognitive_reading_syntactic
72 手语 - 词汇 - 语言 - 手语 - 语言翻译 61 72_sign_gloss_language_signed
73 视觉问答 - 视觉 - 视觉问题 - 视觉问答 - 问题 59 73_vqa_visual_visual question_visual question answering
74 有偏见的 - 偏见 - 虚假的 - 自然语言处理 - 去偏见 57 74_biased_biases_spurious_nlp
75 视觉 - 对话 - 多模态 - 图像 - 对话 55 75_visual_dialogue_multimodal_image
76 翻译 - 机器翻译 - 机器 - 统计机器翻译 - 统计 54 76_translation_machine translation_machine_smt
77 多模态 - 视觉 - 图像 - 翻译 - 机器翻译 52 77_multimodal_visual_image_translation
78 地理 - 位置 - 地理定位 - 地理 - 位置 51 78_geographic_location_geolocation_geo
79 推理 - 提示 - 大型语言模型 - 思维链 - 链 48 79_reasoning_prompting_llms_chain thought
80 论文 - 评分 - 自动论文评分 - 论文评分 - 论文 45 80_essay_scoring_aes_essay scoring
81 危机 - 灾难 - 交通 - 推文 - 灾难 45 81_crisis_disaster_traffic_tweets
82 图谱 - 文本分类 - 文本 - 图卷积网络 - 分类 44 82_graph_text classification_text_gcn
83 标注 - 工具 - 语言 - 资源 - XML 43 83_annotation_tools_linguistic_resources
84 实体对齐 - 对齐 - 知识图谱 - 实体 - 实体对齐 43 84_entity alignment_alignment_kgs_entity
85 个性 - 特征 - 个性特征 - 评价性 - 文本 42 85_personality_traits_personality traits_evaluative
86 阿尔茨海默病 - 阿尔茨海默病 - 阿尔茨海默病 - 疾病 - 语音 40 86_ad_alzheimer_alzheimer disease_disease
87 分类学 - 上义词 - 分类学 - 上义词 - 上义词 39 87_taxonomy_hypernymy_taxonomies_hypernym
88 主动学习 - 主动 - 主动学习 - 学习 - 不确定性 37 88_active learning_active_al_learning
89 评论 - 摘要 - 摘要 - 评论 - 观点 36 89_reviews_summaries_summarization_review
90 表情符号 - 表情符号 - 情感 - 消息 - 匿名 35 90_emoji_emojis_sentiment_message
91 表格 - 表格文本 - 表格 - 表格文本生成 - 文本生成 35 91_table_table text_tables_table text generation
92 领域 - 领域适应 - 适应 - 领域 - 来源 35 92_domain_domain adaptation_adaptation_domains
93 对齐 - 词对齐 - 平行 - 对 - 对齐 34 93_alignment_word alignment_parallel_pairs
94 印欧语系 - 语言 - 印欧语系 - 名称 - 家族 34 94_indo_languages_indo european_names
95 专利 - 权利要求 - 权利要求生成 - 化学 - 技术 32 95_patent_claim_claim generation_chemical
96 代理 - 涌现 - 通信 - 指称 - 游戏 32 96_agents_emergent_communication_referential
97 图谱 - 抽象语义表示 - 图谱文本 - 图谱 - 文本生成 31 97_graph_amr_graph text_graphs
98 道德 - 伦理 - 规范 - 价值观 - 社会 29 98_moral_ethical_norms_values
99 首字母缩写 - 首字母缩写 - 缩写 - 缩写 - 消歧 27 99_acronym_acronyms_abbreviations_abbreviation
100 类型化 - 实体类型化 - 实体 - 类型 - 类型 27 100_typing_entity typing_entity_type
101 连贯性 - 语篇 - 语篇连贯性 - 连贯性建模 - 文本 26 101_coherence_discourse_discourse coherence_coherence modeling
102 词性 - 标注器 - 标注 - 标注器 - 词性标注 25 102_pos_taggers_tagging_tagger
103 药物 - 社交 - 社交媒体 - 媒体 - 健康 25 103_drug_social_social media_media
104 性别 - 翻译 - 偏见 - 性别偏见 - 机器翻译 24 104_gender_translation_bias_gender bias
105 工作 - 简历 - 技能 - 技能 - 软 21 105_job_resume_skills_skill

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

这次集成的好处在生产用例中尤为显著。用户现在可以轻松地将BERTopic模型部署到现有的应用程序或系统中,确保其数据管道的无缝集成。这种简化的工作流程可实现更快的迭代和高效的模型更新,并确保不同环境之间的一致性。

safetensors:确保安全的模型管理

除了Hugging Face Hub集成,BERTopic现在支持使用safetensors库进行序列化。Safetensors是一种新的简单格式,用于安全地存储张量(而不是pickle),并且速度仍然很快(零拷贝)。我们很高兴看到越来越多的库利用safetensors进行安全序列化。您可以在这篇博客文章中阅读有关该库最近审计的更多信息。

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

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

去年发布了几个人类反馈强化学习数据集。其中一个数据集是OpenAssistant对话数据集。该数据集是通过全球13,500多名志愿者的众包努力生成的。尽管该数据集已经有一些毒性、质量、幽默等方面的分数,但我们可能希望更好地了解该数据集中代表了哪些类型的对话。

BERTopic提供了一种更好地了解此数据集中主题的方法。在此示例中,我们在数据集的英语助手回复部分训练了一个模型。结果生成了一个包含75个主题的主题模型

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

Words associated with top 8 topics

databricks/databricks-dolly-15k是另一个可用于训练RLHF模型的数据集。创建此数据集的方法与OpenAssistant对话数据集截然不同,因为它是由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)
数量 名称 表示
0 240 22_chess_chessboard_practice_strategy ['国际象棋', '棋盘', '练习', '策略', '学习', '兵', '棋盘', '兵', '玩', '套']

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

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,以确保我们没有遗漏主题来确认这一点)。

Topic distribution comparison

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

我们可能会在生产环境中使用主题模型来监控主题是否偏离预期分布过远。这可以作为一种信号,表明您的原始训练数据与您在生产中看到的对话类型之间存在漂移。您还可以决定在收集训练数据时使用主题建模,以确保您正在获取您可能特别关心的主题的示例。

开始使用BERTopic和Hugging Face Hub

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

您可以在此处找到一个入门Colab笔记本,其中展示了如何训练BERTopic模型并将其推送到Hub。

Hub上已有的BERTopic模型示例

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

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

社区

阅读您的关于BERTopic与Hugging Face Hub集成的博客文章!关于主题建模和模型管理的分析尤其具有启发性。

在研究过程中,我找到了关于Hugging Face模型与RunPod集成的资源,涵盖了AI模型设置、图像生成和扩散工作流程:https://mobisoftinfotech.com/resources/blog/flux-on-runpod-using-comfyui

我很想听听您对优化大规模AI应用主题建模的看法!

·
文章作者

这个过程应该类似,特别是考虑到您可以下载模型并通过您想要的任何API运行它。不过,有很多选项可供选择,从GPU加速(例如cuML)到专注于CPU的应用程序(例如Model2Vec)。

注册登录评论