BERTopic與Hugging Face Hub整合介紹
我們很高興地宣佈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推理小部件來試用該模型,看看它是否適合您的用例。
訓練好主題模型後,您可以透過一行程式碼將其推送到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個主題及其相關詞。我們可以看到,第二常見的主題主要由“回覆詞”組成,這在聊天模型中我們經常看到,即旨在“禮貌”和“樂於助人”的回覆。我們還可以看到大量與程式設計或計算主題以及物理、食譜和寵物相關的主題。
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,以確保我們沒有遺漏主題來確認這一點)。
兩個資料集之間主題分佈的比較
我們可能會在生產環境中使用主題模型來監控主題是否偏離預期分佈過遠。這可以作為一種訊號,表明您的原始訓練資料與您在生產中看到的對話型別之間存在漂移。您還可以決定在收集訓練資料時使用主題建模,以確保您正在獲取您可能特別關心的主題的示例。
開始使用BERTopic和Hugging Face Hub
您可以訪問官方文件以獲取快速入門指南,以幫助您使用BERTopic。
您可以在此處找到一個入門Colab筆記本,其中展示瞭如何訓練BERTopic模型並將其推送到Hub。
Hub上已有的BERTopic模型示例
- MaartenGr/BERTopic_ArXiv:一個在1991年之後約30000篇ArXiv計算與語言文章(cs.CL)上訓練的模型。
- MaartenGr/BERTopic_Wikipedia:一個在1000000個英文維基百科頁面上訓練的模型。
- davanstrien/imdb_bertopic:一個在IMDB資料集的無監督分割上訓練的模型
您可以使用庫過濾器在Hub上找到BERTopic模型的完整概述
我們邀請您探索這項新整合的可能性,並在Hub上分享您訓練好的模型!