BERTopic主题建模中如何列出各主题的全量文档与词汇
BERTopic 提取单主题全量关联文档与完整主题词方法
BERTopic默认返回的主题信息表做了预览截断:Representative_Docs列默认仅返回3-4篇代表性样本文档,Name列默认仅拼接前3-4个高权重主题词,二者都不是全量结果,可通过以下方法直接提取完整数据:
提取指定主题下全部关联文档
所有输入文档的主题分配结果都存在模型的topics_属性中,该属性是和输入文档顺序一一对应的列表,每个元素为对应文档的所属主题ID,直接筛选即可拿到全量关联文档,无需从默认信息表中取数:
# 替换为你建模时传入的原始文档列表 raw_docs = your_input_doc_list # 替换为你要查询的目标主题ID,例如计数为2555的主题对应ID target_topic = 0 # 筛选目标主题下的全部关联文档 all_docs_in_topic = [doc for doc, topic_label in zip(raw_docs, topic_model.topics_) if topic_label == target_topic] # 校验数量,输出值即为该主题实际关联的文档总数 print(len(all_docs_in_topic))
- 注意:
get_topic_info()返回的Representative_Docs字段是算法筛选的典型样本,不是该主题下的全部文档,不要从该字段取全量数据。
提取主题下的完整主题词列表
有两种实现方式,按需选择即可:
- 方式1:初始化模型时提前配置,让主题信息表直接展示全量主题词
初始化BERTopic实例时,通过top_n_words参数指定每个主题要保留的主题词总数,训练完成后调用get_topic_info(),Name列就会展示对应数量的主题词,不会被截断为3-4个:
from bertopic import BERTopic # 按需求设置每个主题保留的主题词数量,默认值为10 topic_model = BERTopic(top_n_words=100) topics, probs = topic_model.fit_transform(raw_docs) # 此时返回的信息表中,Name列会展示对应数量的主题词 full_topic_info = topic_model.get_topic_info()
- 方式2:已完成模型训练无需重跑,直接提取全量主题词
如果已经完成建模不想重新训练,直接调用get_topic()方法传入目标主题ID,即可返回该主题下所有带权重的主题词列表,无截断:
# 返回格式为[(主题词, 权重值), (主题词, 权重值), ...]的全量列表 all_topic_words_with_weight = topic_model.get_topic(target_topic) # 提取纯主题词列表 all_topic_words = [word for word, weight in all_topic_words_with_weight]
如果需要把全量关联文档、全量主题词整合到同一张主题信息表中,遍历所有主题ID分别提取上述两类数据后,作为新列合并到
get_topic_info()返回的DataFrame即可,不会修改模型原有属性。
内容的提问来源于stack exchange,提问作者Noob Coder
相关产品推荐
相关产品推荐

