在gensim LDA模型中,是否需要对新文档应用TF-IDF?

12

我正在跟随“英语维基百科”的gensim教程,网址为https://radimrehurek.com/gensim/wiki.html#latent-dirichlet-allocation

在这里它解释说,在训练过程中使用了tf-idf(至少对于LSA来说是这样的,但对于LDA则不太清楚)。

我本来期望将tf-idf转换器应用于新文档,但在教程的结尾处,它建议仅简单地输入一个词袋。

doc_lda = lda[doc_bow]

LDA需要仅使用词袋向量吗?


与https://stackoverflow.com/questions/25915441/term-weighting-for-original-lda-in-gensim相关,但我不确定“original” LDA是什么意思。 - Luke W
2个回答

23

简而言之:是的,LDA只需要一个词袋向量。

实际上,在gensim教程的维基百科示例中,Radim Rehurek使用预处理步骤生成的TF-IDF语料库。

mm = gensim.corpora.MmCorpus('wiki_en_tfidf.mm')

我相信原因只是这个矩阵是稀疏的且易于处理(并且由于预处理步骤已经存在)。

LDA不一定需要在TF-IDF语料库上进行训练。如果您使用gensim教程中显示的语料库,该模型可以正常工作:语料库和向量空间

from gensim import corpora, models
texts = [['human', 'interface', 'computer'],
         ['survey', 'user', 'computer', 'system', 'response', 'time'],
         ['eps', 'user', 'interface', 'system'],
         ['system', 'human', 'system', 'eps'],
         ['user', 'response', 'time'],
         ['trees'],
         ['graph', 'trees'],
         ['graph', 'minors', 'trees'],
         ['graph', 'minors', 'survey']]

dictionary = corpora.Dictionary(texts)

corpus = [dictionary.doc2bow(text) for text in texts]

lda = models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=10, update_every=1, chunksize =10000, passes=1)

请注意,texts 是一个词袋向量。正如你正确指出的那样,这是LDA模型的核心。TF-IDF在其中根本没有任何作用。

事实上,Blei(开发LDA的人)在2003年的论文《潜在狄利克雷分配》中指出,LDA解决了TF-IDF模型的缺点,并摒弃了这种方法。LSA则完全是代数模型,通常(但不一定)使用TF-IDF矩阵,而LDA是一种概率模型,试图估计文档中主题和主题中单词的概率分布。TF-IDF的加权对此并不必要。


16

不是要反驳Jérôme的回答,tf-idf在潜在狄利克雷分配中有一定程度的应用。正如可以在论文中读到的Blei和Lafferty的主题模型(例如第6页和第12页)中所述,tf-idf得分对于LDA非常有用。它可以用于可视化主题或选择词汇表。 “使用整个词汇表通常计算成本很高。通过TFIDF选择前V个单词是剪枝词汇表的有效方法”。

也就是说,LDA并不需要tf-idf来推断主题,但它可能会有用,并且可以提高您的结果。


1
我同意!我尝试在10万条数据上使用BOW和TF-IDF进行LDA,结果使用TF-IDF时主题更加合理且结果略有改善。我会继续深入研究并分享我的发现! - satish silveri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接