合并BERTopic主题后如何获取各主题下的全部文档?
解决BERTopic合并主题后获取更新主题的问题
- 核心问题:
merge_topics仅更新模型内部的主题结构,但不会自动修改之前fit_transform返回的topics列表,需主动重新获取文档的主题分配。 - 两种可行解决方法:
方法1:调用transform重新生成更新后的主题列表
执行merge_topics后,使用模型的transform方法对文档重新进行主题分配,直接得到更新后的主题ID:
from bertopic import BERTopic from sklearn.datasets import fetch_20newsgroups import pandas as pd docs = fetch_20newsgroups(subset='all')['data'] topic_model = BERTopic() topics, probabilities = topic_model.fit_transform(docs) topics_to_merge = [[1, 2], [3, 4]] topic_model.merge_topics(docs, topics_to_merge) # 获取更新后的主题列表 updated_topics, _ = topic_model.transform(docs) df = pd.DataFrame({'topic': updated_topics, 'document': docs})
方法2:利用模型的主题映射转换旧主题ID
merge_topics执行后,模型会生成topic_mapping_属性,存储旧主题到新主题的映射关系,可直接用它转换原topics列表:
# 前面代码与方法1一致 topic_model.merge_topics(docs, topics_to_merge) # 通过主题映射转换旧主题ID topic_mapping = topic_model.topic_mapping_ updated_topics = [topic_mapping[topic] for topic in topics] df = pd.DataFrame({'topic': updated_topics, 'document': docs})
- 注意:方法1更稳妥,适合后续对模型有其他调整的场景;方法2性能更高,无需重新计算主题分配。
内容的提问来源于stack exchange,提问作者Henrique Back
相关产品推荐
相关产品推荐

