【问题标题】:Understanding LDA Transformed Corpus in Gensim了解 Gensim 中的 LDA 转换语料库
【发布时间】:2014-06-23 22:51:13
【问题描述】:

我试图检查 BOW 语料库与 LDA[BOW 语料库] 的内容(由在该语料库上训练的 LDA 模型转换而成,例如 35 个主题) 我发现以下输出:

DOC 1 : [(1522, 1), (2028, 1), (2082, 1), (6202, 1)]  
LDA 1 : [(29, 0.80571428571428572)]  
DOC 2 : [(1522, 1), (5364, 1), (6202, 1), (6661, 1), (6983, 1)]  
LDA 2 : [(29, 0.83809523809523812)]  
DOC 3 : [(3079, 1), (3395, 1), (4874, 1)]  
LDA 3 : [(34, 0.75714285714285712)]  
DOC 4 : [(1482, 1), (2806, 1), (3988, 1)]  
LDA 4 : [(22, 0.50714288283121989), (32, 0.25714283145449457)]  
DOC 5 : [(440, 1), (533, 1), (1264, 1), (2433, 1), (3012, 1), (3902, 1), (4037, 1), (4502, 1), (5027, 1), (5723, 1)]  
LDA 5 : [(12, 0.075870715371114297), (30, 0.088821329943986921), (31, 0.75219107156801579)]  
DOC 6 : [(705, 1), (3156, 1), (3284, 1), (3555, 1), (3920, 1), (4306, 1), (4581, 1), (4900, 1), (5224, 1), (6156, 1)]  
LDA 6 : [(6, 0.63896110435842401), (20, 0.18441557445724915), (28, 0.09350643806744402)]  
DOC 7 : [(470, 1), (1434, 1), (1741, 1), (3654, 1), (4261, 1)]  
LDA 7 : [(5, 0.17142855723258577), (13, 0.17142856888458904), (19, 0.50476192150187316)]  
DOC 8 : [(2227, 1), (2290, 1), (2549, 1), (5102, 1), (7651, 1)]  
LDA 8 : [(12, 0.16776844589094803), (19, 0.13980868559963203), (22, 0.1728575716782704), (28, 0.37194624921210206)]  

在哪里, DOC N 是来自 BOW 语料库的文档 LDA N 是该 LDA 模型对 DOC N 的变换

我将每个转换后的文档“LDA N”的输出理解为文档 N 所属的主题是否正确?通过这种理解,我可以看到像 4、5、6、7 和 8 这样的文档属于多个主题,例如 DOC 8 以各自的概率属于主题 12、19、22 和 28。

您能否解释一下 LDA N 的输出并纠正我对这个输出的理解,尤其是在另一个线程 HERE - 由 Gensim 的创建者本人提到的一个文档属于 ONE 主题?

【问题讨论】:

    标签: python nlp lda gensim


    【解决方案1】:

    您对gensim 输出的LDA 的理解是正确的。不过您需要记住的是,LDA[corpus] 只会输出超过特定阈值(在初始化模型时设置)的主题。

    document belongs to ONE topic 问题是您需要自行决定的问题。 LDA 为您提供给它的每个文档的主题分布*。然后,您需要决定一个具有(例如)50% 主题的文档是否足以使该文档属于该主题。

    (*) 再次提醒您,LDA[corpus] 只会向您显示超过阈值的那些,而不是整个分布。您也可以使用

    访问整个发行版
    theta, _ = lda.inference(corpus)
    theta /= theta.sum(axis=1)[:, None]
    

    【讨论】:

    • 感谢@Matti 的解释 - 解决了很多问题。不幸的是,gensim 文档比 tfidf 矩阵更稀疏,因此很难找到我如何“决定”每个文档的主题数量。从here 看起来gamma_threshold 可能是相关的,我只看到你提到的theta 的一个不相关实例。我如何在训练模型时做出这个初始决定,以便在调用 lda[corpus[i]] 时获得 n 主题的完整分布 doc[i] 我训练了模型?
    • 如果你想要完整的分发,我建议你使用上面的代码,因为这是 LdaModel 在内部所做的,但随后添加了一个 for 循环来生成列表输出格式 - 这是浪费如果你想拥有完整的 dist 时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多