理解Gensim中的LDA转换语料库

6 投票
1 回答
2683 浏览
提问于 2025-04-18 05:38

我试着查看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,属于多个主题,比如文档8属于主题12、19、22和28,并且有相应的概率。

能不能请你解释一下LDA N的输出,并纠正我对这个输出的理解?特别是在另一个讨论中,Gensim的创始人提到过一个文档只属于一个主题?

1 个回答

6

你对来自 gensimLDA 输出的理解是正确的。不过,你需要记住的是,LDA[corpus] 只会输出超过某个阈值的主题,这个阈值是在你初始化模型时设定的。

关于 文档只属于一个主题 的问题,你需要自己做决定。LDA 会给你每个输入文档的主题分布。你需要决定一个文档如果有(比如说)50% 的某个主题,是否就足够让这个文档归属于这个主题。

(*)再次提醒,你要记住 LDA[corpus] 只会显示那些超过阈值的主题,而不是整个分布。如果你想查看整个分布,可以使用

theta, _ = lda.inference(corpus)
theta /= theta.sum(axis=1)[:, None]

撰写回答