如何获取BERTopic中model.visualize_topics()的文档坐标及源码?
解决BERTopic可视化中文档坐标获取与保存问题
1. 定位真正生成坐标的源码
你贴出的model.visualize_topics()只是外层封装函数,实际可视化逻辑和坐标计算都在plotting.visualize_topics()中。可以通过两种方式查看完整源码:
- 本地安装环境中,找到BERTopic安装目录下的
plotting/_topics.py文件,打开即可看到visualize_topics的完整实现,包含坐标生成、数据组装的全部代码。 - 在Python中直接打印函数源码:
from bertopic import plotting import inspect print(inspect.getsource(plotting.visualize_topics))
2. 获取并保存文档坐标的两种方法
方式一:从生成的Plotly Figure中提取
生成可视化图表后,直接从返回的Figure对象里提取文档坐标数据:
fig = model.visualize_topics() # 提取文档散点的原始数据(图表中的文档点对应fig.data[0]) doc_scatter_data = fig.data[0] # 获取x、y坐标 doc_x = doc_scatter_data.x doc_y = doc_scatter_data.y # 获取每个点对应的主题标签 doc_topic_labels = doc_scatter_data.customdata[:, 0] # 保存坐标到CSV用于后续分析 import pandas as pd pd.DataFrame({ "x": doc_x, "y": doc_y, "topic": doc_topic_labels }).to_csv("document_coordinates.csv", index=False)
方式二:直接调用底层降维逻辑获取
可视化中的坐标来自UMAP(或你指定的其他降维模型)对文档嵌入的转换,可直接跳过可视化步骤获取原始坐标:
# 获取文档的嵌入向量 doc_embeddings = model.embeddings_ # 获取训练好的降维模型(默认是UMAP) dim_reduction_model = model.umap_model # 计算文档坐标 doc_coordinates = dim_reduction_model.transform(doc_embeddings) # 保存坐标,doc_coordinates是(n_docs, 2)的数组,第一列x、第二列y pd.DataFrame(doc_coordinates, columns=["x", "y"]).to_csv("doc_coordinates_raw.csv", index=False)
注意:如果可视化时指定了topics或top_n_topics过滤主题,需要对应过滤坐标数据,确保和可视化展示的文档一致
内容的提问来源于stack exchange,提问作者selen arslan
相关产品推荐
相关产品推荐

