You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用scikit-learn LDA获取各文档的主题概率

获取scikit-learn LDA模型中文档的主题概率

嘿,这事儿我熟!当你用scikit-learn的LDA训练好模型、拿到了主题-词项分布之后,要获取每个文档对应的各主题概率其实超级简单,核心就是用模型的两个关键方法,我给你拆解一下具体步骤:

1. 训练模型时直接获取文档-主题概率

如果你是刚训练模型,直接用fit_transform()代替fit(),这个方法会在训练模型的同时,返回文档-主题概率矩阵:

from sklearn.decomposition import LatentDirichletAllocation
from sklearn.feature_extraction.text import CountVectorizer

# 假设你已经有预处理好的文本数据集texts
# 先构建文档-词项矩阵(LDA通常用CountVectorizer,而非TF-IDF)
vectorizer = CountVectorizer(max_features=1000, stop_words='english')
doc_term_matrix = vectorizer.fit_transform(texts)

# 初始化并训练LDA模型,同时获取文档主题概率
lda_model = LatentDirichletAllocation(n_components=5, random_state=42)
doc_topic_probs = lda_model.fit_transform(doc_term_matrix)

这个doc_topic_probs就是你要的结果:

  • 它是一个二维数组,形状为(文档数量, 主题数量)
  • 第i行第j列的数值,代表第i个文档属于第j个主题的概率
  • 每行的概率加起来总和为1,符合概率分布的特性

2. 已训练好模型?用transform()获取概率

如果你已经用lda_model.fit(doc_term_matrix)完成了训练,之后想要对原有文档或者新文档获取主题概率,直接调用transform()方法就行:

# 对原有文档获取主题概率
existing_doc_probs = lda_model.transform(doc_term_matrix)

# 对新文档获取主题概率(注意:必须用训练时的同一个vectorizer做转换!)
new_texts = ["这是一篇新的测试文档", "另一篇待分析的文本"]
new_doc_term_matrix = vectorizer.transform(new_texts)
new_doc_probs = lda_model.transform(new_doc_term_matrix)

⚠️ 重要提醒:处理新文档时,一定要用训练阶段拟合好的vectorizer调用transform(),绝对不能重新fit(),否则词汇表会不一致,导致结果完全错误!

3. 查看具体文档的主题概率

拿到概率矩阵后,你可以轻松查看单个文档的主题分布,甚至找到它的主导主题(概率最高的主题):

# 查看第1个文档的所有主题概率(注意Python是0索引)
print("第1个文档的主题概率分布:", doc_topic_probs[0])

# 找到该文档的主导主题
dominant_topic_index = doc_topic_probs[0].argmax()
print(f"第1个文档的主导主题是:第{dominant_topic_index+1}个主题")

内容的提问来源于stack exchange,提问作者Adham Enaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:27:10