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

基于15主题LDA模型如何获取所有文档的主导主题?

问题原因分析
  • 模型输出过滤导致的漏出:gensim的LDA模型调用ldamodel[corpus]获取文档主题分布时,默认会过滤掉概率低于minimum_probability(默认值0.01)的主题,若剩余5个主题在所有文档中的占比都低于该阈值,就不会出现在返回结果里,自然不会被判定为任何文档的主导主题。
  • 模型训练效果问题:你设置了alpha="auto",训练过程中会自动调整主题先验分布,如果数据集本身的主题区分度不足,或者训练迭代不充分,会导致部分主题的先验概率被压缩到极低,没有文档会以这些主题为主导。
解决调整方案

一、代码层面调整(优先尝试,无需重训模型)

调用LDA获取文档主题分布时,关闭概率过滤,确保所有15个主题的概率都被返回,不会被过滤。修改后的format_topics_sentences函数参考如下:

def format_topics_sentences(ldamodel=lda_model, corpus=corpus, texts=data):
    sent_topics_df = pd.DataFrame()
    # 改动点:获取所有主题的分布,关闭最低概率过滤
    all_doc_topics = ldamodel.get_document_topics(corpus, minimum_probability=0)
    for i, row in enumerate(all_doc_topics):
        # 按主题占比倒序排列
        row = sorted(row, key=lambda x: (x[1]), reverse=True)
        # 取占比最高的主导主题
        topic_num, prop_topic = row[0]
        wp = ldamodel.show_topic(topic_num)
        topic_keywords = ", ".join([word for word, prop in wp])
        sent_topics_df = sent_topics_df.append(pd.Series([int(topic_num), round(prop_topic,4), topic_keywords]), ignore_index=True)
    sent_topics_df.columns = ['Dominant_Topic', 'Perc_Contribution', 'Topic_Keywords']
    # 后续原有逻辑保持不变
    contents = pd.Series(texts)
    sent_topics_df = pd.concat([sent_topics_df, contents,df1, df2], axis=1)
    return sent_topics_df

二、训练层面调整(调整代码后仍只有10个主导主题时使用)

  • 调小alpha值:alpha控制主题分布的稀疏性,值越小,文档的主导主题越集中,可将自动计算的alpha="auto"改为手动设置alpha=0.1或者更小,强制模型生成更分散的主题分布,避免部分主题被边缘化。
  • 增加训练迭代次数:可以把passes从20调整到30-50,确保模型充分收敛,所有预设主题都被充分训练。
  • 匹配数据集规模:如果你的文档总量太少,不足以支撑15个主题的区分,也会导致部分主题没有对应文档,可以适当减少num_topics的数值,或者补充更多训练语料。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:24:00