Gensim LDA 主题分配

Gensim LDA topic assignment

我希望使用 LDA 将每个文档分配给一个主题。现在我意识到你得到的是来自 LDA 的主题分布。然而,正如您从下面的最后一行中看到的,我将其分配给最可能的主题。

我的问题是这样的。为了获得这些主题,我必须第二次 运行 lda[corpus]。是否有其他一些内置的 gensim 函数可以直接给我这个主题分配向量?特别是因为 LDA 算法已经通过文档它可能已经保存了这些主题分配?

    # Get the Dictionary and BoW of the corpus after some stemming/ cleansing
    texts = [[stem(word) for word in document.split() if word not in STOPWORDS] for document in cleanDF.text.values]
    dictionary = corpora.Dictionary(texts)
    dictionary.filter_extremes(no_below=5, no_above=0.9)
    corpus = [dictionary.doc2bow(text) for text in texts]

    # The actual LDA component
    lda = models.LdaMulticore(corpus=corpus, id2word=dictionary, num_topics=30, chunksize=10000, passes=10,workers=4) 

    # Assign each document to most prevalent topic
    lda_topic_assignment = [max(p,key=lambda item: item[1]) for p in lda[corpus]]
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]


test =LDA[corpus[0]]
print(test)
sorted(test, reverse=True, key=lambda x: x[1])

Topics = ['Topic_'+str(sorted(LDA[i], reverse=True, key=lambda x: x[1])[0][0]).zfill(3) for i in corpus]

没有其他内置的 Gensim 函数可以直接给出主题分配向量。

你的问题是有效的,LDA 算法已经通过文档,但是 LDA 的实现是通过更新块中的模型(基于 chunksize 参数的值)来工作的,因此它不会保留整个语料库在记忆中。

因此您必须使用 lda[corpus] 或使用方法 lda.get_document_topics()