我正在关注英语维基百科' https://radimrehurek.com/gensim/wiki.html#latent-dirichlet-allocation
的gensim教程它解释了在训练期间使用tf-idf(至少对于LSA,LDA不太清楚)。
我希望将tf-idf转换器应用于新文档,但是,在tut结束时,它建议只输入一个词袋。
doc_lda = lda[doc_bow]
LDA是否只需要词袋矢量?
答案 0 :(得分:7)
在契约中,在gensim教程的Wikipedia示例中,Radim Rehurek使用在预处理步骤中生成的tfidf语料库。
mm = gensim.corpora.MmCorpus('wiki_en_tfidf.mm')
我认为原因只是这个矩阵稀疏且易于处理(并且由于预处理步骤已经存在)。
LDA不一定需要在tfidf语料库上进行培训。如果您使用gensim教程“Corpora和Vector Spaces”中显示的语料库,该模型可以正常工作:
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)
请注意,“文本”是一个词袋矢量。正如您所指出的那样,这是LDA模型的核心部分。 TF-IDF根本不起任何作用。实际上,Blei(他开发了LDA)在2003年的论文(题为“潜在Dirichlet分配”)的引言中指出,LDA解决了TF-IDF模型的缺点并使这种方法落后。 LSA是强有力的代数,并且通常(但不一定)使用TF-IDF矩阵,而LDA是概率模型,其试图估计文档中的主题和主题中的单词的概率分布。 TF-IDF的加权对此不是必需的。
TL; DR:是的,LDA只需要一个词袋矢量。
答案 1 :(得分:4)
不要不同意Jérôme的回答,在某种程度上,tf-idf用于潜在的狄利克雷分配中。如论文Topic Models by Blei and Lafferty中所读(例如第6页-可视化主题和第12页),tf-idf分数对于LDA可能非常有用。它可以用于可视化主题或选择词汇表。 “使用整个词汇表通常在计算上是昂贵的。通过TFIDF选择前V个单词是修剪词汇表的有效方法”。
这就是说,LDA不需要tf-idf来推断主题,但是它可以很有用,并且可以改善您的结果。