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)。

註冊登入評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.